From 85451ee15fdf6cae371dc3005441988c7d426401 Mon Sep 17 00:00:00 2001 From: San Mehat Date: Wed, 24 Feb 2010 08:54:18 -0800 Subject: [PATCH] MountService: Fix bug which would allow apps to try to rename a container whos dst is mounted Signed-off-by: San Mehat --- services/java/com/android/server/MountService.java | 6 +++++- .../AndroidTests/src/com/android/unit_tests/AsecTests.java | 7 +++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java index 39ee31486b260..2dc12f6e53479 100644 --- a/services/java/com/android/server/MountService.java +++ b/services/java/com/android/server/MountService.java @@ -1003,7 +1003,11 @@ class MountService extends IMountService.Stub warnOnNotMounted(); synchronized (mAsecMountSet) { - if (mAsecMountSet.contains(oldId)) { + /* + * Because a mounted container has active internal state which cannot be + * changed while active, we must ensure both ids are not currently mounted. + */ + if (mAsecMountSet.contains(oldId) || mAsecMountSet.contains(newId)) { return StorageResultCode.OperationFailedStorageMounted; } } diff --git a/tests/AndroidTests/src/com/android/unit_tests/AsecTests.java b/tests/AndroidTests/src/com/android/unit_tests/AsecTests.java index 3bbb4477b3340..d5d23266d70a3 100755 --- a/tests/AndroidTests/src/com/android/unit_tests/AsecTests.java +++ b/tests/AndroidTests/src/com/android/unit_tests/AsecTests.java @@ -300,7 +300,7 @@ public class AsecTests extends AndroidTestCase { } } - public void testRenameMountedContainer() { + public void testRenameSrcMountedContainer() { try { Assert.assertEquals(StorageResultCode.OperationSucceeded, createContainer("testRenameContainer.1", 4, "none")); @@ -312,11 +312,14 @@ public class AsecTests extends AndroidTestCase { } } - public void testRenameToExistingContainer() { + public void testRenameDstMountedContainer() { try { Assert.assertEquals(StorageResultCode.OperationSucceeded, createContainer("testRenameContainer.1", 4, "none")); + Assert.assertEquals(StorageResultCode.OperationSucceeded, + unmountContainer("testRenameContainer.1", false)); + Assert.assertEquals(StorageResultCode.OperationSucceeded, createContainer("testRenameContainer.2", 4, "none"));