diff options
| author | 2021-12-29 21:56:58 +0000 | |
|---|---|---|
| committer | 2022-01-04 23:51:59 +0000 | |
| commit | 72f47a3f9a558e18e62147931be3b205cd2f9edf (patch) | |
| tree | 9aa21646e9634ee5d63c5492ce328d9ed357f865 | |
| parent | a8bc22f0391d0f6d42c8263064f427104f22ee74 (diff) | |
Don't bind mount app storage for app with NO_APP_DATA_STORAGE
Such apps don't have any internal storage in the first place, hence
there is no need in hiding it via bind mount.
Bug: 211761016
Test: add NO_APP_DATA_STORAGE property to supplemental process
Test: checked that supplemental process can be started
Test: atest PackageManagerShellTest
Test: atest android.appsecurity.cts.StorageHostTest#testNoInternalAppStorage
Change-Id: I857607e6c1fdd670d1456566bd8cce02793edcb2
| -rw-r--r-- | services/core/java/com/android/server/am/ProcessList.java | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java index 2def50efee60..1ad0bcea711c 100644 --- a/services/core/java/com/android/server/am/ProcessList.java +++ b/services/core/java/com/android/server/am/ProcessList.java @@ -135,6 +135,7 @@ import com.android.server.Watchdog; import com.android.server.am.ActivityManagerService.ProcessChangeItem; import com.android.server.compat.PlatformCompat; import com.android.server.pm.dex.DexManager; +import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.pkg.PackageStateInternal; import com.android.server.wm.ActivityServiceConnectionsHolder; import com.android.server.wm.WindowManagerService; @@ -2379,6 +2380,8 @@ public final class ProcessList { final String[] targetPackagesList = sharedPackages.length == 0 ? new String[]{app.info.packageName} : sharedPackages; + final boolean hasAppStorage = hasAppStorage(pmInt, app.info.packageName); + pkgDataInfoMap = getPackageAppDataInfoMap(pmInt, targetPackagesList, uid); if (pkgDataInfoMap == null) { // TODO(b/152760674): Handle inode == 0 case properly, now we just give it a @@ -2401,6 +2404,12 @@ public final class ProcessList { bindMountAppsData = false; } + if (!hasAppStorage) { + bindMountAppsData = false; + pkgDataInfoMap = null; + allowlistedAppDataInfoMap = null; + } + int userId = UserHandle.getUserId(uid); StorageManagerInternal storageManagerInternal = LocalServices.getService( StorageManagerInternal.class); @@ -2488,6 +2497,17 @@ public final class ProcessList { } } + private boolean hasAppStorage(PackageManagerInternal pmInt, String packageName) { + final AndroidPackage pkg = pmInt.getPackage(packageName); + if (pkg == null) { + Slog.w(TAG, "Unknown package " + packageName); + return false; + } + final PackageManager.Property noAppStorageProp = + pkg.getProperties().get(PackageManager.PROPERTY_NO_APP_DATA_STORAGE); + return noAppStorageProp == null || !noAppStorageProp.getBoolean(); + } + @GuardedBy("mService") void startProcessLocked(ProcessRecord app, HostingRecord hostingRecord, int zygotePolicyFlags) { startProcessLocked(app, hostingRecord, zygotePolicyFlags, null /* abiOverride */); |