diff --git a/core/java/android/os/IMountService.aidl b/core/java/android/os/IMountService.aidl index e73569adc97ee..c0c2d036bb7db 100644 --- a/core/java/android/os/IMountService.aidl +++ b/core/java/android/os/IMountService.aidl @@ -93,6 +93,11 @@ interface IMountService */ String mountSecureContainer(String id, String key, int ownerUid); + /* + * Unount a secure container. + */ + void unmountSecureContainer(String id); + /* * Returns the filesystem path of a mounted secure container. */ diff --git a/media/sdutils/sdutil.cpp b/media/sdutils/sdutil.cpp index a30e59c037b35..322f743a36977 100644 --- a/media/sdutils/sdutil.cpp +++ b/media/sdutils/sdutil.cpp @@ -129,6 +129,11 @@ static int asec_mount(const char *id, const char *key, int ownerUid) { return 0; } +static void asec_unmount(const char *id) { + String16 sId(id); + gMountService->unmountSecureContainer(sId); +} + static int asec_path(const char *id) { String16 sId(id); gMountService->getSecureContainerPath(sId); @@ -208,6 +213,9 @@ int main(int argc, char **argv) return android::asec_destroy(id); } else if (!strcmp(argument, "mount")) { return android::asec_mount(id, argv[4], atoi(argv[5])); + } else if (!strcmp(argument, "unmount")) { + android::asec_unmount(id); + return 0; } else if (!strcmp(argument, "path")) { return android::asec_path(id); } @@ -224,6 +232,7 @@ usage: " sdutil asec finalize \n" " sdutil asec destroy \n" " sdutil asec mount \n" + " sdutil asec unmount \n" " sdutil asec path \n" ); return -1; diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java index d54c4d904f9d3..f8f8742bb5cfa 100644 --- a/services/java/com/android/server/MountService.java +++ b/services/java/com/android/server/MountService.java @@ -1057,6 +1057,11 @@ class MountService extends IMountService.Stub return getSecureContainerPath(id); } + public void unmountSecureContainer(String id) throws IllegalStateException { + String cmd = String.format("unmount_asec %s ", id); + mConnector.doCommand(cmd); + } + public String getSecureContainerPath(String id) throws IllegalStateException { ArrayList rsp = mConnector.doCommand("asec_path " + id);