Skip to content
Snippets Groups Projects
  1. Apr 01, 2015
    • Jeff Sharkey's avatar
      Different blkid and fsck execution domains. · 84e1c611
      Jeff Sharkey authored
      vold works with two broad classes of block devices: untrusted devices
      that come in from the wild, and trusted devices.
      
      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: I44f5bac5dd94f0f76f3e4ef50ddbde5a32bd17a5
      84e1c611
    • Jeff Sharkey's avatar
      Directory for vold to store private data. · 4423ecdb
      Jeff Sharkey authored
      Creates new directory at /data/misc/vold for storing key material
      on internal storage.  Only vold should have access to this label.
      
      Change-Id: I7f2d1314ad3b2686e29e2037207ad83d2d3bf465
      4423ecdb
  2. Mar 31, 2015
    • Jeff Sharkey's avatar
      Separate fsck domains to protect userdata. · 5a5b364c
      Jeff Sharkey authored
      Create new vold_fsck domain that only has access to vold_block
      devices to prevent any access to internal userdata.
      
      Change-Id: I25ddcd16cbf83d7a25b70bc64d95f5345d0d5731
      5a5b364c
    • Jeff Sharkey's avatar
      Updated policy for external storage. · f063f461
      Jeff Sharkey authored
      An upcoming platform release is redesigning how external storage
      works.  At a high level, vold is taking on a more active role in
      managing devices that dynamically appear.
      
      This change also creates further restricted domains for tools doing
      low-level access of external storage devices, including sgdisk
      and blkid.  It also extends sdcardd to be launchable by vold, since
      launching by init will eventually go away.
      
      For compatibility, rules required to keep AOSP builds working are
      marked with "TODO" to eventually remove.
      
      Slightly relax system_server external storage rules to allow calls
      like statfs().  Still neverallow open file descriptors, since they
      can cause kernel to kill us.
      
      Here are the relevant violations that this CL is designed to allow:
      
      avc: denied { search } for name="user" dev="tmpfs" ino=7441 scontext=u:r:zygote:s0 tcontext=u:object_r:mnt_user_file:s0 tclass=dir
      avc: denied { getattr } for path="/mnt/user/0" dev="tmpfs" ino=6659 scontext=u:r:zygote:s0 tcontext=u:object_r:mnt_user_file:s0 tclass=dir
      avc: denied { write } for name="user" dev="tmpfs" ino=6658 scontext=u:r:zygote:s0 tcontext=u:object_r:mnt_user_file:s0 tclass=dir
      avc: denied { add_name } for name="10" scontext=u:r:zygote:s0 tcontext=u:object_r:mnt_user_file:s0 tclass=dir
      avc: denied { create } for name="10" scontext=u:r:zygote:s0 tcontext=u:object_r:mnt_user_file:s0 tclass=dir
      avc: denied { setattr } for name="10" dev="tmpfs" ino=11348 scontext=u:r:zygote:s0 tcontext=u:object_r:mnt_user_file:s0 tclass=dir
      avc: denied { search } for name="/" dev="tmpfs" ino=3131 scontext=u:r:zygote:s0 tcontext=u:object_r:storage_file:s0 tclass=dir
      avc: denied { getattr } for path="/storage" dev="tmpfs" ino=6661 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:storage_file:s0 tclass=dir
      avc: denied { getattr } for path="/storage/self" dev="tmpfs" ino=6659 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:mnt_user_file:s0 tclass=dir
      avc: denied { getattr } for path="/storage" dev="tmpfs" ino=6661 scontext=u:r:untrusted_app:s0:c522,c768 tcontext=u:object_r:storage_file:s0 tclass=dir
      avc: denied { getattr } for path="/storage/self" dev="tmpfs" ino=11348 scontext=u:r:untrusted_app:s0:c522,c768 tcontext=u:object_r:mnt_user_file:s0 tclass=dir
      avc: denied { getattr } for path="/storage" dev="tmpfs" ino=6661 scontext=u:r:vold:s0 tcontext=u:object_r:storage_file:s0 tclass=dir
      avc: denied { read } for name="/" dev="tmpfs" ino=6661 scontext=u:r:vold:s0 tcontext=u:object_r:storage_file:s0 tclass=dir
      avc: denied { open } for name="/" dev="tmpfs" ino=6661 scontext=u:r:vold:s0 tcontext=u:object_r:storage_file:s0 tclass=dir
      avc: denied { search } for name="/" dev="tmpfs" ino=6661 scontext=u:r:vold:s0 tcontext=u:object_r:storage_file:s0 tclass=dir
      avc: denied { write } for name="data" dev="tmpfs" ino=11979 scontext=u:r:vold:s0 tcontext=u:object_r:storage_file:s0 tclass=dir
      avc: denied { add_name } for name="com.google.android.music" scontext=u:r:vold:s0 tcontext=u:object_r:storage_file:s0 tclass=dir
      avc: denied { create } for name="com.google.android.music" scontext=u:r:vold:s0 tcontext=u:object_r:storage_file:s0 tclass=dir
      avc: denied { use } for path="socket:[8297]" dev="sockfs" ino=8297 scontext=u:r:sdcardd:s0 tcontext=u:r:vold:s0 tclass=fd
      avc: denied { read write } for path="socket:[8297]" dev="sockfs" ino=8297 scontext=u:r:sdcardd:s0 tcontext=u:r:vold:s0 tclass=netlink_kobject_uevent_socket
      avc: denied { read } for path="pipe:[8298]" dev="pipefs" ino=8298 scontext=u:r:sdcardd:s0 tcontext=u:r:vold:s0 tclass=fifo_file
      avc: denied { write } for path="pipe:[8298]" dev="pipefs" ino=8298 scontext=u:r:sdcardd:s0 tcontext=u:r:vold:s0 tclass=fifo_file
      avc: denied { mounton } for path="/storage/emulated" dev="tmpfs" ino=8913 scontext=u:r:sdcardd:s0 tcontext=u:object_r:storage_file:s0 tclass=dir
      avc: denied { getattr } for path="/storage" dev="tmpfs" ino=7444 scontext=u:r:system_server:s0 tcontext=u:object_r:storage_file:s0 tclass=dir
      avc: denied { getattr } for path="/storage/self/primary" dev="tmpfs" ino=7447 scontext=u:r:system_server:s0 tcontext=u:object_r:storage_file:s0 tclass=lnk_file
      avc: denied { read } for name="primary" dev="tmpfs" ino=7447 scontext=u:r:system_server:s0 tcontext=u:object_r:storage_file:s0 tclass=lnk_file
      avc: denied { getattr } for path="/mnt/user" dev="tmpfs" ino=7441 scontext=u:r:system_server:s0 tcontext=u:object_r:mnt_user_file:s0 tclass=dir
      avc: denied { read } for name="disk:179,128" dev="tmpfs" ino=3224 scontext=u:r:sgdisk:s0 tcontext=u:object_r:vold_device:s0 tclass=blk_file
      avc: denied { open } for path="/dev/block/vold/disk:179,128" dev="tmpfs" ino=3224 scontext=u:r:sgdisk:s0 tcontext=u:object_r:vold_device:s0 tclass=blk_file
      avc: denied { getattr } for path="/dev/block/vold/disk:179,128" dev="tmpfs" ino=3224 scontext=u:r:sgdisk:s0 tcontext=u:object_r:vold_device:s0 tclass=blk_file
      avc: denied { read } for name="/" dev="fuse" ino=0 scontext=u:r:vold:s0 tcontext=u:object_r:fuse:s0 tclass=dir
      avc: denied { open } for path="/storage/public:81F3-13EC" dev="fuse" ino=0 scontext=u:r:vold:s0 tcontext=u:object_r:fuse:s0 tclass=dir
      avc: denied { write } for name="data" dev="fuse" ino=2 scontext=u:r:vold:s0 tcontext=u:object_r:fuse:s0 tclass=dir
      avc: denied { add_name } for name="com.google.android.googlequicksearchbox" scontext=u:r:vold:s0 tcontext=u:object_r:fuse:s0 tclass=dir
      avc: denied { create } for name="com.google.android.googlequicksearchbox" scontext=u:r:vold:s0 tcontext=u:object_r:fuse:s0 tclass=dir
      avc: denied { getattr } for path="/dev/block/vold/public:179,129" dev="tmpfs" ino=16953 scontext=u:r:blkid:s0 tcontext=u:object_r:vold_device:s0 tclass=blk_file
      avc: denied { read } for name="public:179,129" dev="tmpfs" ino=16953 scontext=u:r:blkid:s0 tcontext=u:object_r:vold_device:s0 tclass=blk_file
      avc: denied { open } for path="/dev/block/vold/public:179,129" dev="tmpfs" ino=16953 scontext=u:r:blkid:s0 tcontext=u:object_r:vold_device:s0 tclass=blk_file
      avc: denied { ioctl } for path="/dev/block/vold/public:179,129" dev="tmpfs" ino=16953 scontext=u:r:blkid:s0 tcontext=u:object_r:vold_device:s0 tclass=blk_file
      avc: denied { use } for path="pipe:[3264]" dev="pipefs" ino=3264 scontext=u:r:sgdisk:s0 tcontext=u:r:vold:s0 tclass=fd
      avc: denied { use } for path="pipe:[3264]" dev="pipefs" ino=3264 scontext=u:r:sgdisk:s0 tcontext=u:r:vold:s0 tclass=fd
      avc: denied { search } for name="block" dev="tmpfs" ino=2494 scontext=u:r:sgdisk:s0 tcontext=u:object_r:block_device:s0 tclass=dir
      avc: denied { use } for path="pipe:[4200]" dev="pipefs" ino=4200 scontext=u:r:sdcardd:s0 tcontext=u:r:vold:s0 tclass=fd
      avc: denied { use } for path="pipe:[4200]" dev="pipefs" ino=4200 scontext=u:r:sdcardd:s0 tcontext=u:r:vold:s0 tclass=fd
      avc: denied { search } for name="/" dev="tmpfs" ino=3131 scontext=u:r:sdcardd:s0 tcontext=u:object_r:storage_file:s0 tclass=dir
      avc: denied { search } for name="media_rw" dev="tmpfs" ino=3127 scontext=u:r:sdcardd:s0 tcontext=u:object_r:mnt_media_rw_file:s0 tclass=dir
      avc: denied { getattr } for path="pipe:[3648]" dev="pipefs" ino=3648 scontext=u:r:blkid:s0 tcontext=u:r:vold:s0 tclass=fifo_file
      avc: denied { use } for path="/dev/pts/12" dev="devpts" ino=15 scontext=u:r:fsck:s0 tcontext=u:r:vold:s0 tclass=fd
      avc: denied { use } for path="/dev/pts/12" dev="devpts" ino=15 scontext=u:r:fsck:s0 tcontext=u:r:vold:s0 tclass=fd
      avc: denied { use } for path="pipe:[4182]" dev="pipefs" ino=4182 scontext=u:r:fsck:s0 tcontext=u:r:vold:s0 tclass=fd
      
      Change-Id: Idf3b8561baecf7faa603fac5ababdcc5708288e1
      f063f461
  3. Mar 27, 2015
    • Paul Lawrence's avatar
      Adding e4crypt support · 38af1da1
      Paul Lawrence authored
      Add selinux rules to allow file level encryption to work
      
      Change-Id: I1e4bba23e99cf5b2624a7df843688fba6f3c3209
      38af1da1
  4. Oct 02, 2014
    • Stephen Smalley's avatar
      Label block devices created or accessed by vold with specific types. · 273d7ea4
      Stephen Smalley authored
      
      Assign a more specific type than block_device to all
      block devices created or accessed by vold.   Allow vold
      to set the context on the device nodes it creates.
      
      vold can create extra loop devices (/dev/block/loopN) and
      block devices for volumes it manages (/dev/block/vold/M:N).
      
      vold can read/write device mapper block devices (/dev/block/dm-N)
      created for encrypted volumes.
      
      vold can read/write metadata partitions used to store encryption metadata.
      The metadata_block_device type should be assigned in device-specific
      policy to the partition specified by the encryptable= mount option
      for the userata entry in the fstab.<board> file.
      
      This change does not remove the ability to create or read/write
      generic block_device devices by vold, so it should not break anything.
      It does add an auditallow statement on such accesses so that we can track
      remaining cases where we need to label such device nodes so that we can
      ultimately remove this access.
      
      Change-Id: Id3bea28f5958086716cd3db055bea309b3b5fa5a
      Signed-off-by: default avatarStephen Smalley <sds@tycho.nsa.gov>
      273d7ea4
  5. Sep 30, 2014
    • Stephen Smalley's avatar
      Fix fsck-related denials with encrypted userdata. · cedee697
      Stephen Smalley authored
      
      Allow error reporting via the pty supplied by init.
      Allow vold to invoke fsck for checking volumes.
      
      Addresses denials such as:
      avc:  denied  { ioctl } for  pid=133 comm="e2fsck" path="/dev/pts/0" dev="devpts" ino=3 scontext=u:r:fsck:s0 tcontext=u:object_r:devpts:s0 tclass=chr_file
      
      avc: denied { execute } for pid=201 comm="vold" name="e2fsck" dev="mmcblk0p25" ino=98 scontext=u:r:vold:s0 tcontext=u:object_r:fsck_exec:s0 tclass=file
      
      These denials show up if you have encrypted userdata.
      
      Change-Id: Idc8e6f83a0751f17cde0ee5e4b1fbd6efe164e4c
      Signed-off-by: default avatarStephen Smalley <sds@tycho.nsa.gov>
      cedee697
  6. Sep 20, 2014
    • Stephen Smalley's avatar
      Define types for userdata and cache block devices. · dd053a9b
      Stephen Smalley authored
      
      Introduce separate types for the userdata and cache block
      devices so that we can assign them and allow access to them
      in device-specific policy without allowing access to any other
      block device (e.g. system).  These types will only be used if
      assigned to device node paths in the device-specific file_contexts
      configuration.  Otherwise, this change will have no impact - the
      userdata and cache block devices will continue to default to block_device
      type.
      
      To avoid breakage when these new types are assigned to the userdata
      block device, allow access by vold and uncrypt, but auditallow
      these accesses to confirm that these are required.
      
      Change-Id: I99d24f06506f51ebf1d186d9c393b3cad60e98d7
      Signed-off-by: default avatarStephen Smalley <sds@tycho.nsa.gov>
      dd053a9b
  7. May 29, 2014
  8. May 23, 2014
    • Nick Kralevich's avatar
      Introduce wakelock_use() · 8599e34b
      Nick Kralevich authored
      Introduce wakelock_use(). This macro declares that a domain uses
      wakelocks.
      
      Wakelocks require both read-write access to files in /sys/power, and
      CAP_BLOCK_SUSPEND. This macro helps ensure that both capabilities and
      file access are granted at the same time.
      
      Still TODO: fix device specific wakelock use.
      
      Change-Id: Ib98ff374a73f89e403acd9f5e024988f59f08115
      8599e34b
  9. May 09, 2014
  10. Apr 18, 2014
  11. Apr 14, 2014
  12. Mar 25, 2014
  13. Mar 20, 2014
    • Paul Lawrence's avatar
      Allow vold to call to healthd · 01ba6834
      Paul Lawrence authored
      vold needs to be able to check remaining battery to safely abort
      certain operations
      
      Bug: 11985952
      Change-Id: I7dfe83f7d1029593882e0e5ad33f90fb29e5532b
      01ba6834
  14. Mar 03, 2014
  15. Feb 25, 2014
    • Stephen Smalley's avatar
      Clean up socket rules. · 16011320
      Stephen Smalley authored
      
      Replace * or any permission set containing create with
      create_socket_perms or create_stream_socket_perms.
      
      Add net_domain() to all domains using network sockets and
      delete rules already covered by domain.te or net.te.
      
      For netlink_route_socket, only nlmsg_write needs to be separately
      granted to specific domains that are permitted to modify the routing
      table.   Clarification:  read/write permissions are just ability to
      perform read/recv() or write/send() on the socket, whereas nlmsg_read/
      nlmsg_write permissions control ability to observe or modify the
      underlying kernel state accessed via the socket.
      See security/selinux/nlmsgtab.c in the kernel for the mapping of
      netlink message types to nlmsg_read or nlmsg_write.
      
      Delete legacy rule for b/12061011.
      
      This change does not touch any rules where only read/write were allowed
      to a socket created by another domain (inherited across exec or
      received across socket or binder IPC).  We may wish to rewrite some or all
      of those rules with the rw_socket_perms macro but that is a separate
      change.
      
      Change-Id: Ib0637ab86f6d388043eff928e5d96beb02e5450e
      Signed-off-by: default avatarStephen Smalley <sds@tycho.nsa.gov>
      16011320
  16. Feb 11, 2014
  17. Dec 19, 2013
    • Nick Kralevich's avatar
      vold: allow wakelocks, fsck logs · 3753c816
      Nick Kralevich authored
      When encrypting a device, vold tries to acquire a wake lock,
      to prevent the device from sleeping. Add an allow rule.
      
      After booting with a freshly encrypted device, fsck logs data to
      /dev/fscklogs/log . Add an allow rule.
      
      Addresses the following denials.
      
      wake lock:
      
      <5>[  372.401015] type=1400 audit(1387488823.195:6): avc:  denied  { read write } for  pid=143 comm="vold" name="wake_lock" dev="sysfs" ino=69 scontext=u:r:vold:s0 tcontext=u:object_r:sysfs_wake_lock:s0 tclass=file
      <5>[  127.274556] type=1400 audit(1387494536.080:8): avc:  denied  { open } for  pid=140 comm="vold" name="wake_lock" dev="sysfs" ino=69 scontext=u:r:vold:s0 tcontext=u:object_r:sysfs_wake_lock:s0 tclass=file
      
      fsck logging:
      
      <5>[   44.759122] type=1400 audit(1387489522.460:6): avc:  denied  { search } for  pid=132 comm="vold" name="fscklogs" dev="tmpfs" ino=3216 scontext=u:r:vold:s0 tcontext=u:object_r:fscklogs:s0 tclass=dir
      <5>[   28.559964] type=1400 audit(1387495221.265:6): avc:  denied  { write } for  pid=132 comm="vold" name="fscklogs" dev="tmpfs" ino=3216 scontext=u:r:vold:s0 tcontext=u:object_r:fscklogs:s0 tclass=dir
      <5>[   28.560081] type=1400 audit(1387495221.265:7): avc:  denied  { add_name } for  pid=132 comm="vold" name="log" scontext=u:r:vold:s0 tcontext=u:object_r:fscklogs:s0 tclass=dir
      <5>[   28.560244] type=1400 audit(1387495221.265:8): avc:  denied  { create } for  pid=132 comm="vold" name="log" scontext=u:r:vold:s0 tcontext=u:object_r:fscklogs:s0 tclass=file
      <5>[   28.560383] type=1400 audit(1387495221.265:9): avc:  denied  { write open } for  pid=132 comm="vold" name="log" dev="tmpfs" ino=5898 scontext=u:r:vold:s0 tcontext=u:object_r:fscklogs:s0 tclass=file
      <5>[   28.582520] type=1400 audit(1387495221.285:10): avc:  denied  { getattr } for  pid=132 comm="vold" path="/dev/fscklogs/log" dev="tmpfs" ino=5898 scontext=u:r:vold:s0 tcontext=u:object_r:fscklogs:s0 tclass=file
      
      Change-Id: I09fbe73c9d4955578c16fece4f3b84269eed78b5
      3753c816
  18. Nov 15, 2013
    • Jeff Sharkey's avatar
      Let vold mount OBB files on external storage. · 80176dc4
      Jeff Sharkey authored
      Fixes this specific violation:
      
      type=1400 audit(1384468728.202:16): avc:  denied { read write } for
      pid=271 comm="vold" name="test1.obb" dev="fuse" ino=3100664872
      scontext=u:r:vold:s0 tcontext=u:object_r:sdcard_internal:s0
      tclass=file
      
      Bug: 11693888
      Change-Id: I45d30ecabdf0bc8871f3dd67b5695ac909109d9a
      80176dc4
  19. Oct 17, 2013
  20. Oct 14, 2013
    • Nick Kralevich's avatar
      Partially revert 4fc702ec. · d045e564
      Nick Kralevich authored
      It's questionable whether this change is actually needed,
      and it only affects one user (who's /data partition was
      created oddly).
      
      Revert it for now (in master) to see if we get more reports
      of this bug.
      
      Bug: 11149726
      Change-Id: I9b5408306b55653b2b9d43e68e7c771b72662649
      d045e564
  21. Oct 10, 2013
    • Geremy Condra's avatar
      DO NOT MERGE Fix denials seen during device upgrade. · 4fc702ec
      Geremy Condra authored
      Fixes:
      denied  { relabelto } for  pid=721 comm="PackageManager" name="vmdl-112554949.tmp" dev="mmcblk0p30" ino=712747 scontext=u:r:system:s0 tcontext=u:object_r:apk_private_tmp_file:s0 tclass=file
      denied  { create } for  pid=240 comm="vold" name="smdl2tmp1.asec" scontext=u:r:vold:s0 tcontext=u:object_r:system_data_file:s0 tclass=file
      
      Bug: 11149726
      Change-Id: Iddc7592c757375a961f0d392c27622073c141b36
      4fc702ec
  22. Sep 11, 2013
  23. Jul 08, 2013
    • Alex Klyubin's avatar
      Grant fsetid Linux capability to vold. · 79d59edc
      Alex Klyubin authored
      This fixes the issue where paid apps failed to install via Google
      Play with "Package file has a bad manifest" error. The issue appears
      to be caused by vold being prevented by SELinux policy from setting
      the setgid bit on the ASEC container directory into which the APK is
      decrypted. As a result, the APK is not readable to PackageParser.
      
      Bug: 9736808
      Change-Id: I07546a9f9caac3de8b720499bd1bf1604edea0fe
      79d59edc
    • Alex Klyubin's avatar
      Grant fsetid Linux capability to vold. · b25fe91e
      Alex Klyubin authored
      This fixes the issue where paid apps failed to install via Google
      Play with "Package file has a bad manifest" error. The issue appears
      to be caused by vold being prevented by SELinux policy from setting
      the setgid bit on the ASEC container directory into which the APK is
      decrypted. As a result, the APK is not readable to PackageParser.
      
      Bug: 9736808
      Change-Id: I07546a9f9caac3de8b720499bd1bf1604edea0fe
      b25fe91e
  24. Jun 29, 2013
    • Nick Kralevich's avatar
      Enable SELinux on vold · 7914a47f
      Nick Kralevich authored
      This change enables SELinux security enforcement on vold.
      
      For the vold.te file ONLY, this change is conceptually a revert of
      77d4731e and
      50e37b93, with the following
      additional changes:
      
      1) Removal of "allow vold proc:file write;" and
      "allow vold self:capability { sys_boot };". As of system/vold
      change adfba3626e76c1931649634275d241b226cd1b9a, vold no longer
      performs it's own reboots, so these capabilities are no longer
      needed.
      
      2) Addition of the powerctl property, which vold contacts to
      tell init to reboot.
      
      3) Removal of "allow vold kernel:system module_request;". As of
      CTS commit f2cfdf5c057140d9442fcfeb4e4a648e8258b659, Android
      devices no longer ship with loadable modules, hence we don't
      require this rule.
      
      4) Removal of "fsetid" from "self:capability". Any setuid / setgid
      bits SHOULD be cleared if vold is able to change the permissions
      of files. IMHO, it was a mistake to ever include this capability in
      the first place.
      
      Testing: As much as possible, I've tested filesystem related
      functionality, including factory reset and device encryption.
      I wasn't able to test fstrim functionality, which is a fairly
      new feature.  I didn't see any policy denials in dmesg. It's quite
      possible I've missed something. If we experience problems, I
      happy to roll back this change.
      
      Bug: 9629920
      Change-Id: I683afa0dffe9f28952287bfdb7ee4e0423c2e97a
      7914a47f
  25. May 20, 2013
    • repo sync's avatar
      Make all domains unconfined. · 77d4731e
      repo sync authored
      This prevents denials from being generated by the base policy.
      Over time, these rules will be incrementally tightened to improve
      security.
      
      Change-Id: I4be1c987a5d69ac784a56d42fc2c9063c402de11
      77d4731e
  26. May 15, 2013
  27. May 10, 2013
  28. May 09, 2013
  29. May 08, 2013
  30. Apr 05, 2013
  31. Apr 04, 2013
  32. Mar 22, 2013
    • William Roberts's avatar
      Split internal and external sdcards · c195ec31
      William Roberts authored
      Two new types are introduced:
      sdcard_internal
      sdcard_external
      
      The existing type of sdcard, is dropped and a new attribute
      sdcard_type is introduced.
      
      The boolean app_sdcard_rw has also been changed to allow for
      controlling untrusted_app domain to use the internal and external
      sdcards.
      
      Change-Id: Ic7252a8e1703a43cb496413809d01cc6cacba8f5
      c195ec31
Loading