81 Commits

Author SHA1 Message Date
Kenny Root
480afe70fa Eliminate MCS_GIVE_UP state
It's basically a duplicate of MCS_UNBIND state, so just get rid of it
which simplifies the state transitions.

Bug: 3067076
Change-Id: I34111be88dd727af8ad59c9f49debd54ede827ea
2010-10-07 10:53:01 -07:00
Kenny Root
0145e36cad Revert "Only allow 8 OBBs to be mounted by a UID"
This reverts commit 27358a69b33eaa268ee75ef778ec824c8085adcc.

Conflicts:

	services/java/com/android/server/MountService.java

Change-Id: Ia14be97b4f22e95daba0d191cfc62adf3d1469cd
2010-10-07 10:14:09 -07:00
Kenny Root
5919ac6b41 OBB: track binder death observers
An incorrect assumption about how death observers were tracked lead to
an IllegalArgumentException in some cases. Make sure the linking and
unlinking of the Binder to its ObbState death observer is symmetric to
avoid this problem.

Bug: 3062360
Change-Id: Idd016db12551c80cd74d00f11cf6569bd3b4ce21
2010-10-06 17:00:00 -07:00
Kenny Root
17eb6fb07c Add MountService tests and fix a bug it found
Add some MountService tests that are based partially on some stuff done
in PackageManagerTests. This allows us to test the OBB changes in an
easy way.

Also, it found some bugs in the DefaultContainerService connection state
machine, so fix those while we're at it.

Change-Id: I18f38593be754eb32fb6e842f88eec47e2beefce
2010-10-06 15:39:28 -07:00
Kenny Root
12ffd9bf4c Add "none" for vold and deprecate mkobb -c
If vold isn't told "none" for the key, it will try to mount it as an
encrypted container.

Also remove the -c option from mkobb since it can be triggered by
including a key as well.

Change-Id: I40a8ff3f778bfda682312630e6687ecc14b51844
2010-10-01 14:02:47 -07:00
Kenny Root
2942391801 Fix regression in OBB key handling
Change-Id: If583cbdb8be68ffed094a5fde7ee00e1914c5841
2010-10-01 08:38:56 -07:00
Kenny Root
4da02392a1 Being already unmounted is not a failure
Change-Id: I5943096444e3d4d4cc5fd63f64a09c32f649a227
2010-09-30 17:59:42 -07:00
Kenny Root
735de3b38a Hash keys with MD5; track IBinders not IInterface
Using a plaintext password doesn't work unless it's a certain length, so
just hash the plaintext password with MD5 to make it the right length
for the twofish encryption.

Tracking the IInterface doesn't make much sense since it's different
each time, so track the IBinder instead. That way we can unlinkToDeath
the binder when the last thing it's holding onto goes away.

Change-Id: Id828d25b4d74f27e9d8b4bfb3909c964469cc473
2010-09-30 17:25:05 -07:00
Kenny Root
27358a69b3 Only allow 8 OBBs to be mounted by a UID
Change-Id: I4f017c5408af903c6c9ba007a2cf7f488a7fcd27
2010-09-30 17:24:53 -07:00
Kenny Root
38cf8867a8 Remove OBBs from state list when volume unmounted
Don't keep tracking OBBs when the volume they're located on goes away.
Remove them from our state tracking maps and then send a notification to
any listener that is still around.

Add a dump handler to MountService so the state of the mount lists
can be inspected.

Change the API to just make a callback directly to the change listener
when mount is called when it's already mounted or unmount called when
it's already unmounted.

Change-Id: Idb4afbb943ca5ca775825f908bff334e3ce1cfcc
2010-09-30 17:24:34 -07:00
Kenny Root
f1121dc1d3 Move all the permissions check up for unmount
We have already scanned the state of the OBB in mountObb, so check the
caller against the stored state in the unmountObb call. This allows us
to ensure the calling binder is the same one that mounted it since we
tie the lifecycle of the OBB to the lifecycle of the binder.

Change-Id: I45d9cfbab5d3f5b37a6a9b594b10bd8b91cccc45
2010-09-29 07:38:55 -07:00
Kenny Root
05105f7abe Update OBB API to include callbacks
Add a callback for users of the StorageManager API to be able to receive
notifications when the requested operation completes for mountObb and
unmountObb.

Add NDK API to get to ObbInfo like the Java API has.

Also update the docs for the API and remove the "STOPSHIP" comments.

Change-Id: I23a4409c7f8b74d3169614beba920b4d667990a4
2010-09-28 17:23:26 -07:00
Kenny Root
aa48540222 Free AssetManager weak refs before unmounting
AssetManagers are kept in WeakReference pools so there's a change
another thread in the system_server has opened a file on the external
card. Attempt to force a garbage collection to free these references
each time we're about to unmount a volume on the external storage.

Change-Id: I6e816e8c67b179887e488dc6758b43bcdd5914fb
2010-09-14 14:49:41 -07:00
Kenny Root
305bcbf0c9 Decrease PackageManagerService wait time for vold
Up the blocking queue maximum to twice the number of containers we
allow which should let "asec list" complete without blocking the thread
several times.

Change the threads for the NativeDaemonConnector to vold and netd to be
more descriptive instead of the same name.

Bug: 2501075
Change-Id: I7e7949845a6c70a3d619aec0fa79ceef3c17a4be
2010-09-03 09:33:34 -07:00
Kenny Root
a02b8b05dd Move OBB file reading to DefaultContainerService
The system_server shouldn't touch files on the SD card. This change
moves the things that touch the SD card out to the
DefaultContainerService so that it will get killed if the SD card goes
away instead of the system_server.

Change-Id: I0aefa085be4b194768527195532ee6dddc801cfc
2010-08-11 11:20:53 -07:00
Kenny Root
02c8730c1b Add API to call to vold for mounting OBBs
* Unhide StorageService class; hide all the USB-related items

* Add application-visible API to StorageManager for OBB files

* Add class for parceling OBB info across binders (ObbInfo)

* Add a JNI glue class to libutils/ObbFile (ObbScanner)

* Add API to MountService to deal with calling into vold and checking
  permissions

Change-Id: I33ecf9606b8ff535f3a2ada83931da6bbef41cfd
2010-07-15 21:31:58 -07:00
Kenny Root
85fb20665f Amend previous ndc commit
Submitted wrong patchset. This includes the delta for the latest
patchset.

Change-Id: I30f8fa1503cda2459ec7284eb9fa199c9fd5ef9b
2010-06-01 20:50:21 -07:00
Kenny Root
a80ce06d4c Add more error checking for ndc
In NativeDaemonConnector.doCommand() calls, there was inconsistent error
checking. This change adds error checking for every call and makes it so
that any call to .doCommand() that gets an error code won't cause the
code to hang forever.

Change-Id: I4584953a759a48ad16adfe8ee9e564b5f5796680
2010-06-01 13:29:04 -07:00
Suchi Amalapurapu
7af074a612 Forcibly unmount the sdcard after N retries.
Don't rely on the ActivityManager's reported status about killing the
storage user process since the process might have gone away in between.

Change-Id: Ia7fa43eb34553329e7ff611ab6b99375b5ae673a
2010-04-06 10:02:34 -07:00
San Mehat
a507859797 MountService: Switch all Log -> Slog
Change-Id: Id33c76497e9d963f295ef6e99d850223ca59b6cd
Signed-off-by: San Mehat <san@google.com>
2010-03-25 10:03:39 -07:00
San Mehat
2d66cef77e Asec: Add new 'StorageNotFound' response code handling for container paths
Change-Id: I45d113f77b9f0e519087356b70fc6c4b5c290935
Signed-off-by: San Mehat <san@google.com>
2010-03-23 11:14:36 -07:00
Kenny Root
f030462c83 Make trying to remount an asec container non-fatal
If an asec container is already mounted for some reason, start tracking
it in the MountService's internal state and tell the caller we had
success mounting the secure container.

Change-Id: I5bb0f84b2bafc0cd2dba248c35a8d68fd53ef1b2
2010-03-22 13:08:52 -07:00
Suchi Amalapurapu
e99bb5f10b Add new method call back in MountService.
PackageManager invokes this call back when its done handling
the media status update.
Add new uid check for updateExternalMediaStatus
Change killPids method in ActivityManager.
Remove mountsd command in Pm.java We cannot arbitrarily enable/disable
packages in PackageManager now.

Change-Id: I28dcba4afd2b4486f68abdaa1628a31b66544c91
2010-03-22 10:49:49 -07:00
San Mehat
6a25440323 MountService: Handle volumes shared on startup
Change-Id: I7c38607adee7c89f27c24285a7ace2b9c87e7f30
Signed-off-by: San Mehat <san@google.com>
2010-03-22 10:21:00 -07:00
Suchi Amalapurapu
8a9ab24a5c Do storage checks before initiating a move.
Add new remote method to check for insufficient error conditions.
Some fixes in MountService when updating media status on PackageManagerService
Fix size calculation condition in installd.

Add new error code if media is unavailable.
New tests for testing error codes.
Some additional debugging statements in MountService.

Change-Id: Ibfe90d5ed6c71d57f9c1c67806f38b5ae9ecdfbf
2010-03-16 16:36:26 -07:00
Daniel Sandler
5f27ef4968 Move MountService's Handler to a different thread.
This should help avoid blocking the system UI during storage
operations.

Change-Id: Ic53cb370baf47e8b00476706ac8df45645a2d814
2010-03-16 15:44:38 -04:00
San Mehat
2fe718a87b MountService: If USB cable is unplugged while UMS is active, clean up and remount
Change-Id: I9c20e7bfc215549cd8a6e14625e5d005bb53f8fa
Signed-off-by: San Mehat <san@google.com>
2010-03-11 12:01:49 -08:00
Suchi Amalapurapu
6ffce2e9a3 Add new shutdown observer for MountService.
Use new observer before rebooting and shutting down.
Add some unit tests for unmount and shutdown code paths
Fix registering/unregistering part in MountService
Use ShutdownThread in PowerManager.reboot()
Add reboot support to ShutdownThread.
Remove MountService code from PowerManagerService.java and Power.java.
Clean shutdown/reboot is handled exclusively by ShutdownThread now.

Change-Id: Iefb157451d3d9c426cb431707b870a873c09123d
2010-03-09 17:00:18 -05:00
Suchi Amalapurapu
9b10ef5fe8 Rework the way PackageManager binds to default container service.
Clean up stale containers when enabling/disabling packages on sdcard.
Check the path of packages which are being enabled.
Make sure gc's are done prior to destroying containers when moving applicati
as well as enabling/disabling packages for sdcard mount status changes.

Some miscellaneous issues
   Remove hack to avoid renaming containers.
   Fix test with forward locked apps
   Remove adding container id to asec list when renaming
   Some cosmetic changes to DefaultContainerService
2010-03-03 14:06:10 -08:00
Mike Lockwood
bf2dd44a6f MountService: Send ACTION_MEDIA_UNSHARED Intent a volume is no longer shared via UMS.
Change-Id: I21c887ae76eccabcc5d8449aa0a38e98758e8958
Signed-off-by: Mike Lockwood <lockwood@android.com>
2010-03-03 06:16:52 -05:00
Suchi Amalapurapu
0eec21d97d Add dialog to display storage users when enabling/disabling ums
Some error dialogs and related strings
MountService changes to follow unmount path when enabling ums.

Please note that MountService api setUmsEnabled does not return
error codes for now. This is a known limitation.
2010-02-26 12:48:21 -08:00
Suchi Amalapurapu
c42e29e0a5 Add new handler mechanism in MountService to make unmount api asynchronous.
MountService updates state on PackageManager and then tries to
kill processes holding file references to media about to be unmounted by
invoking api on ACtivityManager. This is retried upto 4 times to make sure all
processes holding file references are killed before unmounting the media
at specified path.

Also changed PackageManger api to return boolean value to indicate if
MountService is likely to receive broadcasts related to apps on sd.
2010-02-24 20:30:03 -08:00
San Mehat
6a965af2d7 MountService: Send UMS_CONNECTED broadcast on boot if UMS connected.
UMS detection is now done wayyyy before the system is booted, so set a flag
to send our intent broadcast once we've booted.

Signed-off-by: San Mehat <san@google.com>
2010-02-24 18:14:18 -08:00
San Mehat
85451ee15f MountService: Fix bug which would allow apps to try to rename a container whos dst is mounted
Signed-off-by: San Mehat <san@google.com>
2010-02-24 08:54:18 -08:00
San Mehat
3d4881067a MountService: Force unmount when enabling ums
Signed-off-by: San Mehat <san@google.com>
2010-02-22 13:08:44 -08:00
San Mehat
fafb041b47 MountService: Move boot-time mount to a thread - avoids ANR at boot
Signed-off-by: San Mehat <san@google.com>
2010-02-19 06:51:58 -08:00
Marco Nelissen
c34ebce475 Make MountService work in the simulator. 2010-02-18 13:59:05 -08:00
San Mehat
d970998b0d framework: storage: Add 'force' option to unmount/destroy storage apis, and update callsites.
Also adds additional storage unit tests

Signed-off-by: San Mehat <san@google.com>
2010-02-18 11:48:48 -08:00
San Mehat
c1b4ce93be MountService: Add API call for getting a list of pids currently using the specified mountpoint
Signed-off-by: San Mehat <san@google.com>
2010-02-16 17:13:03 -08:00
San Mehat
a181b21305 MountService: Fix some mountset bugs and tighten up some return values
Signed-off-by: San Mehat <san@google.com>
2010-02-11 06:50:31 -08:00
San Mehat
6cdd9c0856 MountService: Add isSecureContainerMounted() API call
Signed-off-by: San Mehat <san@google.com>
2010-02-09 18:46:05 -08:00
San Mehat
59443a673a MountService: Check for failure to unmount when enabling UMS and fix reversed logic
Signed-off-by: San Mehat <san@google.com>
2010-02-09 13:28:45 -08:00
San Mehat
b104340496 Framework: Clean up / Refactor Mount APIs
- Move android.storage.* -> android.os.storage.* and refactor users
 - Refactor generic shares back to explicit ums enable/disable/isEnabled
 - Remove media insert/removed event callbacks (not ready for Froyo)
 - Remove 'label' from volume state change callbacks
 - Add public API functions for enabling/disabling USB mass storage (permissions enforced
   in MountSevice)
 - Remove some stray un-needed import lines
 - Move android.os.IMountService / android.os.IMountServiceListener -> android.os.storage
 - Improve code comments

Updated:
  MountService: Add dup state check and move debugging behind a conditional
  UsbStorageActivity: Fix review comments + a TODO
  StorageNotification: Add @Override tags
  StorageManager: Don't use a static Listener list
  MountService: Reduce bloat and fix == where I meant .equals()
  PackageManagerTests: Update for new API

Signed-off-by: San Mehat <san@google.com>
2010-02-09 11:03:16 -08:00
San Mehat
207e538350 MountService: Harden for pre-boot usage users
- Connection to native daemon now happens on creation instead of ON_BOOT
- Don't emit share change broadcasts before system is booted
- Protect against public API usage before we're ready

Signed-off-by: San Mehat <san@google.com>
2010-02-08 19:29:58 -08:00
San Mehat
f919cd02df MountService: Add WARN checks to ASEC calls to catch bad users
Signed-off-by: San Mehat <san@google.com>
2010-02-08 19:29:58 -08:00
Suchi Amalapurapu
b56ae20b22 Rename media resource broadcasts
Add checks for fwdlocked and updated system apps
add more tests
remove duplicate adds
2010-02-08 14:52:25 -08:00
San Mehat
4270e1ea74 MountService: Massive bloat reduction and rewrite
- Most API calls now return an int as a result code (see MountServiceResultCode.java)
- All notification code has been removed
- All settings code has been removed
- Removed UMS centric API calls in favor of more generic 'shares'
- Mount error reporting is no longer done via an event, but is done as part of the
  actual mount process
- Rework vold IPC commands to be more sane

Updated:
    MountService: Rename MountServiceObserver -> MountServiceListener
    MountService: Add support for Async callbacks

Updated:
    MountService: Add BinderDeath handling

Updated:
    MountService: Remove notifys since we dont listen anyways

Updated:
    MountService: Fix bad cast

Signed-off-by: San Mehat <san@google.com>
2010-02-02 11:17:46 -08:00
Daniel Sandler
d425a45f8d Fix build.
(Broken in change Ib94f795c.)
2010-01-29 10:09:04 -05:00
Daniel Sandler
b94f795c25 New full-screen activity for USB mass storage interaction.
Still TODO: patch into forthcoming callbacks from
MountService so the USB storage activity always shows the
correct state of the device. (Right now it only refreshes
its display onResume.)

Bug: 2299129
2010-01-28 16:18:22 -05:00
Suchi Amalapurapu
40b5110e74 Remove destroy asec command when mounting secure container 2010-01-27 23:46:13 -08:00