system_server.te 8.65 KB
Newer Older
1 2 3 4
#
# System Server aka system_server spawned by zygote.
# Most of the framework services run in this process.
#
5
type system_server, domain, mlstrustedsubject;
6
permissive_or_unconfined(system_server)
7

8 9 10
# Define a type for tmpfs-backed ashmem regions.
tmpfs_domain(system_server)

11 12
# Dalvik Compiler JIT Mapping.
allow system_server self:process execmem;
13 14
allow system_server ashmem_device:chr_file execute;
allow system_server system_server_tmpfs:file execute;
15

16 17 18
# For art.
allow system_server dalvikcache_data_file:file execute;

19 20 21 22 23
# Child of the zygote.
allow system_server zygote:fd use;
allow system_server zygote:process sigchld;
allow system_server zygote_tmpfs:file read;

24 25 26 27
# Needed to close the zygote socket, which involves getopt / getattr
# This should be deleted after b/12061011 is fixed
allow system_server zygote:unix_stream_socket { getopt getattr };

28 29 30
# system server gets network and bluetooth permissions.
net_domain(system_server)
bluetooth_domain(system_server)
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47

# These are the capabilities assigned by the zygote to the
# system server.
allow system_server self:capability {
    kill
    net_admin
    net_bind_service
    net_broadcast
    net_raw
    sys_boot
    sys_module
    sys_nice
    sys_resource
    sys_time
    sys_tty_config
};

48 49
allow system_server self:capability2 block_suspend;

50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
# Triggered by /proc/pid accesses, not allowed.
dontaudit system_server self:capability sys_ptrace;

# Trigger module auto-load.
allow system_server kernel:system module_request;

# Use netlink uevent sockets.
allow system_server self:netlink_kobject_uevent_socket *;

# Kill apps.
allow system_server appdomain:process { sigkill signal };

# Set scheduling info for apps.
allow system_server appdomain:process { getsched setsched };
allow system_server mediaserver:process { getsched setsched };

# Read /proc data for apps.
allow system_server appdomain:dir r_dir_perms;
allow system_server appdomain:{ file lnk_file } rw_file_perms;

# Read/Write to /proc/net/xt_qtaguid/ctrl and and /dev/xt_qtaguid.
allow system_server qtaguid_proc:file rw_file_perms;
allow system_server qtaguid_device:chr_file rw_file_perms;

# Read /sys/kernel/debug/wakeup_sources.
allow system_server debugfs:file r_file_perms;

# WifiWatchdog uses a packet_socket
allow system_server self:packet_socket *;

# 3rd party VPN clients require a tun_socket to be created
allow system_server self:tun_socket create;

# Notify init of death.
allow system_server init:process sigchld;

# Talk to init and various daemons via sockets.
unix_socket_connect(system_server, property, init)
unix_socket_connect(system_server, qemud, qemud)
unix_socket_connect(system_server, installd, installd)
90
unix_socket_connect(system_server, lmkd, lmkd)
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
unix_socket_connect(system_server, netd, netd)
unix_socket_connect(system_server, vold, vold)
unix_socket_connect(system_server, zygote, zygote)
unix_socket_connect(system_server, keystore, keystore)
unix_socket_connect(system_server, gps, gpsd)
unix_socket_connect(system_server, racoon, racoon)
unix_socket_send(system_server, wpa, wpa)

# Communicate over a socket created by surfaceflinger.
allow system_server surfaceflinger:unix_stream_socket { read write setopt };

# Perform Binder IPC.
binder_use(system_server)
binder_call(system_server, binderservicedomain)
binder_call(system_server, appdomain)
106
binder_call(system_server, healthd)
107
binder_call(system_server, dumpstate)
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
binder_service(system_server)

# Read /proc/pid files for Binder clients.
r_dir_file(system_server, appdomain)
r_dir_file(system_server, mediaserver)
allow system_server appdomain:process getattr;
allow system_server mediaserver:process getattr;

# Check SELinux permissions.
selinux_check_access(system_server)

# XXX Label sysfs files with a specific type?
allow system_server sysfs:file rw_file_perms;
allow system_server sysfs_nfc_power_writable:file rw_file_perms;

# Access devices.
allow system_server device:dir r_dir_perms;
allow system_server mdns_socket:sock_file rw_file_perms;
allow system_server alarm_device:chr_file rw_file_perms;
127
allow system_server gpu_device:chr_file rw_file_perms;
128 129 130 131 132 133 134 135
allow system_server graphics_device:dir search;
allow system_server graphics_device:chr_file rw_file_perms;
allow system_server iio_device:chr_file rw_file_perms;
allow system_server input_device:dir r_dir_perms;
allow system_server input_device:chr_file rw_file_perms;
allow system_server tty_device:chr_file rw_file_perms;
allow system_server urandom_device:chr_file rw_file_perms;
allow system_server usbaccessory_device:chr_file rw_file_perms;
136
allow system_server video_device:dir r_dir_perms;
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
allow system_server video_device:chr_file rw_file_perms;
allow system_server qemu_device:chr_file rw_file_perms;
allow system_server adbd_socket:sock_file rw_file_perms;

# tun device used for 3rd party vpn apps
allow system_server tun_device:chr_file rw_file_perms;

# Manage data files.
allow system_server data_file_type:dir create_dir_perms;
allow system_server data_file_type:notdevfile_class_set create_file_perms;

# Read /file_contexts and /data/security/file_contexts
security_access_policy(system_server)

# Relabel apk files.
relabelto_domain(system_server)
allow system_server { apk_tmp_file apk_private_tmp_file }:file { relabelfrom relabelto };
allow system_server { apk_data_file apk_private_data_file }:file { relabelfrom relabelto };

# Relabel wallpaper.
allow system_server system_data_file:file relabelfrom;
allow system_server wallpaper_file:file relabelto;
allow system_server wallpaper_file:file rw_file_perms;

# Relabel /data/anr.
allow system_server system_data_file:dir relabelfrom;
allow system_server anr_data_file:dir relabelto;

# Property Service write
allow system_server system_prop:property_service set;
allow system_server radio_prop:property_service set;
168
allow system_server debug_prop:property_service set;
169
allow system_server powerctl_prop:property_service set;
170 171 172 173

# ctl interface
allow system_server ctl_default_prop:property_service set;

174 175
# Create a socket for receiving info from wpa.
type_transition system_server wifi_data_file:sock_file system_wpa_socket;
176 177
allow system_server system_wpa_socket:sock_file create_file_perms;

178 179 180
# Remove sockets created by wpa_supplicant
allow system_server wpa_socket:sock_file unlink;

181 182 183 184
# Create a socket for connections from debuggerd.
type_transition system_server system_data_file:sock_file system_ndebug_socket "ndebugsocket";
allow system_server system_ndebug_socket:sock_file create_file_perms;

185
# Specify any arguments to zygote.
186 187
allow system_server self:zygote { specifyids specifyrlimits specifyseinfo };

188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229
# Manage cache files.
allow system_server cache_file:dir { relabelfrom create_dir_perms };
allow system_server cache_file:file { relabelfrom create_file_perms };

# Run system programs, e.g. dexopt.
allow system_server system_file:file x_file_perms;

# Allow reading of /proc/pid data for other domains.
# XXX dontaudit candidate
allow system_server domain:dir r_dir_perms;
allow system_server domain:file r_file_perms;

# LocationManager(e.g, GPS) needs to read and write
# to uart driver and ctrl proc entry
allow system_server gps_device:chr_file rw_file_perms;
allow system_server gps_control:file rw_file_perms;

# Allow system_server to use app-created sockets.
allow system_server appdomain:{ tcp_socket udp_socket } { setopt read write };

# Allow abstract socket connection
allow system_server rild:unix_stream_socket connectto;

# connect to vpn tunnel
allow system_server mtp:unix_stream_socket { connectto };

# BackupManagerService lets PMS create a data backup file
allow system_server cache_backup_file:file create_file_perms;
# Relabel /data/backup
allow system_server backup_data_file:dir { relabelto relabelfrom };
# Relabel /cache/.*\.{data|restore}
allow system_server cache_backup_file:file { relabelto relabelfrom };
# LocalTransport creates and relabels /cache/backup
allow system_server cache_backup_file:dir { relabelto relabelfrom create_dir_perms };

# Allow system to talk to usb device
allow system_server usb_device:chr_file rw_file_perms;
allow system_server usb_device:dir r_dir_perms;

# Allow system to talk to sensors
allow system_server sensors_device:chr_file rw_file_perms;

230 231 232
# Read from HW RNG (needed by EntropyMixer).
allow system_server hw_random_device:chr_file r_file_perms;

233 234
# Access to wake locks
allow system_server sysfs_wake_lock:file rw_file_perms;
235 236 237 238 239

# Read and delete files under /dev/fscklogs.
r_dir_file(system_server, fscklogs)
allow system_server fscklogs:dir { write remove_name };
allow system_server fscklogs:file unlink;
240 241 242

# For SELinuxPolicyInstallReceiver
selinux_manage_policy(system_server)
243 244 245 246 247

# For legacy unlabeled userdata on existing devices.
# See discussion of Unlabeled files in domain.te for more information.
# This rule is for dalvikcache mmap/mprotect PROT_EXEC.
allow system_server unlabeled:file execute;