Merge "New sm command to unmount app data and obb app visibility mount" am: 3299d00b87

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1552534

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: Id39a215dbf34a25177994566fe6f56683210fded
This commit is contained in:
Treehugger Robot
2021-01-18 16:40:32 +00:00
committed by Automerger Merge Worker
3 changed files with 33 additions and 1 deletions

View File

@@ -107,6 +107,8 @@ public final class Sm {
runStartCheckpoint(); runStartCheckpoint();
} else if ("supports-checkpoint".equals(op)) { } else if ("supports-checkpoint".equals(op)) {
runSupportsCheckpoint(); runSupportsCheckpoint();
} else if ("unmount-app-data-dirs".equals(op)) {
runDisableAppDataIsolation();
} else { } else {
throw new IllegalArgumentException(); throw new IllegalArgumentException();
} }
@@ -253,6 +255,13 @@ public final class Sm {
System.out.println(result.get()); 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 { public void runForget() throws RemoteException {
final String fsUuid = nextArg(); final String fsUuid = nextArg();
if ("all".equals(fsUuid)) { if ("all".equals(fsUuid)) {
@@ -373,6 +382,8 @@ public final class Sm {
System.err.println(""); System.err.println("");
System.err.println(" sm supports-checkpoint"); System.err.println(" sm supports-checkpoint");
System.err.println(""); System.err.println("");
System.err.println(" sm unmount-app-data-dirs PACKAGE_NAME PID USER_ID");
System.err.println("");
return 1; return 1;
} }
} }

View File

@@ -195,4 +195,5 @@ interface IStorageManager {
void abortChanges(in String message, boolean retry) = 87; void abortChanges(in String message, boolean retry) = 87;
void clearUserKeyAuth(int userId, int serialNumber, in byte[] token, in byte[] secret) = 88; void clearUserKeyAuth(int userId, int serialNumber, in byte[] token, in byte[] secret) = 88;
void fixupAppDir(in String path) = 89; void fixupAppDir(in String path) = 89;
void disableAppDataIsolation(in String pkgName, int pid, int userId) = 90;
} }

View File

@@ -1609,7 +1609,6 @@ class StorageManagerService extends IStorageManager.Stub
} }
} }
private void onVolumeStateChangedAsync(VolumeInfo vol, int oldState, int newState) { private void onVolumeStateChangedAsync(VolumeInfo vol, int oldState, int newState) {
synchronized (mLock) { synchronized (mLock) {
// Remember that we saw this volume so we're ready to accept user // Remember that we saw this volume so we're ready to accept user
@@ -3430,6 +3429,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 */ /** Not thread safe */
class AppFuseMountScope extends AppFuseBridge.MountScope { class AppFuseMountScope extends AppFuseBridge.MountScope {
private boolean mMounted = false; private boolean mMounted = false;