Skip to content
Snippets Groups Projects
  1. Mar 31, 2015
    • 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
  2. Nov 10, 2014
    • Igor Murashkin's avatar
      zygote/dex2oat: Grant additional symlink permissions · 3df12275
      Igor Murashkin authored
      * zygote needs to be able to symlink from dalvik cache to system
        to avoid having to copy boot.oat
        (when the boot.oat file was built with --compile-pic)
      * dex2oat needs to be able to read the symlink in the dalvik cache
        (the one that zygote creates)
      
      (cherry-picked from AOSP master
      83c5612e)
      
      Bug: 18035729
      
      (cherry picked from commit f7ccfd00)
      
      Change-Id: I5dca27241f46f481515b96e968fb2bef7866c89b
      3df12275
  3. Oct 31, 2014
    • Igor Murashkin's avatar
      zygote/dex2oat: Grant additional symlink permissions · f7ccfd00
      Igor Murashkin authored
      * zygote needs to be able to symlink from dalvik cache to system
        to avoid having to copy boot.oat
        (when the boot.oat file was built with --compile-pic)
      * dex2oat needs to be able to read the symlink in the dalvik cache
        (the one that zygote creates)
      
      (cherry-picked from AOSP master
      83c5612e)
      
      Bug: 18035729
      Change-Id: Ie1acad81a0fd8b2f24e1f3f07a06e6fdb548be62
      f7ccfd00
  4. Oct 28, 2014
    • Igor Murashkin's avatar
      zygote/dex2oat: Grant additional symlink permissions · 83c5612e
      Igor Murashkin authored
      * zygote needs to be able to symlink from dalvik cache to system
        to avoid having to copy boot.oat
        (when the boot.oat file was built with --compile-pic)
      * dex2oat needs to be able to read the symlink in the dalvik cache
        (the one that zygote creates)
      
      Bug: 18035729
      Change-Id: Ie1acad81a0fd8b2f24e1f3f07a06e6fdb548be62
      83c5612e
  5. Oct 20, 2014
  6. Oct 15, 2014
    • Robin Lee's avatar
      Pull keychain-data policy out of system-data · 51bfecf4
      Robin Lee authored
      Migrators should be allowed to write to /data/misc/keychain in order
      to remove it. Similarly /data/misc/user should be writable by system
      apps.
      
      TODO: Revoke zygote's rights to read from /data/misc/keychain on
      behalf of some preloaded security classes.
      
      Bug: 17811821
      Change-Id: I9e9c6883cff1dca3755732225404909c16a0e547
      51bfecf4
  7. Sep 26, 2014
    • Nick Kralevich's avatar
      zygote: allow replacing /proc/cpuinfo · f2c01189
      Nick Kralevich authored
      Android's native bridge functionality allows an Android native
      app written on one CPU architecture to run on a different architecture.
      For example, Android ARM apps may run on an x86 CPU.
      
      To support this, the native bridge functionality needs to replace
      /proc/cpuinfo with the version from /system/lib/<ISA>/cpuinfo
      using a bind mount. See commit ab0da5a9a6860046619629b8e6b83692d35dff86
      in system/core.
      
      This change:
      
      1) Creates a new label proc_cpuinfo, and assigns /proc/cpuinfo
      that label.
      2) Grants read-only access to all SELinux domains, to avoid
      breaking pre-existing apps.
      3) Grants zygote mounton capabilities for that file, so zygote
      can replace the file as necessary.
      
      Addresses the following denial:
      
        avc: denied { mounton } for path="/proc/cpuinfo" dev="proc" ino=4026532012 scontext=u:r:zygote:s0 tcontext=u:object_r:proc:s0 tclass=file
      
      Bug: 17671501
      
      (cherry picked from commit 2de02877)
      
      Change-Id: I2c2366bee4fe365288d14bca9778d23a43c368cb
      f2c01189
    • Nick Kralevich's avatar
      zygote: allow replacing /proc/cpuinfo · 2de02877
      Nick Kralevich authored
      Android's native bridge functionality allows an Android native
      app written on one CPU architecture to run on a different architecture.
      For example, Android ARM apps may run on an x86 CPU.
      
      To support this, the native bridge functionality needs to replace
      /proc/cpuinfo with the version from /system/lib/<ISA>/cpuinfo
      using a bind mount. See commit ab0da5a9a6860046619629b8e6b83692d35dff86
      in system/core.
      
      This change:
      
      1) Creates a new label proc_cpuinfo, and assigns /proc/cpuinfo
      that label.
      2) Grants read-only access to all SELinux domains, to avoid
      breaking pre-existing apps.
      3) Grants zygote mounton capabilities for that file, so zygote
      can replace the file as necessary.
      
      Addresses the following denial:
      
        avc: denied { mounton } for path="/proc/cpuinfo" dev="proc" ino=4026532012 scontext=u:r:zygote:s0 tcontext=u:object_r:proc:s0 tclass=file
      
      Bug: 17671501
      Change-Id: Ib70624fba2baeccafbc0a41369833f76b976ee20
      2de02877
  8. Jul 15, 2014
  9. Jul 10, 2014
    • Nick Kralevich's avatar
      Put dex2oat in it's own sandbox · 75d63fcf
      Nick Kralevich authored
      Currently, dex2oat runs in the installd sandbox, and has
      all the SELinux capabilities that installd does. That's too
      excessive.
      
      dex2oat handles untrusted user data, so we want to put it in
      it's own tighter sandbox.
      
      Bug: 15358102
      Change-Id: I08083b84b9769e24d6dad6dbd12401987cb006be
      75d63fcf
  10. Jun 16, 2014
    • Nick Kralevich's avatar
      Fix SELinux policies to allow resource overlays. · fad4d5fb
      Nick Kralevich authored
      The following commits added support for runtime resource overlays.
      
        New command line tool 'idmap'
        * 65a05fd56dbc9fd9c2511a97f49c445a748fb3c5
        Runtime resource overlay, iteration 2
        * 48d22323ce39f9aab003dce74456889b6414af55
        Runtime resource overlay, iteration 2, test cases
        * ad6ed950dbfa152c193dd7e49c369d9e831f1591
      
      During SELinux tightening, support for these runtime resource
      overlays was unknowingly broken. Fix it.
      
      This change has been tested by hackbod and she reports that
      everything is working after this change. I haven't independently
      verified the functionality.
      
      Test cases are available for this by running:
        * python frameworks/base/core/tests/overlaytests/testrunner.py
      
      Change-Id: I1c70484011fd9041bec4ef34f93f7a5509906f40
      fad4d5fb
  11. May 23, 2014
    • Stephen Smalley's avatar
      Restrict requesting contexts other than policy-defined defaults. · 356f4be6
      Stephen Smalley authored
      
      Writing to the /proc/self/attr files (encapsulated by the libselinux
      set*con functions) enables a program to request a specific security
      context for various operations instead of the policy-defined defaults.
      The security context specified using these calls is checked by an
      operation-specific permission, e.g. dyntransition for setcon,
      transition for setexeccon, create for setfscreatecon or
      setsockcreatecon, but the ability to request a context at all
      is controlled by a process permission.  Omit these permissions from
      domain.te and only add them back where required so that only specific
      domains can even request a context other than the default defined by
      the policy.
      
      Change-Id: I6a2fb1279318625a80f3ea8e3f0932bdbe6df676
      Signed-off-by: default avatarStephen Smalley <sds@tycho.nsa.gov>
      356f4be6
  12. May 14, 2014
    • Stephen Smalley's avatar
      Remove zygote write access to system_data_file. · df48bd2c
      Stephen Smalley authored
      
      These rules seem to be a legacy of old Android or perhaps old policy
      before we began splitting types on /data.  I have not been able to
      trigger the auditallow rules on AOSP master.  Reduce the rules to
      only read access to system data.  If we need write access to some
      specific directory under /data, we should introduce a type for it.
      
      Change-Id: I780835950cc366c97b7d0901fc73527d9ea479b1
      Signed-off-by: default avatarStephen Smalley <sds@tycho.nsa.gov>
      df48bd2c
  13. May 12, 2014
  14. May 01, 2014
    • Narayan Kamath's avatar
      Change zygote sepolicy whitelist. · 3a06a72c
      Narayan Kamath authored
      Allow the zygote to create instruction set specific
      directories under /data/dalvik-cache and to change their owner
      to the system UID.
      
      These subdirectories are required in order to support
      instruction set specific dex caches on devices that support
      multiple instruction sets. We can't ask init to create these
      directories for us, because init doesn't have any knowledge
      about the list of runtime instruction sets the device supports.
      
      The owner needs to be system because the package manager (running
      in the system_server) is allowed to manipulate files under this
      directory.
      
      (cherry picked from commit 032e5b0a)
      
      Change-Id: I3a85e8a6b4eed003a93490e7b93a4fd68c41a361
      3a06a72c
  15. Apr 29, 2014
    • Narayan Kamath's avatar
      Change zygote sepolicy whitelist. · 032e5b0a
      Narayan Kamath authored
      Allow the zygote to create instruction set specific
      directories under /data/dalvik-cache and to change their owner
      to the system UID.
      
      These subdirectories are required in order to support
      instruction set specific dex caches on devices that support
      multiple instruction sets. We can't ask init to create these
      directories for us, because init doesn't have any knowledge
      about the list of runtime instruction sets the device supports.
      
      The owner needs to be system because the package manager (running
      in the system_server) is allowed to manipulate files under this
      directory.
      
      Change-Id: Ibb248d198d4430ef8bc494111a60d537c7d04784
      032e5b0a
  16. Apr 08, 2014
  17. Mar 10, 2014
    • dcashman's avatar
      Add auditallow to revaluate b/10498304 · 66f25cb1
      dcashman authored
      The environment has changed since b/10498304 and it may be the case
      that some of the changes introduced thereby are no longer necessary.
      Adding an auditallow will allow us to monitor the effects of
      removing these changes, without blocking other development.
      
      Change-Id: Id4ece1644877c4ba36df3050ac9073ea6320779c
      66f25cb1
    • Stephen Smalley's avatar
      Allow stat of /system/bin/app_process by zygote. · 3bfdc6b4
      Stephen Smalley authored
      
      This resolves denials such as:
      type=1400 audit(7803852.559:251): avc:  denied  { getattr } for  pid=5702 comm="main" path="/system/bin/app_process" dev="mmcblk0p25" ino=60 scontext=u:r:zygote:s0 tcontext=u:object_r:zygote_exec:s0 tclass=file
      
      (triggered on an art crash seen in recent AOSP master)
      
      Rather than just adding this permission individually, just rewrite
      the existing rule to use the rx_file_perms macro.
      We already allowed most of these permissions by way of the
      domain_auto_trans() rule via init_daemon_domain() and the rule
      for the --invoke-with support.  Using macros helps reduce
      policy fragility/brittleness.
      
      Change-Id: Ib7edc17469c47bde9edd89f0e6cf5cd7f90fdb76
      Signed-off-by: default avatarStephen Smalley <sds@tycho.nsa.gov>
      3bfdc6b4
  18. Feb 27, 2014
    • Stephen Smalley's avatar
      Remove system_server and zygote unlabeled execute access. · 37afd3f6
      Stephen Smalley authored
      
      Now that all of /data outside of /data/data should be labeled
      even on legacy devices as a result of
      Ib8d9751a47c8e0238cf499fcec61898937945d9d, there
      should be no reason to permit the system_server or zygote
      execute access to unlabeled files.
      
      This is the only remaining case where a type writable by
      app domains can be executed by system services, so eliminating
      it is desirable.
      
      That said, I have not specifically tested the non-SE to SE
      upgrade path to confirm that this causes no problems.
      
      Change-Id: Ie488bd6e347d4a210806a3308ab25b00952aadb4
      Signed-off-by: default avatarStephen Smalley <sds@tycho.nsa.gov>
      37afd3f6
  19. Jan 09, 2014
  20. Jan 04, 2014
    • Nick Kralevich's avatar
      Don't allow zygote init:binder call · a730e50b
      Nick Kralevich authored
      init can't handle binder calls. It's always incorrect
      to allow init:binder call, and represents a binder call
      to a service without an SELinux domain. Adding this
      allow rule was a mistake; the dumpstate SELinux domain didn't
      exist at the time this rule was written, and dumpstate was
      running under init's domain.
      
      Add a neverallow rule to prevent the reintroduction of
      this bug.
      
      Change-Id: I78d35e675fd142d880f15329471778c18972bf50
      a730e50b
  21. Sep 23, 2013
  22. Sep 17, 2013
    • Alex Klyubin's avatar
      Follow-up to rename system to system_server. · 82140be9
      Alex Klyubin authored
      1fdee11d renamed domain system to
      system_server in AOSP. This CL applies the rename to the rules that
      weren't in AOSP at the time.
      
      Change-Id: I0e226ddca2e01ed577204ddb4886a71f032a01ed
      82140be9
    • Alex Klyubin's avatar
      1/2: Rename domain "system" to "system_server". · 1fdee11d
      Alex Klyubin authored
      This is a follow-up CL to the extraction of "system_app" domain
      from the "system" domain which left the "system" domain encompassing
      just the system_server.
      
      Since this change cannot be made atomically across different
      repositories, it temporarily adds a typealias "server" pointing to
      "system_server". Once all other repositories have been switched to
      "system_server", this alias will be removed.
      
      Change-Id: I90a6850603dcf60049963462c5572d36de62bc00
      1fdee11d
  23. Sep 10, 2013
  24. Sep 09, 2013
  25. Sep 05, 2013
  26. Sep 04, 2013
  27. Aug 30, 2013
  28. Aug 28, 2013
  29. Jul 10, 2013
  30. Jul 01, 2013
    • Nick Kralevich's avatar
      zygote: enable SELinux restrictions · 6aca515c
      Nick Kralevich authored
      This change enables SELinux security enforcement on zygote
      (but not zygote spawned apps).
      
      For the zygote.te file only, this change is equivalent to reverting
      the following commits:
      
      * 50e37b93
      * 77d4731e
      
      No other changes were required.
      
      Testing: As much as possible, I've tested that zygote properly
      starts up, and that there's no problem spawning zygote or zygote
      apps. There were no denials in the kernel dmesg log, and
      everything appears to work correctly. It's quite
      possible I've missed something. If we experience problems, I
      happy to roll back this change.
      
      Bug: 9657732
      Change-Id: Id2a7adcbeebda5d1606cb13470fad6c3fcffd558
      6aca515c
  31. 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
Loading