| # |
| # Apps that run with the system UID, e.g. com.android.system.ui, |
| # com.android.settings. These are not as privileged as the system |
| # server. |
| # |
| type system_app, domain; |
| app_domain(system_app) |
| |
| # Perform binder IPC to any app domain. |
| binder_call(system_app, appdomain) |
| |
| # Read and write system data files. |
| # May want to split into separate types. |
| allow system_app system_data_file:dir create_dir_perms; |
| allow system_app system_data_file:file create_file_perms; |
| |
| # Read wallpaper file. |
| allow system_app wallpaper_file:file r_file_perms; |
| |
| # Write to dalvikcache. |
| allow system_app dalvikcache_data_file:file { write setattr }; |
| |
| # Talk to keystore. |
| unix_socket_connect(system_app, keystore, keystore) |
| |
| # Read SELinux enforcing status. |
| selinux_getenforce(system) |
| selinux_getenforce(system_app) |
| |
| # Settings app reads sdcard for storage stats |
| allow system_app sdcard_type:dir r_dir_perms; |
| |
| bool manage_selinux true; |
| if (manage_selinux) { |
| selinux_manage_policy(system) |
| selinux_manage_policy(system_app) |
| access_kmsg(system) |
| access_kmsg(system_app) |
| } |
| |
| bool manage_mac true; |
| if (manage_mac) { |
| mmac_manage_policy(system) |
| mmac_manage_policy(system_app) |
| access_logcat(system) |
| access_logcat(system_app) |
| } |
| |
| # |
| # System Server aka system_server spawned by zygote. |
| # Most of the framework services run in this process. |
| # |
| type system, domain, mlstrustedsubject; |
| |
| # Child of the zygote. |
| allow system zygote:fd use; |
| allow system zygote:process sigchld; |
| allow system zygote_tmpfs:file read; |
| |
| # system server gets network and bluetooth permissions. |
| net_domain(system) |
| bluetooth_domain(system) |
| |
| # These are the capabilities assigned by the zygote to the |
| # system server. |
| # XXX See if we can remove some of these. |
| allow system self:capability { kill net_bind_service net_broadcast net_admin net_raw sys_module sys_boot sys_nice sys_resource sys_time sys_tty_config }; |
| |
| # Trigger module auto-load. |
| allow system kernel:system module_request; |
| |
| # Use netlink uevent sockets. |
| allow system self:netlink_kobject_uevent_socket *; |
| |
| # Kill apps. |
| allow system appdomain:process { sigkill signal }; |
| |
| # Set scheduling info for apps. |
| allow system appdomain:process { getsched setsched }; |
| allow system mediaserver:process { getsched setsched }; |
| |
| # Read /proc data for apps. |
| allow system appdomain:dir r_dir_perms; |
| allow system appdomain:{ file lnk_file } rw_file_perms; |
| |
| # Read/Write to /proc/net/xt_qtaguid/ctrl and and /dev/xt_qtaguid. |
| allow system qtaguid_proc:file rw_file_perms; |
| allow system qtaguid_device:chr_file rw_file_perms; |
| |
| # WifiWatchdog uses a packet_socket |
| allow system self:packet_socket *; |
| |
| # Notify init of death. |
| allow system init:process sigchld; |
| |
| # 3rd party VPN clients require a tun_socket to be created |
| allow system self:tun_socket create; |
| |
| # Talk to init and various daemons via sockets. |
| unix_socket_connect(system, property, init) |
| unix_socket_connect(system, qemud, qemud) |
| unix_socket_connect(system, installd, installd) |
| unix_socket_connect(system, netd, netd) |
| unix_socket_connect(system, vold, vold) |
| unix_socket_connect(system, zygote, zygote) |
| unix_socket_connect(system, keystore, keystore) |
| unix_socket_connect(system, dbus, dbusd) |
| unix_socket_connect(system, gps, gpsd) |
| unix_socket_connect(system, bluetooth, bluetoothd) |
| unix_socket_connect(system, racoon, racoon) |
| unix_socket_send(system, wpa, wpa) |
| |
| # Communicate over a socket created by surfaceflinger. |
| allow system surfaceflinger:unix_stream_socket { read write setopt }; |
| |
| # Perform Binder IPC. |
| tmpfs_domain(system) |
| binder_use(system) |
| binder_call(system, binderservicedomain) |
| binder_call(system, appdomain) |
| binder_service(system) |
| |
| # Read /proc/pid files for Binder clients. |
| r_dir_file(system, appdomain) |
| r_dir_file(system, mediaserver) |
| allow system appdomain:process getattr; |
| allow system mediaserver:process getattr; |
| |
| # Specify any arguments to zygote. |
| allow system self:zygote *; |
| |
| # Check SELinux permissions. |
| selinux_check_access(system) |
| |
| # XXX Label sysfs files with a specific type? |
| allow system sysfs:file rw_file_perms; |
| allow system sysfs_nfc_power_writable:file rw_file_perms; |
| |
| # Access devices. |
| allow system device:dir r_dir_perms; |
| allow system device:sock_file rw_file_perms; |
| allow system akm_device:chr_file rw_file_perms; |
| allow system accelerometer_device:chr_file rw_file_perms; |
| allow system alarm_device:chr_file rw_file_perms; |
| allow system graphics_device:dir search; |
| allow system graphics_device:chr_file rw_file_perms; |
| allow system input_device:dir r_dir_perms; |
| allow system input_device:chr_file rw_file_perms; |
| allow system tty_device:chr_file rw_file_perms; |
| allow system urandom_device:chr_file rw_file_perms; |
| allow system video_device:chr_file rw_file_perms; |
| allow system qemu_device:chr_file rw_file_perms; |
| |
| # tun device used for 3rd party vpn apps |
| allow system tun_device:chr_file rw_file_perms; |
| |
| # Manage data files. |
| allow system data_file_type:dir create_dir_perms; |
| allow system data_file_type:notdevfile_class_set create_file_perms; |
| |
| # Read /file_contexts. |
| allow system rootfs:file r_file_perms; |
| |
| # Relabel apk files. |
| allow system apk_tmp_file:file { relabelfrom relabelto }; |
| allow system apk_data_file:file { relabelfrom relabelto }; |
| |
| # Relabel wallpaper. |
| allow system system_data_file:file relabelfrom; |
| allow system wallpaper_file:file relabelto; |
| allow system wallpaper_file:file rw_file_perms; |
| |
| # Relabel /data/anr. |
| allow system system_data_file:dir relabelfrom; |
| allow system anr_data_file:dir relabelto; |
| |
| # Property Service write |
| allow system system_prop:property_service set; |
| allow system radio_prop:property_service set; |
| |
| # ctl interface |
| allow system ctl_default_prop:property_service set; |
| |
| # Create a socket for receiving info from wpa. |
| type_transition system wifi_data_file:sock_file system_wpa_socket; |
| allow system system_wpa_socket:sock_file create_file_perms; |
| |
| # Manage cache files. |
| allow system cache_file:dir { relabelfrom create_dir_perms }; |
| allow system cache_file:file { relabelfrom create_file_perms }; |
| |
| # Run system programs, e.g. dexopt. |
| allow system system_file:file x_file_perms; |
| |
| # Allow reading of /proc/pid data for other domains. |
| # XXX dontaudit candidate |
| allow system domain:dir r_dir_perms; |
| allow system domain:file r_file_perms; |
| |
| # LocationManager(e.g, GPS) needs to read and write |
| # to uart driver and ctrl proc entry |
| allow system gps_device:chr_file rw_file_perms; |
| allow system gps_control:file rw_file_perms; |
| |
| # system Read/Write tcp/udp_socket of untrusted_app |
| allow system appdomain:{ tcp_socket udp_socket } { setopt read write }; |
| |
| # Allow abstract socket connection |
| allow system rild:unix_stream_socket connectto; |
| |
| # connect to vpn tunnel |
| allow system mtp:unix_stream_socket { connectto }; |
| |
| # BackupManagerService lets PMS create a data backup file |
| allow system cache_backup_file:file create_file_perms; |
| # Relabel /data/backup |
| allow system backup_data_file:dir { relabelto relabelfrom }; |
| # Relabel /cache/.*\.{data|restore} |
| allow system cache_backup_file:file { relabelto relabelfrom }; |
| # LocalTransport creates and relabels /cache/backup |
| allow system cache_backup_file:dir { relabelto relabelfrom create_dir_perms }; |