summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ivan Chiang <chiangi@google.com> 2024-12-24 08:22:39 +0000
committer Ivan Chiang <chiangi@google.com> 2024-12-26 20:14:33 -0800
commitae9355687494e8f21da30dccabeb82d3b00d0712 (patch)
tree8cd43f691410f7dfd3ef59301095bbcc1597a3ab
parent39e7bb09fcd4d0c1efa49cf4476fc3254ec53750 (diff)
RESTRICT AUTOMERGE [PM] Fix the profile issue in UninstallerActivity
Only the parent profile can uninstall the app that is in the child profiles. Flag: EXEMPT security bug fix Bug: 333681693 Test: atest CtsPackageInstallerCUJMultiUsersTestCases (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:585d5d6835dd2ddd65316fbbabd714c140da20fa) Merged-In: Id4eb5484563fdec530d5fc89a2c5973c351fdab8 Change-Id: Id4eb5484563fdec530d5fc89a2c5973c351fdab8
-rw-r--r--[-rwxr-xr-x]packages/PackageInstaller/src/com/android/packageinstaller/UninstallerActivity.java20
1 files changed, 11 insertions, 9 deletions
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/UninstallerActivity.java b/packages/PackageInstaller/src/com/android/packageinstaller/UninstallerActivity.java
index 0198168f9fda..f487bfbd28c7 100755..100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/UninstallerActivity.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/UninstallerActivity.java
@@ -51,6 +51,7 @@ import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
+import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
@@ -63,8 +64,6 @@ import com.android.packageinstaller.television.ErrorFragment;
import com.android.packageinstaller.television.UninstallAlertFragment;
import com.android.packageinstaller.television.UninstallAppProgress;
-import java.util.List;
-
/*
* This activity presents UI to uninstall an application. Usually launched with intent
* Intent.ACTION_UNINSTALL_PKG_COMMAND and attribute
@@ -172,13 +171,16 @@ public class UninstallerActivity extends Activity {
if (mDialogInfo.user == null) {
mDialogInfo.user = android.os.Process.myUserHandle();
} else {
- UserManager userManager = (UserManager) getSystemService(Context.USER_SERVICE);
- List<UserHandle> profiles = userManager.getUserProfiles();
- if (!profiles.contains(mDialogInfo.user)) {
- Log.e(TAG, "User " + android.os.Process.myUserHandle() + " can't request uninstall "
- + "for user " + mDialogInfo.user);
- showUserIsNotAllowed();
- return;
+ if (!mDialogInfo.user.equals(Process.myUserHandle())) {
+ UserManager userManager = getBaseContext().getSystemService(UserManager.class);
+ final boolean isCurrentUserProfileOwner = Process.myUserHandle().equals(
+ userManager.getProfileParent(mDialogInfo.user));
+ if (!isCurrentUserProfileOwner) {
+ Log.e(TAG, "User " + Process.myUserHandle() + " can't request uninstall "
+ + "for user " + mDialogInfo.user);
+ showUserIsNotAllowed();
+ return;
+ }
}
}