summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <treehugger-gerrit@google.com> 2021-01-18 18:04:13 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2021-01-18 18:04:13 +0000
commit67187f7575ab590d66991e7d785306ad466e5021 (patch)
treeef8befced1a5d32a31167e84939924a3e066b01d
parentbfcc7e5f4f0a18471f5493c4dcae9d54347474f0 (diff)
parent05af40c490162dad619aa8487934328e7a360faa (diff)
Merge "New sm command to unmount app data and obb app visibility mount" am: 3299d00b87 am: 40c7e3d17d am: 05af40c490
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1552534 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: Ie35b99efa56faaf4339a7c344743092a5b5d540b
-rw-r--r--cmds/sm/src/com/android/commands/sm/Sm.java11
-rw-r--r--core/java/android/os/storage/IStorageManager.aidl1
-rw-r--r--services/core/java/com/android/server/StorageManagerService.java22
3 files changed, 33 insertions, 1 deletions
diff --git a/cmds/sm/src/com/android/commands/sm/Sm.java b/cmds/sm/src/com/android/commands/sm/Sm.java
index ef1e413a3112..9088db8c66a1 100644
--- a/cmds/sm/src/com/android/commands/sm/Sm.java
+++ b/cmds/sm/src/com/android/commands/sm/Sm.java
@@ -105,6 +105,8 @@ public final class Sm {
runStartCheckpoint();
} else if ("supports-checkpoint".equals(op)) {
runSupportsCheckpoint();
+ } else if ("unmount-app-data-dirs".equals(op)) {
+ runDisableAppDataIsolation();
} else {
throw new IllegalArgumentException();
}
@@ -251,6 +253,13 @@ public final class Sm {
System.out.println(result.get());
}
+ public void runDisableAppDataIsolation() throws RemoteException {
+ final String pkgName = nextArg();
+ final int pid = Integer.parseInt(nextArg());
+ final int userId = Integer.parseInt(nextArg());
+ mSm.disableAppDataIsolation(pkgName, pid, userId);
+ }
+
public void runForget() throws RemoteException {
final String fsUuid = nextArg();
if ("all".equals(fsUuid)) {
@@ -347,6 +356,8 @@ public final class Sm {
System.err.println("");
System.err.println(" sm supports-checkpoint");
System.err.println("");
+ System.err.println(" sm unmount-app-data-dirs PACKAGE_NAME PID USER_ID");
+ System.err.println("");
return 1;
}
}
diff --git a/core/java/android/os/storage/IStorageManager.aidl b/core/java/android/os/storage/IStorageManager.aidl
index 99bdfd1fc103..4669b208b163 100644
--- a/core/java/android/os/storage/IStorageManager.aidl
+++ b/core/java/android/os/storage/IStorageManager.aidl
@@ -195,4 +195,5 @@ interface IStorageManager {
void abortChanges(in String message, boolean retry) = 87;
void clearUserKeyAuth(int userId, int serialNumber, in byte[] token, in byte[] secret) = 88;
void fixupAppDir(in String path) = 89;
+ void disableAppDataIsolation(in String pkgName, int pid, int userId) = 90;
}
diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java
index d21182bb91be..cd6a9fb447c9 100644
--- a/services/core/java/com/android/server/StorageManagerService.java
+++ b/services/core/java/com/android/server/StorageManagerService.java
@@ -1526,7 +1526,6 @@ class StorageManagerService extends IStorageManager.Stub
}
}
-
private void onVolumeStateChangedAsync(VolumeInfo vol, int oldState, int newState) {
synchronized (mLock) {
// Remember that we saw this volume so we're ready to accept user
@@ -3275,6 +3274,27 @@ class StorageManagerService extends IStorageManager.Stub
}
}
+ /*
+ * Disable storage's app data isolation for testing.
+ */
+ @Override
+ public void disableAppDataIsolation(String pkgName, int pid, int userId) {
+ final int callingUid = Binder.getCallingUid();
+ if (callingUid != Process.ROOT_UID && callingUid != Process.SHELL_UID) {
+ throw new SecurityException("no permission to enable app visibility");
+ }
+ final String[] sharedPackages =
+ mPmInternal.getSharedUserPackagesForPackage(pkgName, userId);
+ final int uid = mPmInternal.getPackageUid(pkgName, 0, userId);
+ final String[] packages =
+ sharedPackages.length != 0 ? sharedPackages : new String[]{pkgName};
+ try {
+ mVold.unmountAppStorageDirs(uid, pid, packages);
+ } catch (RemoteException e) {
+ throw e.rethrowAsRuntimeException();
+ }
+ }
+
/** Not thread safe */
class AppFuseMountScope extends AppFuseBridge.MountScope {
private boolean mMounted = false;