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

Commit d11fd6cc authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "Clear binder identity before querying package information" into rvc-dev am: 126d6831

Change-Id: I4ff9e1acc543ef2a1e1282c4eda77cef3c216366
parents 283ae601 126d6831
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() {