Loading services/core/java/com/android/server/am/ActivityManagerService.java +21 −12 Original line number Original line Diff line number Diff line Loading @@ -3458,30 +3458,39 @@ public class ActivityManagerService extends IActivityManager.Stub final long callingId = Binder.clearCallingIdentity(); final long callingId = Binder.clearCallingIdentity(); try { try { IPackageManager pm = AppGlobals.getPackageManager(); IPackageManager pm = AppGlobals.getPackageManager(); boolean permitted = true; // Instant packages are not protected // Instant packages are not protected if (getPackageManagerInternal().isPackageDataProtected( if (getPackageManagerInternal().isPackageDataProtected( resolvedUserId, packageName)) { resolvedUserId, packageName)) { if (ActivityManager.checkUidPermission(android.Manifest.permission.MANAGE_USERS, uid) == PERMISSION_GRANTED) { // The caller has the MANAGE_USERS permission, tell them what's going on. throw new SecurityException( throw new SecurityException( "Cannot clear data for a protected package: " + packageName); "Cannot clear data for a protected package: " + packageName); } else { permitted = false; // fall through and throw the SecurityException below. } } } ApplicationInfo applicationInfo = null; ApplicationInfo applicationInfo = null; if (permitted) { try { try { applicationInfo = pm.getApplicationInfo(packageName, applicationInfo = pm.getApplicationInfo(packageName, MATCH_UNINSTALLED_PACKAGES, resolvedUserId); MATCH_UNINSTALLED_PACKAGES, resolvedUserId); } catch (RemoteException e) { } catch (RemoteException e) { /* ignore */ /* ignore */ } } appInfo = applicationInfo; permitted = (applicationInfo != null && applicationInfo.uid == uid) // own uid data || (checkComponentPermission(permission.CLEAR_APP_USER_DATA, final boolean clearingOwnUidData = appInfo != null && appInfo.uid == uid; pid, uid, -1, true) == PackageManager.PERMISSION_GRANTED); } if (!clearingOwnUidData && checkComponentPermission(permission.CLEAR_APP_USER_DATA, if (!permitted) { pid, uid, -1, true) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("PID " + pid + " does not have permission " throw new SecurityException("PID " + pid + " does not have permission " + android.Manifest.permission.CLEAR_APP_USER_DATA + " to clear data" + android.Manifest.permission.CLEAR_APP_USER_DATA + " to clear data" + " of package " + packageName); + " of package " + packageName); } } appInfo = applicationInfo; final boolean hasInstantMetadata = getPackageManagerInternal() final boolean hasInstantMetadata = getPackageManagerInternal() .hasInstantApplicationMetadata(packageName, resolvedUserId); .hasInstantApplicationMetadata(packageName, resolvedUserId); Loading Loading
services/core/java/com/android/server/am/ActivityManagerService.java +21 −12 Original line number Original line Diff line number Diff line Loading @@ -3458,30 +3458,39 @@ public class ActivityManagerService extends IActivityManager.Stub final long callingId = Binder.clearCallingIdentity(); final long callingId = Binder.clearCallingIdentity(); try { try { IPackageManager pm = AppGlobals.getPackageManager(); IPackageManager pm = AppGlobals.getPackageManager(); boolean permitted = true; // Instant packages are not protected // Instant packages are not protected if (getPackageManagerInternal().isPackageDataProtected( if (getPackageManagerInternal().isPackageDataProtected( resolvedUserId, packageName)) { resolvedUserId, packageName)) { if (ActivityManager.checkUidPermission(android.Manifest.permission.MANAGE_USERS, uid) == PERMISSION_GRANTED) { // The caller has the MANAGE_USERS permission, tell them what's going on. throw new SecurityException( throw new SecurityException( "Cannot clear data for a protected package: " + packageName); "Cannot clear data for a protected package: " + packageName); } else { permitted = false; // fall through and throw the SecurityException below. } } } ApplicationInfo applicationInfo = null; ApplicationInfo applicationInfo = null; if (permitted) { try { try { applicationInfo = pm.getApplicationInfo(packageName, applicationInfo = pm.getApplicationInfo(packageName, MATCH_UNINSTALLED_PACKAGES, resolvedUserId); MATCH_UNINSTALLED_PACKAGES, resolvedUserId); } catch (RemoteException e) { } catch (RemoteException e) { /* ignore */ /* ignore */ } } appInfo = applicationInfo; permitted = (applicationInfo != null && applicationInfo.uid == uid) // own uid data || (checkComponentPermission(permission.CLEAR_APP_USER_DATA, final boolean clearingOwnUidData = appInfo != null && appInfo.uid == uid; pid, uid, -1, true) == PackageManager.PERMISSION_GRANTED); } if (!clearingOwnUidData && checkComponentPermission(permission.CLEAR_APP_USER_DATA, if (!permitted) { pid, uid, -1, true) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("PID " + pid + " does not have permission " throw new SecurityException("PID " + pid + " does not have permission " + android.Manifest.permission.CLEAR_APP_USER_DATA + " to clear data" + android.Manifest.permission.CLEAR_APP_USER_DATA + " to clear data" + " of package " + packageName); + " of package " + packageName); } } appInfo = applicationInfo; final boolean hasInstantMetadata = getPackageManagerInternal() final boolean hasInstantMetadata = getPackageManagerInternal() .hasInstantApplicationMetadata(packageName, resolvedUserId); .hasInstantApplicationMetadata(packageName, resolvedUserId); Loading