diff options
-rw-r--r-- | core/java/android/os/storage/IStorageManager.aidl | 1 | ||||
-rw-r--r-- | services/core/java/com/android/server/StorageManagerService.java | 13 |
2 files changed, 14 insertions, 0 deletions
diff --git a/core/java/android/os/storage/IStorageManager.aidl b/core/java/android/os/storage/IStorageManager.aidl index b5b72c7109f7..9db41116d20a 100644 --- a/core/java/android/os/storage/IStorageManager.aidl +++ b/core/java/android/os/storage/IStorageManager.aidl @@ -194,4 +194,5 @@ interface IStorageManager { boolean supportsCheckpoint() = 84; void startCheckpoint(int numTries) = 85; boolean needsCheckpoint() = 86; + void abortChanges(in String message, boolean retry) = 87; } diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java index 8f21813c6b4c..ef1c8aa2c678 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -2894,6 +2894,19 @@ class StorageManagerService extends IStorageManager.Stub return mVold.needsCheckpoint(); } + /** + * Abort the current set of changes and either try again, or abort entirely + */ + @Override + public void abortChanges(String message, boolean retry) throws RemoteException { + // Only the system process is permitted to abort checkpoints + if (Binder.getCallingUid() != android.os.Process.SYSTEM_UID) { + throw new SecurityException("no permission to commit checkpoint changes"); + } + + mVold.abortChanges(message, retry); + } + @Override public String getPassword() throws RemoteException { mContext.enforceCallingOrSelfPermission(Manifest.permission.CRYPT_KEEPER, |