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

Commit a0c91aac authored by Julia Reynolds's avatar Julia Reynolds
Browse files

Call into permission system with cleared binder identity

These methods are called when an app posts a notification
and cannot be called with the app's context

Test: enable the permission migration and post a notification
from a non-system app; atest PermissionHelperTest
Bug: 194833441

Change-Id: Ie19ccf0098b5bb93b9d192f4bdece7f1a689bab8
parent b3f9a846
Loading
Loading
Loading
Loading
+30 −14
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.content.pm.IPackageManager;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ParceledListSlice;
import android.os.Binder;
import android.os.RemoteException;
import android.permission.IPermissionManager;
import android.util.ArrayMap;
@@ -73,7 +74,12 @@ public final class PermissionHelper {
     */
    public boolean hasPermission(int uid) {
        assertFlag();
        final long callingId = Binder.clearCallingIdentity();
        try {
            return mPmi.checkUidPermission(uid, NOTIFICATION_PERMISSION) == PERMISSION_GRANTED;
        } finally {
            Binder.restoreCallingIdentity(callingId);
        }
    }

    /**
@@ -185,6 +191,8 @@ public final class PermissionHelper {

    public boolean isPermissionFixed(String packageName, @UserIdInt int userId) {
        assertFlag();
        final long callingId = Binder.clearCallingIdentity();
        try {
            try {
                int flags = mPermManager.getPermissionFlags(packageName, NOTIFICATION_PERMISSION,
                        userId);
@@ -194,10 +202,15 @@ public final class PermissionHelper {
                Slog.e(TAG, "Could not reach system server", e);
            }
            return false;
        } finally {
            Binder.restoreCallingIdentity(callingId);
        }
    }

    boolean isPermissionUserSet(String packageName, @UserIdInt int userId) {
        assertFlag();
        final long callingId = Binder.clearCallingIdentity();
        try {
            try {
                int flags = mPermManager.getPermissionFlags(packageName, NOTIFICATION_PERMISSION,
                        userId);
@@ -206,6 +219,9 @@ public final class PermissionHelper {
                Slog.e(TAG, "Could not reach system server", e);
            }
            return false;
        } finally {
            Binder.restoreCallingIdentity(callingId);
        }
    }

    private void assertFlag() {