Remove legacy WRITE_EXTERNAL_STORAGE permission check for Installers

Bug: 239495492
Test: atest ScopedStorageHostTest#testCheckInstallerAppAccessToObbDirs
Change-Id: Id96c854c0b31e94d367dccd125ad5c14523cdc79
Merged-In: Id96c854c0b31e94d367dccd125ad5c14523cdc79
(cherry picked from commit 33e2c5008b)
This commit is contained in:
Abhijeet Kaur
2022-08-16 15:22:22 +01:00
parent 7ae652e507
commit 778f33af54

View File

@@ -19,12 +19,10 @@ package com.android.server;
import static android.Manifest.permission.ACCESS_MTP; import static android.Manifest.permission.ACCESS_MTP;
import static android.Manifest.permission.INSTALL_PACKAGES; import static android.Manifest.permission.INSTALL_PACKAGES;
import static android.Manifest.permission.MANAGE_EXTERNAL_STORAGE; import static android.Manifest.permission.MANAGE_EXTERNAL_STORAGE;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
import static android.app.AppOpsManager.MODE_ALLOWED; import static android.app.AppOpsManager.MODE_ALLOWED;
import static android.app.AppOpsManager.OP_LEGACY_STORAGE; import static android.app.AppOpsManager.OP_LEGACY_STORAGE;
import static android.app.AppOpsManager.OP_MANAGE_EXTERNAL_STORAGE; import static android.app.AppOpsManager.OP_MANAGE_EXTERNAL_STORAGE;
import static android.app.AppOpsManager.OP_REQUEST_INSTALL_PACKAGES; import static android.app.AppOpsManager.OP_REQUEST_INSTALL_PACKAGES;
import static android.app.AppOpsManager.OP_WRITE_EXTERNAL_STORAGE;
import static android.app.PendingIntent.FLAG_CANCEL_CURRENT; import static android.app.PendingIntent.FLAG_CANCEL_CURRENT;
import static android.app.PendingIntent.FLAG_IMMUTABLE; import static android.app.PendingIntent.FLAG_IMMUTABLE;
import static android.app.PendingIntent.FLAG_ONE_SHOT; import static android.app.PendingIntent.FLAG_ONE_SHOT;
@@ -4526,11 +4524,7 @@ class StorageManagerService extends IStorageManager.Stub
} }
} }
// Determine if caller is holding runtime permission // We're only willing to give out installer access if they hold
final boolean hasWrite = StorageManager.checkPermissionAndCheckOp(mContext, false, 0,
uid, packageName, WRITE_EXTERNAL_STORAGE, OP_WRITE_EXTERNAL_STORAGE);
// We're only willing to give out installer access if they also hold
// runtime permission; this is a firm CDD requirement // runtime permission; this is a firm CDD requirement
final boolean hasInstall = mIPackageManager.checkUidPermission(INSTALL_PACKAGES, final boolean hasInstall = mIPackageManager.checkUidPermission(INSTALL_PACKAGES,
uid) == PERMISSION_GRANTED; uid) == PERMISSION_GRANTED;
@@ -4546,7 +4540,7 @@ class StorageManagerService extends IStorageManager.Stub
break; break;
} }
} }
if ((hasInstall || hasInstallOp) && hasWrite) { if (hasInstall || hasInstallOp) {
return StorageManager.MOUNT_MODE_EXTERNAL_INSTALLER; return StorageManager.MOUNT_MODE_EXTERNAL_INSTALLER;
} }
return StorageManager.MOUNT_MODE_EXTERNAL_DEFAULT; return StorageManager.MOUNT_MODE_EXTERNAL_DEFAULT;