Merge "New sm command to unmount app data and obb app visibility mount"

This commit is contained in:
Treehugger Robot
2021-01-18 16:20:41 +00:00
committed by Gerrit Code Review
3 changed files with 33 additions and 1 deletions

View File

@@ -107,6 +107,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();
}
@@ -253,6 +255,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)) {
@@ -373,6 +382,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;
}
}

View File

@@ -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;
}

View File

@@ -1609,7 +1609,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
@@ -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 */
class AppFuseMountScope extends AppFuseBridge.MountScope {
private boolean mMounted = false;