1. 16 May, 2015 1 commit
  2. 30 Apr, 2015 2 commits
  3. 29 Apr, 2015 3 commits
  4. 25 Apr, 2015 4 commits
  5. 24 Apr, 2015 1 commit
    • Jeff Sharkey's avatar
      Migrate primary external storage. · 1d6fbcc3
      Jeff Sharkey authored
      When requested, kick off a thread that will migrate storage contents
      between two locations.  This is performed in several steps that
      also interact with the framework:
      
      1. Take old and new volumes offline during migration
      2. Wipe new location clean (10% of progress)
      3. Copy files from old to new (60% of progress)
      4. Inform framework that move was successful so it can persist
      5. Wipe old location clean (15% of progress)
      
      Derives a hacky progress estimate by using a rough proxy of free
      disk space changes while a cp/rm is taking place.
      
      Add new internal path for direct access to volumes to bypass any
      FUSE emulation overhead, and send it to framework.  Remove mutex
      around various exec calls since setexeccon() is already per-thread.
      
      Bug: 19993667
      Change-Id: Ibcb4f6fe0126d05b2365f316f53e71dc3e79a2b8
      1d6fbcc3
  6. 21 Apr, 2015 1 commit
    • Jeff Sharkey's avatar
      Wider volume mutation lock, move force adoptable. · c8e04c5a
      Jeff Sharkey authored
      We eventually should move back to per-disk locks, but use a giant
      lock to keep development rolling forward.  Also move force adoptable
      flag to framework since, since encrypted devices don't have persisted
      properties loaded early during boot.
      
      Bug: 19993667
      Change-Id: Ifa3016ef41b038f8f71fc30bc81596cfd21dcd2a
      c8e04c5a
  7. 19 Apr, 2015 2 commits
  8. 18 Apr, 2015 2 commits
    • Jeff Sharkey's avatar
      Switch logging to system log, persistable prop. · 5bad3780
      Jeff Sharkey authored
      Use system log for more durable log history.  Also accept persistable
      version of flag to force adoptability.
      
      Bug: 19993667
      Change-Id: Icdf36799e26038e9a8e2bdaca276d97b22ba3941
      5bad3780
    • Jeff Sharkey's avatar
      Volumes know parent disks; unsupported disks. · f1b996df
      Jeff Sharkey authored
      This is cleaner and more direct than the reverse of having the disk
      publish child volume membership.  Rename state constants to match
      public API.  Add state representing bad removal.  Make it clear that
      volume flags are related to mounting.
      
      Send new unsupported disk event when we finish scanning an entire
      disk and have no meaningful volumes.
      
      Bug: 19993667
      Change-Id: I08a91452ff561171a484d1da5745293ec893aec0
      f1b996df
  9. 15 Apr, 2015 2 commits
    • Jeff Sharkey's avatar
      Lock while partitioning. · 7d9d0118
      Jeff Sharkey authored
      Otherwise we get really excited and trip over ourselves while
      partitions are still being created.
      
      Bug: 19993667
      Change-Id: I034e56b3063a71d73f9311a945c05ea2ae255f7d
      7d9d0118
    • Jeff Sharkey's avatar
      Don't be picky about zap status. · ffeb0079
      Jeff Sharkey authored
      Bug: 19993667
      Change-Id: Id125d9252bf7130516c0ec619d5f067fea24d560
      ffeb0079
  10. 14 Apr, 2015 1 commit
  11. 13 Apr, 2015 1 commit
  12. 12 Apr, 2015 1 commit
    • Jeff Sharkey's avatar
      Emulated volumes above private volumes. · 3161fb37
      Jeff Sharkey authored
      When a private volume is mounted, create an emulated volume above it
      hosted at the /media path on that device.  That emulated volume is
      automatically torn down when unmounting the private volume.
      
      Add "removed" state for volume, which signals to framework that
      media has left the building, send when the volume is destroyed.
      
      Bug: 19993667
      Change-Id: I1f82b51de578ac5cfcc5d7b9a6fb44f6f25c775c
      3161fb37
  13. 11 Apr, 2015 1 commit
    • Jeff Sharkey's avatar
      Exclusive exec() path, format after partition. · ce6a913a
      Jeff Sharkey authored
      Sadly setexeccon() is process global, so we need to carefully ensure
      that all exec() are mutually exclusive to avoid transitioning into
      unwanted domains.  Also, because we have several threads floating
      around, we need to guard all our FDs with O_CLOEXEC.
      
      Format all newly created volumes immediately after partitioning,
      but silence all events emitted from those volumes to prevent the
      framework from getting all excited.  Unify all notify events under a
      single codepath to make them easy to silence.
      
      Sent SIGINT before escalating to SIGTERM when unmounting.
      
      Bug: 19993667
      Change-Id: Idc6c806afc7919a004a93e2240b42884f6b52d6b
      ce6a913a
  14. 07 Apr, 2015 5 commits
  15. 05 Apr, 2015 1 commit
  16. 02 Apr, 2015 2 commits
  17. 01 Apr, 2015 2 commits
    • Jeff Sharkey's avatar
      Different blkid and fsck execution domains. · 95c87cce
      Jeff Sharkey authored
      vold works with two broad classes of block devices: untrusted devices
      that come in from the wild, and trusted devices like PrivateVolume
      which are encrypted.
      
      When running blkid and fsck, we pick which SELinux execution domain
      to use based on which class the device belongs to.
      
      Bug: 19993667
      Change-Id: I2695f028710a4863f0c3b2ed6da437f466401272
      95c87cce
    • Jeff Sharkey's avatar
      Support for private (adopted) volumes. · 9c48498f
      Jeff Sharkey authored
      This adds support for private volumes which is just a filesystem
      wrapped in a dm-crypt layer.  For now we're using the exact same
      configuration as internal encryption (aes-cbc-essiv:sha256), but we
      don't store any key material on the removable media.  Instead, we
      store the key on internal storage, and use the GPT partition GUID
      to identify which key should be used.
      
      This means that private external storage is effectively as secure as
      the internal storage of the device.  That is, if the internal storage
      is encrypted, then our external storage key is also encrypted.
      
      When partitioning disks, we now support a "private" mode which has
      a PrivateVolume partition, and a currently unused 16MB metadata
      partition reserved for future use.  It also supports a "mixed" mode
      which creates both a PublicVolume and PrivateVolume on the same
      disk.  Mixed mode is currently experimental.
      
      For now, just add ext4 support to PrivateVolume; we'll look at f2fs
      in a future change.  Add VolumeBase lifecycle for setting up crypto
      mappings, and extract blkid logic into shared method.  Sprinkle some
      more "static" around the cryptfs code to improve invariants.
      
      Bug: 19993667
      Change-Id: Ibd1df6250735b706959a1eb9d9f7219ea85912a0
      9c48498f
  18. 31 Mar, 2015 2 commits
    • Jeff Sharkey's avatar
      Fix 64 bit builds. · 38cfc028
      Jeff Sharkey authored
      Change-Id: I4e30ecff3c29d0f8351c6f43de1c979c8c792fab
      38cfc028
    • Jeff Sharkey's avatar
      Progress towards dynamic storage support. · 36801ccc
      Jeff Sharkey authored
      Wire up new Disk and VolumeBase objects and events to start replacing
      older DirectVolume code.  Use filesystem UUID as visible PublicVolume
      name to be more deterministic.
      
      When starting, create DiskSource instances based on fstab, and watch
      for kernel devices to appear.  Turn matching devices into Disk
      objects, scan for partitions, and create any relevant VolumeBase
      objects.  Broadcast all of these events towards userspace so the
      framework can decide what to mount.
      
      Keep track of the primary VolumeBase, and update the new per-user
      /storage/self/primary symlink for all started users.
      
      Provide a reset command that framework uses to start from a known
      state when runtime is restarted.  When vold is unexpectedly killed,
      try recovering by unmounting everything under /mnt and /storage
      before moving forward.
      
      Remove UMS sharing support for now, since no current devices support
      it; MTP is the recommended solution going forward because it offers
      better multi-user support.
      
      Switch killProcessesWithOpenFiles() to directly take signal.  Fix
      one SOCK_CLOEXEC bug, but SELinux says there are more lurking.
      
      Bug: 19993667
      Change-Id: I2dad1303aa4667ec14c52f774e2a28b3c1c1ff6d
      36801ccc
  19. 30 Mar, 2015 4 commits
  20. 27 Mar, 2015 2 commits