Merge "New sm command to unmount app data and obb app visibility mount"
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user