1# Life begins with the kernel. 2type kernel, domain; 3 4# Run /init before we have switched domains. 5allow kernel rootfs:file execute_no_trans; 6 7# setcon to init domain. 8allow kernel self:process setcurrent; 9allow kernel init:process dyntransition; 10 11# The kernel is unconfined. 12unconfined_domain(kernel) 13 14# cgroup filesystem initialization prior to setting the cgroup root directory label. 15allow kernel unlabeled:dir search; 16 17# Mount usbfs. 18allow kernel usbfs:filesystem mount; 19 20# init direct restorecon calls prior to switching to init domain 21# /dev and /dev/socket 22allow kernel { device socket_device }:dir relabelto; 23# /dev/__properties__ 24allow kernel properties_device:file relabelto; 25# /sys 26allow kernel sysfs:{ dir file lnk_file } relabelfrom; 27allow kernel sysfs_type:{ dir file lnk_file } relabelto; 28 29# Initial setenforce by init prior to switching to init domain. 30# We use dontaudit instead of allow to prevent a kernel spawned userspace 31# process from turning off SELinux once enabled. 32dontaudit kernel self:security setenforce; 33 34# Set checkreqprot by init.rc prior to switching to init domain. 35allow kernel self:security setcheckreqprot; 36 37# MTP sync (b/15835289) 38# kernel thread "loop0", used by the loop block device, for ASECs (b/17158723) 39allow kernel sdcard_type:file { read write }; 40 41# Allow the kernel to read OBB files from app directories. (b/17428116) 42# Kernel thread "loop0" reads a vold supplied file descriptor. 43# Fixes CTS tests: 44# * android.os.storage.cts.StorageManagerTest#testMountAndUnmountObbNormal 45# * android.os.storage.cts.StorageManagerTest#testMountAndUnmountTwoObbs 46allow kernel app_data_file:file read; 47 48### 49### neverallow rules 50### 51 52# The initial task starts in the kernel domain (assigned via 53# initial_sid_contexts), but nothing ever transitions to it. 54neverallow domain kernel:process { transition dyntransition }; 55 56# The kernel domain is never entered via an exec, nor should it 57# ever execute a program outside the rootfs without changing to another domain. 58# If you encounter an execute_no_trans denial on the kernel domain, then 59# possible causes include: 60# - The program is a kernel usermodehelper. In this case, define a domain 61# for the program and domain_auto_trans() to it. 62# - You failed to setcon u:r:init:s0 in your init.rc and thus your init 63# program was left in the kernel domain and is now trying to execute 64# some other program. Fix your init.rc file. 65# - You are running an exploit which switched to the init task credentials 66# and is then trying to exec a shell or other program. You lose! 67neverallow kernel { file_type fs_type -rootfs }:file { entrypoint execute_no_trans }; 68