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

Commit 126d6831 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Clear binder identity before querying package information" into rvc-dev

parents ce7c6850 547ef077
Loading
Loading
Loading
Loading
+36 −53
Original line number Diff line number Diff line
@@ -6551,13 +6551,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
                getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
            // Or ensure calling process is delegatePackage itself.
            } else {
                int uid = 0;
                try {
                  uid = mInjector.getPackageManager()
                          .getPackageUidAsUser(delegatePackage, userId);
                } catch(NameNotFoundException e) {
                }
                if (uid != callingUid) {
                if (!isCallingFromPackage(delegatePackage, callingUid)) {
                    throw new SecurityException("Caller with uid " + callingUid + " is not "
                            + delegatePackage);
                }
@@ -6677,15 +6671,8 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
            final List<String> scopes = policy.mDelegationMap.get(callerPackage);
            // Check callingUid only if callerPackage has the required scope delegation.
            if (scopes != null && scopes.contains(scope)) {
                try {
                    // Retrieve the expected UID for callerPackage.
                    final int uid = mInjector.getPackageManager()
                            .getPackageUidAsUser(callerPackage, userId);
                // Return true if the caller is actually callerPackage.
                    return uid == callerUid;
                } catch (NameNotFoundException e) {
                    // Ignore.
                }
                return isCallingFromPackage(callerPackage, callerUid);
            }
            return false;
        }
@@ -8577,15 +8564,9 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
    public void clearDeviceOwner(String packageName) {
        Objects.requireNonNull(packageName, "packageName is null");
        final int callingUid = mInjector.binderGetCallingUid();
        try {
            int uid = mInjector.getPackageManager().getPackageUidAsUser(packageName,
                    UserHandle.getUserId(callingUid));
            if (uid != callingUid) {
        if (!isCallingFromPackage(packageName, callingUid)) {
            throw new SecurityException("Invalid packageName");
        }
        } catch (NameNotFoundException e) {
            throw new SecurityException(e);
        }
        synchronized (getLockObject()) {
            final ComponentName deviceOwnerComponent = mOwners.getDeviceOwnerComponent();
            final int deviceOwnerUserId = mOwners.getDeviceOwnerUserId();
@@ -12299,14 +12280,16 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
                if (ownerPackage == null) {
                    ownerPackage = mOwners.getDeviceOwnerPackageName();
                }
                final String packageName = ownerPackage;
                PackageManager pm = mInjector.getPackageManager();
                PackageInfo packageInfo;
                PackageInfo packageInfo = mInjector.binderWithCleanCallingIdentity(() -> {
                    try {
                    packageInfo = pm.getPackageInfo(ownerPackage, 0);
                        return pm.getPackageInfo(packageName, 0);
                    } catch (NameNotFoundException e) {
                        Log.e(LOG_TAG, "getPackageInfo error", e);
                        return null;
                    }
                });
                if (packageInfo == null) {
                    Log.e(LOG_TAG, "packageInfo is inexplicably null");
                    return null;
@@ -12871,6 +12854,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
    }
    boolean isPackageInstalledForUser(String packageName, int userHandle) {
        return mInjector.binderWithCleanCallingIdentity(() -> {
            try {
                PackageInfo pi = mInjector.getIPackageManager().getPackageInfo(packageName, 0,
                        userHandle);
@@ -12878,6 +12862,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
            } catch (RemoteException re) {
                throw new RuntimeException("Package manager has died", re);
            }
        });
    }
    public boolean isRuntimePermission(String permissionName) throws NameNotFoundException {
@@ -13942,14 +13927,10 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
            }
            mPackagesToRemove.remove(packageUserPair);
        }
        try {
            if (mInjector.getIPackageManager().getPackageInfo(packageName, 0, userId) == null) {
        if (!isPackageInstalledForUser(packageName, userId)) {
            // Package does not exist. Nothing to do.
            return;
        }
        } catch (RemoteException re) {
            Log.e(LOG_TAG, "Failure talking to PackageManager while getting package info");
        }
        try { // force stop the package before uninstalling
            mInjector.getIActivityManager().forceStopPackage(packageName, userId);
@@ -15536,6 +15517,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
    }
    private boolean isCallingFromPackage(String packageName, int callingUid) {
        return mInjector.binderWithCleanCallingIdentity(() -> {
            try {
                final int packageUid = mInjector.getPackageManager().getPackageUidAsUser(
                        packageName, UserHandle.getUserId(callingUid));
@@ -15544,6 +15526,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
                Log.d(LOG_TAG, "Calling package not found", e);
                return false;
            }
        });
    }
    private DevicePolicyConstants loadConstants() {