Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 532b97dc authored by Iván Budnik's avatar Iván Budnik Committed by Android (Google) Code Review
Browse files

Merge "Bypass app package visibility for package name check"

parents 383a0536 2f24cbe9
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ interface IMediaRouterService {
    // MediaRouterService.java for readability.

    // Methods for MediaRouter2
    boolean verifyPackageName(String clientPackageName);
    void enforceMediaContentControlPermission();
    List<MediaRoute2Info> getSystemRoutes();
    RoutingSessionInfo getSystemSessionInfo();
+4 −9
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@ import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
@@ -211,17 +210,13 @@ public final class MediaRouter2 {
        try {
            // SecurityException will be thrown if there's no permission.
            serviceBinder.enforceMediaContentControlPermission();
        } catch (RemoteException e) {
            e.rethrowFromSystemServer();
        }

        PackageManager pm = context.getPackageManager();
        try {
            pm.getPackageInfo(clientPackageName, 0);
        } catch (PackageManager.NameNotFoundException ex) {
            if (!serviceBinder.verifyPackageName(clientPackageName)) {
                Log.e(TAG, "Package " + clientPackageName + " not found. Ignoring.");
                return null;
            }
        } catch (RemoteException e) {
            e.rethrowFromSystemServer();
        }

        synchronized (sSystemRouterLock) {
            MediaRouter2 instance = sSystemMediaRouter2Map.get(clientPackageName);
+15 −0
Original line number Diff line number Diff line
@@ -152,6 +152,21 @@ class MediaRouter2ServiceImpl {

    // Start of methods that implement MediaRouter2 operations.

    @NonNull
    public boolean verifyPackageName(@NonNull String clientPackageName) {
        final long token = Binder.clearCallingIdentity();

        try {
            PackageManager pm = mContext.getPackageManager();
            pm.getPackageInfo(clientPackageName, PackageManager.PackageInfoFlags.of(0));
            return true;
        } catch (PackageManager.NameNotFoundException ex) {
            return false;
        } finally {
            Binder.restoreCallingIdentity(token);
        }
    }

    @NonNull
    public void enforceMediaContentControlPermission() {
        final int pid = Binder.getCallingPid();
+6 −0
Original line number Diff line number Diff line
@@ -378,6 +378,12 @@ public final class MediaRouterService extends IMediaRouterService.Stub
        mService2.dump(pw, "");
    }

    // Binder call
    @Override
    public boolean verifyPackageName(String clientPackageName) {
        return mService2.verifyPackageName(clientPackageName);
    }

    // Binder call
    @Override
    public void enforceMediaContentControlPermission() {