Home | History | Annotate | Download | only in public
      1 # Life begins with the kernel.
      2 type kernel, domain, mlstrustedsubject;
      3 
      4 allow kernel self:global_capability_class_set sys_nice;
      5 
      6 # Root fs.
      7 r_dir_file(kernel, rootfs)
      8 allow kernel proc_cmdline:file r_file_perms;
      9 
     10 # Get SELinux enforcing status.
     11 allow kernel selinuxfs:dir r_dir_perms;
     12 allow kernel selinuxfs:file r_file_perms;
     13 
     14 # Get file contexts during first stage
     15 allow kernel file_contexts_file:file r_file_perms;
     16 
     17 # Allow init relabel itself.
     18 allow kernel rootfs:file relabelfrom;
     19 allow kernel init_exec:file relabelto;
     20 # TODO: investigate why we need this.
     21 allow kernel init:process share;
     22 
     23 # cgroup filesystem initialization prior to setting the cgroup root directory label.
     24 allow kernel unlabeled:dir search;
     25 
     26 # Mount usbfs.
     27 allow kernel usbfs:filesystem mount;
     28 allow kernel usbfs:dir search;
     29 
     30 # Initial setenforce by init prior to switching to init domain.
     31 # We use dontaudit instead of allow to prevent a kernel spawned userspace
     32 # process from turning off SELinux once enabled.
     33 dontaudit kernel self:security setenforce;
     34 
     35 # Write to /proc/1/oom_adj prior to switching to init domain.
     36 allow kernel self:global_capability_class_set sys_resource;
     37 
     38 # Init reboot before switching selinux domains under certain error
     39 # conditions. Allow it.
     40 # As part of rebooting, init writes "u" to /proc/sysrq-trigger to
     41 # remount filesystems read-only. /data is not mounted at this point,
     42 # so we could ignore this. For now, we allow it.
     43 allow kernel self:global_capability_class_set sys_boot;
     44 allow kernel proc_sysrq:file w_file_perms;
     45 
     46 # Allow writing to /dev/kmsg which was created prior to loading policy.
     47 allow kernel tmpfs:chr_file write;
     48 
     49 # Set checkreqprot by init.rc prior to switching to init domain.
     50 allow kernel selinuxfs:file write;
     51 allow kernel self:security setcheckreqprot;
     52 
     53 # kernel thread "loop0", used by the loop block device, for ASECs (b/17158723)
     54 allow kernel sdcard_type:file { read write };
     55 
     56 # f_mtp driver accesses files from kernel context.
     57 allow kernel mediaprovider:fd use;
     58 
     59 # Allow the kernel to read OBB files from app directories. (b/17428116)
     60 # Kernel thread "loop0" reads a vold supplied file descriptor.
     61 # Fixes CTS tests:
     62 #  * android.os.storage.cts.StorageManagerTest#testMountAndUnmountObbNormal
     63 #  * android.os.storage.cts.StorageManagerTest#testMountAndUnmountTwoObbs
     64 allow kernel vold:fd use;
     65 allow kernel app_data_file:file read;
     66 allow kernel asec_image_file:file read;
     67 
     68 # Allow reading loop device in update_engine_unittests. (b/28319454)
     69 # and for LTP kernel tests (b/73220071)
     70 userdebug_or_eng(`
     71   allow kernel update_engine_data_file:file read;
     72   allow kernel nativetest_data_file:file { read write };
     73 ')
     74 
     75 # Access to /data/media.
     76 # This should be removed if sdcardfs is modified to alter the secontext for its
     77 # accesses to the underlying FS.
     78 allow kernel media_rw_data_file:dir create_dir_perms;
     79 allow kernel media_rw_data_file:file create_file_perms;
     80 
     81 # Access to /data/misc/vold/virtual_disk.
     82 allow kernel vold_data_file:file read;
     83 
     84 ###
     85 ### neverallow rules
     86 ###
     87 
     88 # The initial task starts in the kernel domain (assigned via
     89 # initial_sid_contexts), but nothing ever transitions to it.
     90 neverallow * kernel:process { transition dyntransition };
     91 
     92 # The kernel domain is never entered via an exec, nor should it
     93 # ever execute a program outside the rootfs without changing to another domain.
     94 # If you encounter an execute_no_trans denial on the kernel domain, then
     95 # possible causes include:
     96 # - The program is a kernel usermodehelper.  In this case, define a domain
     97 #   for the program and domain_auto_trans() to it.
     98 # - You are running an exploit which switched to the init task credentials
     99 #   and is then trying to exec a shell or other program.  You lose!
    100 neverallow kernel *:file { entrypoint execute_no_trans };
    101 
    102 # the kernel should not be accessing files owned by other users.
    103 # Instead of adding dac_{read_search,override}, fix the unix permissions
    104 # on files being accessed.
    105 neverallow kernel self:global_capability_class_set { dac_override dac_read_search };
    106