- Feb 19, 2016
-
-
Calin Juravle authored
Bug: 26719109 Bug: 26563023 Change-Id: Ie0ca764467c874c061752cbbc73e1bacead9b995
-
- Feb 05, 2016
-
-
Andreas Gampe authored
Add permissions to dex2oat, introduce otapreopt binary and otadexopt service. Bug: 25612095 Change-Id: I80fcba2785e80b2931d7d82bb07474f6cd0099f7
-
- Nov 25, 2015
-
-
Jeff Vander Stoep authored
Change-Id: Ia90fb531cfd99d49d179921f041dd93c7325ad50
-
- Nov 16, 2015
-
-
Calin Juravle authored
Bug: 24698874 Bug: 17173268 Change-Id: I8c502ae6aad3cf3c13fae81722c367f45d70fb18
-
- Nov 03, 2015
-
-
Jeff Vander Stoep authored
Motivation: Domain is overly permissive. Start removing permissions from domain and assign them to the domain_deprecated attribute. Domain_deprecated and domain can initially be assigned to all domains. The goal is to not assign domain_deprecated to new domains and to start removing domain_deprecated where it is not required or reassigning the appropriate permissions to the inheriting domain when necessary. Bug: 25433265 Change-Id: I8b11cb137df7bdd382629c98d916a73fe276413c
-
- Oct 03, 2015
-
-
Jeff Vander Stoep authored
Installd uses cp when relocating apps to sdcard. avc: denied { execute } for name="toybox" dev="mmcblk0p10" ino=315 scontext=u:r:installd:s0 tcontext=u:object_r:toolbox_exec:s0 tclass=file Bug: 24617685 Change-Id: Id1a3039bbfc187c074aa50d426278964c40e4bde
-
- Jun 19, 2015
-
-
Stephen Smalley authored
Run idmap in its own domain rather than leaving it in installd's domain. This prevents misuse of installd's permissions by idmap. zygote also needs to run idmap. For now, just run it in zygote's domain as it was previously since that is what is done for dex2oat invocation by zygote. zygote appears to run idmap with system uid while installd runs it with app UIDs, so using different domains seems appropriate. Remove system_file execute_no_trans from both installd and zygote; this should no longer be needed with explicit labels for dex2oat and idmap. Change-Id: If47e2c1326b84c20e94a20f5e699300dce12bdfe Signed-off-by:
Stephen Smalley <sds@tycho.nsa.gov>
-
- Jun 16, 2015
-
-
Jeff Sharkey authored
avc: denied { getattr } for path="/mnt/expand" dev="tmpfs" ino=3146 scontext=u:r:installd:s0 tcontext=u:object_r:mnt_expand_file:s0 tclass=dir permissive=0 Bug: 21856349 Change-Id: Ib9984182a71408d5cb803d453f148856b68569e3
-
- Jun 05, 2015
-
-
Narayan Kamath authored
Needed for split app installs, where we link existing apks and compiled output to the stage location. bug: 20889739 Change-Id: I610dc5b12cb46b03894002d60db7c06412d12cab
-
- May 01, 2015
-
-
Jeff Sharkey authored
As an optimization, installd is now moving previously-installed applications between attached storage volumes. This is effectively copying to the new location, then deleting the old location. Since OAT files can now live under /data/app directories, we also need the ability to relabel those files. avc: denied { create } for name="base.apk" scontext=u:r:installd:s0 tcontext=u:object_r:apk_data_file:s0 tclass=file permissive=1 avc: denied { write } for path="/data/app/com.example.playground-2/base.apk" dev="mmcblk0p16" ino=40570 scontext=u:r:installd:s0 tcontext=u:object_r:apk_data_file:s0 tclass=file permissive=1 avc: denied { setattr } for name="base.apk" dev="mmcblk0p16" ino=40570 scontext=u:r:installd:s0 tcontext=u:object_r:apk_data_file:s0 tclass=file permissive=1 avc: denied { relabelfrom } for name="base.odex" dev="mmcblk0p16" ino=40574 scontext=u:r:installd:s0 tcontext=u:object_r:apk_data_file:s0 tclass=file permissive=1 avc: denied { relabelto } for name="base.odex" dev="mmcblk0p16" ino=40574 scontext=u:r:installd:s0 tcontext=u:object_r:dalvikcache_data_file:s0 tclass=file permissive=1 (Cherry-pick of 8f821db7) Bug: 19993667, 20275578 Change-Id: I52bb29ed9f57b3216657eb757d78b06eeaf53458
-
- Apr 30, 2015
-
-
Jeff Sharkey authored
As an optimization, installd is now moving previously-installed applications between attached storage volumes. This is effectively copying to the new location, then deleting the old location. Since OAT files can now live under /data/app directories, we also need the ability to relabel those files. avc: denied { create } for name="base.apk" scontext=u:r:installd:s0 tcontext=u:object_r:apk_data_file:s0 tclass=file permissive=1 avc: denied { write } for path="/data/app/com.example.playground-2/base.apk" dev="mmcblk0p16" ino=40570 scontext=u:r:installd:s0 tcontext=u:object_r:apk_data_file:s0 tclass=file permissive=1 avc: denied { setattr } for name="base.apk" dev="mmcblk0p16" ino=40570 scontext=u:r:installd:s0 tcontext=u:object_r:apk_data_file:s0 tclass=file permissive=1 avc: denied { relabelfrom } for name="base.odex" dev="mmcblk0p16" ino=40574 scontext=u:r:installd:s0 tcontext=u:object_r:apk_data_file:s0 tclass=file permissive=1 avc: denied { relabelto } for name="base.odex" dev="mmcblk0p16" ino=40574 scontext=u:r:installd:s0 tcontext=u:object_r:dalvikcache_data_file:s0 tclass=file permissive=1 Bug: 19993667, 20275578 Change-Id: I52bb29ed9f57b3216657eb757d78b06eeaf53458
-
- Apr 10, 2015
-
-
Jeff Sharkey authored
Add rules that allow installd to move private app data between internal and expanded storage devices. For now we'll be reusing the "cp" binary using android_fork_execvp(), so grant access to devpts. avc: denied { read write } for name="14" dev="devpts" ino=17 scontext=u:r:installd:s0 tcontext=u:object_r:devpts:s0 tclass=chr_file permissive=1 avc: denied { open } for path="/dev/pts/14" dev="devpts" ino=17 scontext=u:r:installd:s0 tcontext=u:object_r:devpts:s0 tclass=chr_file permissive=1 avc: denied { read } for name="com.android.opengl.shaders_cache" dev="mmcblk0p16" ino=114672 scontext=u:r:installd:s0 tcontext=u:object_r:app_data_file:s0:c512,c768 tclass=file permissive=1 avc: denied { open } for path="/data/data/com.example.playground/code_cache/com.android.opengl.shaders_cache" dev="mmcblk0p16" ino=114672 scontext=u:r:installd:s0 tcontext=u:object_r:app_data_file:s0:c512,c768 tclass=file permissive=1 avc: denied { create } for name="com.android.opengl.shaders_cache" scontext=u:r:installd:s0 tcontext=u:object_r:app_data_file:s0 tclass=file permissive=1 avc: denied { read write open } for path="/mnt/expand/57f8f4bc-abf4-655f-bf67-946fc0f9f25b/user/0/com.example.playground/code_cache/com.android.opengl.shaders_cache" dev="dm-0" ino=64518 scontext=u:r:installd:s0 tcontext=u:object_r:app_data_file:s0 tclass=file permissive=1 Bug: 19993667 Change-Id: I5188e660c8b5e97eab8f0c74147499ec688f3f19
-
- Apr 07, 2015
-
-
Jeff Sharkey authored
avc: denied { search } for name="expand" dev="tmpfs" ino=3130 scontext=u:r:installd:s0 tcontext=u:object_r:mnt_expand_file:s0 tclass=dir permissive=0 Bug: 19993667 Change-Id: Ie53df62aa79ae14cd56d7c6f2429b4be382164d1
-
- Apr 02, 2015
-
-
Fyodor Kupolov authored
oat dir inside apk_tmp_file should be labeled as dalvikcache_data_file. Bug: 19550105 Change-Id: Ie928b5f47bfc42167bf86fdf10d6913ef25d145d
-
- Mar 07, 2015
-
-
Nick Kralevich authored
Ensure that AT_SECURE=1 is set when installd executes dex2oat. LD_PRELOAD is no longer set by init, and installd couldn't see LD_PRELOAD anyway due to https://android-review.googlesource.com/129971 . Drop it. Continuation of commit b00a0379 Change-Id: Icaf08768b3354c6a99dd0f77fef547a706cc96e9
-
- Oct 15, 2014
-
-
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
-
- Jul 15, 2014
-
-
Ed Heyl authored
Change-Id: Ic9dde806a30d3e7b9c4a066f247a9207fe9b94b4
-
- Jul 10, 2014
-
-
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
-
- Jun 16, 2014
-
-
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
-
- Jun 14, 2014
-
-
Stephen Smalley authored
Addresses denials such as: avc: denied { getattr } for comm="installd" path="/data/app-asec/com.vectorunit.red-1.asec" dev="dm-0" ino=578229 scontext=u:r:installd:s0 tcontext=u:object_r:asec_image_file:s0 tclass=file avc: denied { getattr } for pid=262 comm="installd" path="/data/media/0/Android/data/com.google.android.apps.maps/cache/cache_vts_tran_base_GMM.m" dev="dm-0" ino=124930 scontext=u:r:installd:s0 tcontext=u:object_r:media_rw_data_file:s0 tclass=file Signed-off-by:
Stephen Smalley <sds@tycho.nsa.gov> (cherry picked from commit d2622fda) Change-Id: Iac46236ee583dee11a7e6518a9e8eca25c59e9ba
-
- Jun 12, 2014
-
-
Nick Kralevich authored
Remove /data/dalvik-cache/profiles from domain. Profiling information leaks data about how people interact with apps, so we don't want the data to be available in all SELinux domains. Add read/write capabilities back to app domains, since apps need to read/write profiling data. Remove restorecon specific rules. The directory is now created by init, not installd, so installd doesn't need to set the label. Change-Id: Ic1b44009faa30d704855e97631006c4b990a4ad3
-
- Jun 11, 2014
-
-
Stephen Smalley authored
Addresses denials such as: avc: denied { setattr } for comm="installd" name="com.android.calendar_preferences_no_backup.xml" dev="mmcblk0p28" ino=1499393 scontext=u:r:installd:s0 tcontext=u:object_r:app_data_file:s0 tclass=file avc: denied { setattr } for comm="installd" name="calendar_alerts.xml" dev="mmcblk0p28" ino=1499463 scontext=u:r:installd:s0 tcontext=u:object_r:app_data_file:s0 tclass=file avc: denied { setattr } for comm="installd" name="_has_set_default_values.xml" dev="mmcblk0p28" ino=1499428 scontext=u:r:installd:s0 tcontext=u:object_r:app_data_file:s0 tclass=file Change-Id: I0622f1a9d2b10e28be2616f91edf33bc048b4ac7 Signed-off-by:
Stephen Smalley <sds@tycho.nsa.gov>
-
- Jun 04, 2014
-
-
Stephen Smalley authored
Addresses denials such as: avc: denied { getattr } for comm="installd" path="/data/app-asec/com.vectorunit.red-1.asec" dev="dm-0" ino=578229 scontext=u:r:installd:s0 tcontext=u:object_r:asec_image_file:s0 tclass=file avc: denied { getattr } for pid=262 comm="installd" path="/data/media/0/Android/data/com.google.android.apps.maps/cache/cache_vts_tran_base_GMM.m" dev="dm-0" ino=124930 scontext=u:r:installd:s0 tcontext=u:object_r:media_rw_data_file:s0 tclass=file Change-Id: I406f1bea32736e2277adae1629a879fac0d714b6 Signed-off-by:
Stephen Smalley <sds@tycho.nsa.gov>
-
- Jun 03, 2014
-
-
Christopher Tate authored
This is to accomodate migration to (and ongoing support of) a new installed-app file topology, in which APK files are placed in /data/app/$PACKAGE-rev/, there is a canonical-path symlink /data/app/$PACKAGE/ -> /data/app/$PACKAGE-rev/, and the native libraries exist not under a top-level /data/app-lib/$PACKAGE-rev hard directory, but rather under /data/app/$PACKAGE/lib (when referenced by canonical path). Change-Id: I4f60257f8923c64266d98aa247bffa912e204fb0
-
- May 29, 2014
-
-
Stephen Smalley authored
The bugs that motivated bringing back the unlabeled allowall rules, https://android-review.googlesource.com/#/c/94971/ should be resolved by the following changes: https://android-review.googlesource.com/#/c/94966/ https://android-review.googlesource.com/#/c/96080/ Beyond those changes, installd needs to be able to remove package directories for apps that no longer exist or have moved (e.g. to priv-app) on upgrades, so allow it the permissions required for this purpose. vold needs to be able to chown/chmod/restorecon files in asec containers so allow it the permissions to do so. system_server tries to access all /data/data subdirectories so permit it to do so. installd and system_server read the pkg.apk file before it has been relabeled by vold and therefore need to read unlabeled files. Change-Id: I70da7d605c0d037eaa5f3f5fda24f5e7715451dc Signed-off-by:
Stephen Smalley <sds@tycho.nsa.gov>
-
- May 14, 2014
-
-
Stephen Smalley authored
Address recent installd denials resulting from the recent tightening of installd access to /data file types, including: avc: denied { unlink } for name="._playmusicid" dev="mmcblk0p30" ino=1038393 scontext=u:r:installd:s0 tcontext=u:object_r:media_rw_data_file:s0 tclass=file avc: denied { search } for pid=195 comm="installd" name="app-asec" dev="mmcblk0p28" ino=578225 scontext=u:r:installd:s0 tcontext=u:object_r:asec_image_file:s0 tclass=dir Change-Id: I957738139678699949da9ad09d3bddb91605f8cf Signed-off-by:
Stephen Smalley <sds@tycho.nsa.gov>
-
- May 12, 2014
-
-
Stephen Smalley authored
Change-Id: I29202292a78f0d2ae3b5da235c1783298f14bed8 Signed-off-by:
Stephen Smalley <sds@tycho.nsa.gov>
-
Stephen Smalley authored
installd creates /data/.layout_version. Introduce a separate type for this file (and any other file created by installd under a directory labeled system_data_file) so that we can allow create/write access by installd without allowing it to any system data files created by other processes. This prevents installd from overwriting other system data files, and ensure that any files it creates will require explicit rules in order to access. Change-Id: Id04e49cd571390d18792949c8b2b13b1ac59c016 Signed-off-by:
Stephen Smalley <sds@tycho.nsa.gov>
-
Stephen Smalley authored
Change-Id: I29202292a78f0d2ae3b5da235c1783298f14bed8 Signed-off-by:
Stephen Smalley <sds@tycho.nsa.gov>
-
- May 09, 2014
-
-
Stephen Smalley authored
Drop rules on data_file_type attribute and replace with rules on specific types, coalescing with existing rules where appropriate. Reorganize the rules and try to annotate the reason for the different rules. Change-Id: I2d07e7c276a9c29677f67db0ebecfc537c084965 Signed-off-by:
Stephen Smalley <sds@tycho.nsa.gov>
-
Nick Kralevich authored
91a4f8d4 created system_app_data_file, and assigned all system_apps to use this file type. For testing purposes, our automated testing infrastructure sideloads shared system UID apks. Installd does not have permission to create the lib symlink, so the installation fails. Allow installd to create this symlink. repro: adb install AppLaunch.apk 276 KB/s (8414 bytes in 0.029s) pkg: /data/local/tmp/AppLaunch.apk Failure [INSTALL_FAILED_INTERNAL_ERROR] logcat: 05-08 23:16:36.336 605 637 I PackageManager: Copying native libraries to /data/app-lib/vmdl609237490 05-08 23:16:36.338 605 637 W asset : Installing empty resources in to table 0x5e89a368 05-08 23:16:36.359 193 193 W installd: type=1400 audit(0.0:29): avc: denied { create } for name="lib" scontext=u:r:installd:s0 tcontext=u:object_r:system_app_data_file:s0 tclass=lnk_file 05-08 23:16:36.363 193 193 E installd: couldn't symlink directory '/data/data/com.android.tests.applaunch/lib' -> '/data/app-lib/com.android.tests.applaunch-1': Permission denied 05-08 23:16:36.364 605 637 W PackageManager: Failed linking native library dir (user=0) 05-08 23:16:36.364 605 637 W PackageManager: Package couldn't be installed in /data/app/com.android.tests.applaunch-1.apk Bug: 14659632 Change-Id: Iac4890302cd070aa3f71553af217f343ed7b8bc3
-
Stephen Smalley authored
This was originally to limit the ability to relabel files to particular types given the ability of all domains to relabelfrom unlabeled files. Since the latter was removed by Ied84f8b4b1a0896c1b9f7d783b7463ce09d4807b, this no longer serves any purpose. Change-Id: Ic41e94437188183f15ed8b3732c6cd5918da3397 Signed-off-by:
Stephen Smalley <sds@tycho.nsa.gov>
-
Nick Kralevich authored
91a4f8d4 created system_app_data_file, and assigned all system_apps to use this file type. For testing purposes, our automated testing infrastructure sideloads shared system UID apks. Installd does not have permission to create the lib symlink, so the installation fails. Allow installd to create this symlink. repro: adb install AppLaunch.apk 276 KB/s (8414 bytes in 0.029s) pkg: /data/local/tmp/AppLaunch.apk Failure [INSTALL_FAILED_INTERNAL_ERROR] logcat: 05-08 23:16:36.336 605 637 I PackageManager: Copying native libraries to /data/app-lib/vmdl609237490 05-08 23:16:36.338 605 637 W asset : Installing empty resources in to table 0x5e89a368 05-08 23:16:36.359 193 193 W installd: type=1400 audit(0.0:29): avc: denied { create } for name="lib" scontext=u:r:installd:s0 tcontext=u:object_r:system_app_data_file:s0 tclass=lnk_file 05-08 23:16:36.363 193 193 E installd: couldn't symlink directory '/data/data/com.android.tests.applaunch/lib' -> '/data/app-lib/com.android.tests.applaunch-1': Permission denied 05-08 23:16:36.364 605 637 W PackageManager: Failed linking native library dir (user=0) 05-08 23:16:36.364 605 637 W PackageManager: Package couldn't be installed in /data/app/com.android.tests.applaunch-1.apk Bug: 14659632 Change-Id: Iac4890302cd070aa3f71553af217f343ed7b8bc3
-
Nick Kralevich authored
Only keystore itself should be reading / writing it's files. Remove keystore file access from other SELinux domains, including unconfined. Add neverallow rules to protect against regressions. Allow init limited access to recurse into keystore's directory. Change-Id: I0bb5de7804f4314997c16fac18507933014bcadf
-
- May 07, 2014
-
-
Stephen Smalley authored
We were using system_data_file for the /data/data directories of system UID apps to match the DAC ownership of system UID shared with other system files. However, we are seeing cases where files created in these directories must be writable by other apps, and we would like to avoid allowing write to system data files outside of these directories. So introduce a separate system_app_data_file type and assign it. This should also help protect against arbitrary writes by system UID apps to other system data directories. This resolves the following denial when cropping or taking a user photo for secondary users: avc: denied { write } for path="/data/data/com.android.settings/cache/TakeEditUserPhoto2.jpg" dev="mmcblk0p28" ino=82120 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:system_data_file:s0 tclass=file avc: denied { write } for path="/data/data/com.android.settings/cache/CropEditUserPhoto.jpg" dev="mmcblk0p30" ino=602905 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:system_data_file:s0 tclass=file Bug: 14604553 Change-Id: Ifa10e3283b07f6bd6ecc16eceeb663edfd756cea Signed-off-by:
Stephen Smalley <sds@tycho.nsa.gov>
-
- Apr 26, 2014
-
-
Jeff Sharkey authored
avc: denied { search } for pid=118 comm="installd" name="/" dev="mmcblk0p12" ino=2 scontext=u:r:installd:s0 tcontext=u:object_r:oemfs:s0 tclass=dir Bug: 13340779 Change-Id: Id42f45080ba2c736921691dadfdfa429cf006663
-
- Apr 09, 2014
-
-
Stephen Smalley authored
I9b8e59e3bd7df8a1bf60fa7ffd376a24ba0eb42f added a profiles subdirectory to /data/dalvik-cache with files that must be app-writable. As a result, we have denials such as: W/Profiler( 3328): type=1400 audit(0.0:199): avc: denied { write } for name="com.google.android.setupwizard" dev="mmcblk0p28" ino=106067 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:dalvikcache_data_file:s0 tclass=file W/Profiler( 3328): type=1300 audit(0.0:199): arch=40000028 syscall=322 per=800000 success=yes exit=33 a0=ffffff9c a1=b8362708 a2=20002 a3=0 items=1 ppid=194 auid=4294967295 uid=10019 gid=10019 euid=10019 suid=10019 fsuid=10019 egid=10019 sgid=10019 fsgid=10019 tty=(none) ses=4294967295 exe="/system/bin/app_process" subj=u:r:untrusted_app:s0 key=(null) W/auditd ( 286): type=1307 audit(0.0:199): cwd="/" W/auditd ( 286): type=1302 audit(0.0:199): item=0 name="/data/dalvik-cache/profiles/com.google.android.setupwizard" inode=106067 dev=b3:1c mode=0100664 ouid=1012 ogid=50019 rdev=00:00 obj=u:object_r:dalvikcache_data_file:s0 We do not want to allow untrusted app domains to write to the existing type on other /data/dalvik-cache files as that could be used for code injection into another app domain, the zygote or the system_server. So define a new type for this subdirectory. The restorecon_recursive /data in init.rc will fix the labeling on devices that already have a profiles directory created. For correct labeling on first creation, we also need a separate change to installd under the same change id. Bug: 13927667 Change-Id: I4857d031f9e7e60d48b8c72fcb22a81b3a2ebaaa Signed-off-by:
Stephen Smalley <sds@tycho.nsa.gov>
-
- Apr 02, 2014
-
-
Stephen Smalley authored
Old Android kernels (e.g. kernel/goldfish android-2.6.29 commit 2bda29) fell back to a CAP_SYS_ADMIN check even before checking uids if the cgroup subsystem did not define its own can_attach handler. This doesn't appear to have ever been the case of mainline, and is not true of the 3.4 Android kernels. So we no longer need to dontaudit sys_admin to avoid log noise. Change-Id: I3822600a06c242764a94f9b67d9fcd6f599d3453 Signed-off-by:
Stephen Smalley <sds@tycho.nsa.gov>
-
- Mar 19, 2014
-
-
Stephen Smalley authored
Ability to relabel from/to any of the types that can be assigned to /data/data directories as per seapp_contexts type= assignments. Change-Id: I05e8b438950ddb908e46c9168ea6ee601e6d674f Signed-off-by:
Stephen Smalley <sds@tycho.nsa.gov>
-
- Mar 14, 2014
-
-
Stephen Smalley authored
This appears to have been created to allow untrusted_app to access DownloadProvider cache files without needing to allow open access to platform_app_data_file. Now that platform_app_data_file is gone, there is no benefit to having this type. Retain a typealias for download_file to app_data_file until restorecon /data/data support is in place to provide compatibility. This change depends on: https://android-review.googlesource.com/#/c/87801/ Change-Id: Iab3c99d7d5448bdaa5c1e03a98fb6163804e1ec4 Signed-off-by:
Stephen Smalley <sds@tycho.nsa.gov>
-