platform_system_sepolicy/prebuilts/api/202404/202404_general_sepolicy.conf
Inseob Kim 4b9929e2fc Finalize prebuilt CTS artifacts
These three files, general_sepolicy.conf / mapping.cil /
plat_sepolicy.cil will be used to test vendor sepolicy's neverallow
rules.

Bug: 330671085
Test: build
Change-Id: I763c9a1e647d614b84c0f7fe3d69affbe64f6153
Merged-In: I763c9a1e647d614b84c0f7fe3d69affbe64f6153
(cherry picked from commit 6f18a17ff8)
2024-04-16 16:18:01 +09:00

83067 lines
2.2 MiB

#line 1 "system/sepolicy/private/security_classes"
# FLASK
#
# Define the security object classes
#
# Classes marked as userspace are classes
# for userspace object managers
class security
class process
class system
class capability
# file-related classes
class filesystem
class file
class anon_inode
class dir
class fd
class lnk_file
class chr_file
class blk_file
class sock_file
class fifo_file
# network-related classes
class socket
class tcp_socket
class udp_socket
class rawip_socket
class node
class netif
class netlink_socket
class packet_socket
class key_socket
class unix_stream_socket
class unix_dgram_socket
# sysv-ipc-related classes
class sem
class msg
class msgq
class shm
class ipc
# extended netlink sockets
class netlink_route_socket
class netlink_tcpdiag_socket
class netlink_nflog_socket
class netlink_xfrm_socket
class netlink_selinux_socket
class netlink_audit_socket
class netlink_dnrt_socket
# IPSec association
class association
# Updated Netlink class for KOBJECT_UEVENT family.
class netlink_kobject_uevent_socket
class appletalk_socket
class packet
# Kernel access key retention
class key
class dccp_socket
class memprotect
# network peer labels
class peer
# Capabilities >= 32
class capability2
# kernel services that need to override task security, e.g. cachefiles
class kernel_service
class tun_socket
class binder
# Updated netlink classes for more recent netlink protocols.
class netlink_iscsi_socket
class netlink_fib_lookup_socket
class netlink_connector_socket
class netlink_netfilter_socket
class netlink_generic_socket
class netlink_scsitransport_socket
class netlink_rdma_socket
class netlink_crypto_socket
# Infiniband
class infiniband_pkey
class infiniband_endport
# Capability checks when on a non-init user namespace
class cap_userns
class cap2_userns
# New socket classes introduced by extended_socket_class policy capability.
# These two were previously mapped to rawip_socket.
class sctp_socket
class icmp_socket
# These were previously mapped to socket.
class ax25_socket
class ipx_socket
class netrom_socket
class atmpvc_socket
class x25_socket
class rose_socket
class decnet_socket
class atmsvc_socket
class rds_socket
class irda_socket
class pppox_socket
class llc_socket
class can_socket
class tipc_socket
class bluetooth_socket
class iucv_socket
class rxrpc_socket
class isdn_socket
class phonet_socket
class ieee802154_socket
class caif_socket
class alg_socket
class nfc_socket
class vsock_socket
class kcm_socket
class qipcrtr_socket
class smc_socket
class process2
class bpf
class xdp_socket
class perf_event
class io_uring
# Introduced in https://github.com/torvalds/linux/commit/59438b46471ae6cdfb761afc8c9beaf1e428a331
class lockdown
# Property service
class property_service # userspace
# Service manager
class service_manager # userspace
# hardware service manager # userspace
class hwservice_manager
# Legacy Keystore key permissions
class keystore_key # userspace
# Keystore 2.0 permissions
class keystore2 # userspace
# Keystore 2.0 key permissions
class keystore2_key # userspace
# Diced permissions
class diced # userspace
class drmservice # userspace
# FLASK
#line 1 "system/sepolicy/private/initial_sids"
# FLASK
#
# Define initial security identifiers
#
sid kernel
sid security
sid unlabeled
sid fs
sid file
sid file_labels
sid init
sid any_socket
sid port
sid netif
sid netmsg
sid node
sid igmp_packet
sid icmp_socket
sid tcp_socket
sid sysctl_modprobe
sid sysctl
sid sysctl_fs
sid sysctl_kernel
sid sysctl_net
sid sysctl_net_unix
sid sysctl_vm
sid sysctl_dev
sid kmod
sid policy
sid scmp_packet
sid devnull
# FLASK
#line 1 "system/sepolicy/private/access_vectors"
#
# Define common prefixes for access vectors
#
# common common_name { permission_name ... }
#
# Define a common prefix for file access vectors.
#
common file
{
ioctl
read
write
create
getattr
setattr
lock
relabelfrom
relabelto
append
map
unlink
link
rename
execute
quotaon
mounton
audit_access
open
execmod
watch
watch_mount
watch_sb
watch_with_perm
watch_reads
}
#
# Define a common prefix for socket access vectors.
#
common socket
{
# inherited from file
ioctl
read
write
create
getattr
setattr
lock
relabelfrom
relabelto
append
map
# socket-specific
bind
connect
listen
accept
getopt
setopt
shutdown
recvfrom
sendto
name_bind
}
#
# Define a common prefix for ipc access vectors.
#
common ipc
{
create
destroy
getattr
setattr
read
write
associate
unix_read
unix_write
}
#
# Define a common for capability access vectors.
#
common cap
{
# The capabilities are defined in include/linux/capability.h
# Capabilities >= 32 are defined in the cap2 common.
# Care should be taken to ensure that these are consistent with
# those definitions. (Order matters)
chown
dac_override
dac_read_search
fowner
fsetid
kill
setgid
setuid
setpcap
linux_immutable
net_bind_service
net_broadcast
net_admin
net_raw
ipc_lock
ipc_owner
sys_module
sys_rawio
sys_chroot
sys_ptrace
sys_pacct
sys_admin
sys_boot
sys_nice
sys_resource
sys_time
sys_tty_config
mknod
lease
audit_write
audit_control
setfcap
}
common cap2
{
mac_override # unused by SELinux
mac_admin
syslog
wake_alarm
block_suspend
audit_read
perfmon
}
#
# Define the access vectors.
#
# class class_name [ inherits common_name ] { permission_name ... }
#
# Define the access vector interpretation for file-related objects.
#
class filesystem
{
mount
remount
unmount
getattr
relabelfrom
relabelto
associate
quotamod
quotaget
watch
}
class dir
inherits file
{
add_name
remove_name
reparent
search
rmdir
}
class file
inherits file
{
execute_no_trans
entrypoint
}
class anon_inode
inherits file
class lnk_file
inherits file
class chr_file
inherits file
{
execute_no_trans
entrypoint
}
class blk_file
inherits file
class sock_file
inherits file
class fifo_file
inherits file
class fd
{
use
}
#
# Define the access vector interpretation for network-related objects.
#
class socket
inherits socket
class tcp_socket
inherits socket
{
node_bind
name_connect
}
class udp_socket
inherits socket
{
node_bind
}
class rawip_socket
inherits socket
{
node_bind
}
class node
{
recvfrom
sendto
}
class netif
{
ingress
egress
}
class netlink_socket
inherits socket
class packet_socket
inherits socket
class key_socket
inherits socket
class unix_stream_socket
inherits socket
{
connectto
}
class unix_dgram_socket
inherits socket
#
# Define the access vector interpretation for process-related objects
#
class process
{
fork
transition
sigchld # commonly granted from child to parent
sigkill # cannot be caught or ignored
sigstop # cannot be caught or ignored
signull # for kill(pid, 0)
signal # all other signals
ptrace
getsched
setsched
getsession
getpgid
setpgid
getcap
setcap
share
getattr
setexec
setfscreate
noatsecure
siginh
setrlimit
rlimitinh
dyntransition
setcurrent
execmem
execstack
execheap
setkeycreate
setsockcreate
getrlimit
}
class process2
{
nnp_transition
nosuid_transition
}
#
# Define the access vector interpretation for ipc-related objects
#
class ipc
inherits ipc
class sem
inherits ipc
class msgq
inherits ipc
{
enqueue
}
class msg
{
send
receive
}
class shm
inherits ipc
{
lock
}
#
# Define the access vector interpretation for the security server.
#
class security
{
compute_av
compute_create
compute_member
check_context
load_policy
compute_relabel
compute_user
setenforce # was avc_toggle in system class
setbool
setsecparam
setcheckreqprot
read_policy
validate_trans
}
#
# Define the access vector interpretation for system operations.
#
class system
{
ipc_info
syslog_read
syslog_mod
syslog_console
module_request
module_load
}
#
# Define the access vector interpretation for controlling capabilities
#
class capability
inherits cap
class capability2
inherits cap2
#
# Extended Netlink classes
#
class netlink_route_socket
inherits socket
{
nlmsg_read
nlmsg_write
nlmsg_readpriv
nlmsg_getneigh
}
class netlink_tcpdiag_socket
inherits socket
{
nlmsg_read
nlmsg_write
}
class netlink_nflog_socket
inherits socket
class netlink_xfrm_socket
inherits socket
{
nlmsg_read
nlmsg_write
}
class netlink_selinux_socket
inherits socket
class netlink_audit_socket
inherits socket
{
nlmsg_read
nlmsg_write
nlmsg_relay
nlmsg_readpriv
nlmsg_tty_audit
}
class netlink_dnrt_socket
inherits socket
# Define the access vector interpretation for controlling
# access to IPSec network data by association
#
class association
{
sendto
recvfrom
setcontext
polmatch
}
# Updated Netlink class for KOBJECT_UEVENT family.
class netlink_kobject_uevent_socket
inherits socket
class appletalk_socket
inherits socket
class packet
{
send
recv
relabelto
forward_in
forward_out
}
class key
{
view
read
write
search
link
setattr
create
}
class dccp_socket
inherits socket
{
node_bind
name_connect
}
class memprotect
{
mmap_zero
}
# network peer labels
class peer
{
recv
}
class kernel_service
{
use_as_override
create_files_as
}
class tun_socket
inherits socket
{
attach_queue
}
class binder
{
impersonate
call
set_context_mgr
transfer
}
class netlink_iscsi_socket
inherits socket
class netlink_fib_lookup_socket
inherits socket
class netlink_connector_socket
inherits socket
class netlink_netfilter_socket
inherits socket
class netlink_generic_socket
inherits socket
class netlink_scsitransport_socket
inherits socket
class netlink_rdma_socket
inherits socket
class netlink_crypto_socket
inherits socket
class infiniband_pkey
{
access
}
class infiniband_endport
{
manage_subnet
}
#
# Define the access vector interpretation for controlling capabilities
# in user namespaces
#
class cap_userns
inherits cap
class cap2_userns
inherits cap2
#
# Define the access vector interpretation for the new socket classes
# enabled by the extended_socket_class policy capability.
#
#
# The next two classes were previously mapped to rawip_socket and therefore
# have the same definition as rawip_socket (until further permissions
# are defined).
#
class sctp_socket
inherits socket
{
node_bind
name_connect
association
}
class icmp_socket
inherits socket
{
node_bind
}
#
# The remaining network socket classes were previously
# mapped to the socket class and therefore have the
# same definition as socket.
#
class ax25_socket
inherits socket
class ipx_socket
inherits socket
class netrom_socket
inherits socket
class atmpvc_socket
inherits socket
class x25_socket
inherits socket
class rose_socket
inherits socket
class decnet_socket
inherits socket
class atmsvc_socket
inherits socket
class rds_socket
inherits socket
class irda_socket
inherits socket
class pppox_socket
inherits socket
class llc_socket
inherits socket
class can_socket
inherits socket
class tipc_socket
inherits socket
class bluetooth_socket
inherits socket
class iucv_socket
inherits socket
class rxrpc_socket
inherits socket
class isdn_socket
inherits socket
class phonet_socket
inherits socket
class ieee802154_socket
inherits socket
class caif_socket
inherits socket
class alg_socket
inherits socket
class nfc_socket
inherits socket
class vsock_socket
inherits socket
class kcm_socket
inherits socket
class qipcrtr_socket
inherits socket
class smc_socket
inherits socket
class bpf
{
map_create
map_read
map_write
prog_load
prog_run
}
class property_service
{
set
}
class service_manager
{
add
find
list
}
class hwservice_manager
{
add
find
list
}
class keystore_key
{
get_state
get
insert
delete
exist
list
reset
password
lock
unlock
is_empty
sign
verify
grant
duplicate
clear_uid
add_auth
user_changed
gen_unique_id
}
class keystore2
{
add_auth
change_password
change_user
clear_ns
clear_uid
delete_all_keys
early_boot_ended
get_attestation_key
get_auth_token
get_last_auth_time
get_state
list
lock
pull_metrics
report_off_body
reset
unlock
}
class keystore2_key
{
convert_storage_key_to_ephemeral
delete
gen_unique_id
get_info
grant
manage_blob
rebind
req_forced_op
update
use
use_dev_id
}
class diced
{
demote
demote_self
derive
get_attestation_chain
use_seal
use_sign
}
class drmservice {
consumeRights
setPlaybackStatus
openDecryptSession
closeDecryptSession
initializeDecryptUnit
decrypt
finalizeDecryptUnit
pread
}
class xdp_socket
inherits socket
class perf_event
{
open
cpu
kernel
tracepoint
read
write
}
class lockdown
{
integrity
confidentiality
}
class io_uring
{
override_creds
sqpoll
cmd
}
#line 1 "system/sepolicy/public/global_macros"
#####################################
# Common groupings of object classes.
#
#####################################
# Common groupings of permissions.
#
#####################################
# Common socket permission sets.
#line 1 "system/sepolicy/public/neverallow_macros"
#
# Common neverallow permissions
#####################################
# neverallow_establish_socket_comms(src, dst)
# neverallow src domain establishing socket connections to dst domain.
#
#line 15
#line 1 "system/sepolicy/private/mls_macros"
########################################
#
# gen_cats(N)
#
# declares categores c0 to c(N-1)
#
#line 10
########################################
#
# gen_sens(N)
#
# declares sensitivites s0 to s(N-1) with dominance
# in increasing numeric order with s0 lowest, s(N-1) highest
#
#line 24
#line 34
########################################
#
# gen_levels(N,M)
#
# levels from s0 to (N-1) with categories c0 to (M-1)
#
#line 45
########################################
#
# Basic level names for system low and high
#
#line 1 "system/sepolicy/private/mls_decl"
#########################################
# MLS declarations
#
# Generate the desired number of sensitivities and categories.
#line 6
# Each sensitivity has a name and zero or more aliases.
#line 6
sensitivity s0;
#line 6
#line 6
#line 6
# Define the ordering of the sensitivity levels (least to greatest)
#line 6
dominance { s0 }
#line 6
category c0;
#line 7
category c1;
#line 7
category c2;
#line 7
category c3;
#line 7
category c4;
#line 7
category c5;
#line 7
category c6;
#line 7
category c7;
#line 7
category c8;
#line 7
category c9;
#line 7
category c10;
#line 7
category c11;
#line 7
category c12;
#line 7
category c13;
#line 7
category c14;
#line 7
category c15;
#line 7
category c16;
#line 7
category c17;
#line 7
category c18;
#line 7
category c19;
#line 7
category c20;
#line 7
category c21;
#line 7
category c22;
#line 7
category c23;
#line 7
category c24;
#line 7
category c25;
#line 7
category c26;
#line 7
category c27;
#line 7
category c28;
#line 7
category c29;
#line 7
category c30;
#line 7
category c31;
#line 7
category c32;
#line 7
category c33;
#line 7
category c34;
#line 7
category c35;
#line 7
category c36;
#line 7
category c37;
#line 7
category c38;
#line 7
category c39;
#line 7
category c40;
#line 7
category c41;
#line 7
category c42;
#line 7
category c43;
#line 7
category c44;
#line 7
category c45;
#line 7
category c46;
#line 7
category c47;
#line 7
category c48;
#line 7
category c49;
#line 7
category c50;
#line 7
category c51;
#line 7
category c52;
#line 7
category c53;
#line 7
category c54;
#line 7
category c55;
#line 7
category c56;
#line 7
category c57;
#line 7
category c58;
#line 7
category c59;
#line 7
category c60;
#line 7
category c61;
#line 7
category c62;
#line 7
category c63;
#line 7
category c64;
#line 7
category c65;
#line 7
category c66;
#line 7
category c67;
#line 7
category c68;
#line 7
category c69;
#line 7
category c70;
#line 7
category c71;
#line 7
category c72;
#line 7
category c73;
#line 7
category c74;
#line 7
category c75;
#line 7
category c76;
#line 7
category c77;
#line 7
category c78;
#line 7
category c79;
#line 7
category c80;
#line 7
category c81;
#line 7
category c82;
#line 7
category c83;
#line 7
category c84;
#line 7
category c85;
#line 7
category c86;
#line 7
category c87;
#line 7
category c88;
#line 7
category c89;
#line 7
category c90;
#line 7
category c91;
#line 7
category c92;
#line 7
category c93;
#line 7
category c94;
#line 7
category c95;
#line 7
category c96;
#line 7
category c97;
#line 7
category c98;
#line 7
category c99;
#line 7
category c100;
#line 7
category c101;
#line 7
category c102;
#line 7
category c103;
#line 7
category c104;
#line 7
category c105;
#line 7
category c106;
#line 7
category c107;
#line 7
category c108;
#line 7
category c109;
#line 7
category c110;
#line 7
category c111;
#line 7
category c112;
#line 7
category c113;
#line 7
category c114;
#line 7
category c115;
#line 7
category c116;
#line 7
category c117;
#line 7
category c118;
#line 7
category c119;
#line 7
category c120;
#line 7
category c121;
#line 7
category c122;
#line 7
category c123;
#line 7
category c124;
#line 7
category c125;
#line 7
category c126;
#line 7
category c127;
#line 7
category c128;
#line 7
category c129;
#line 7
category c130;
#line 7
category c131;
#line 7
category c132;
#line 7
category c133;
#line 7
category c134;
#line 7
category c135;
#line 7
category c136;
#line 7
category c137;
#line 7
category c138;
#line 7
category c139;
#line 7
category c140;
#line 7
category c141;
#line 7
category c142;
#line 7
category c143;
#line 7
category c144;
#line 7
category c145;
#line 7
category c146;
#line 7
category c147;
#line 7
category c148;
#line 7
category c149;
#line 7
category c150;
#line 7
category c151;
#line 7
category c152;
#line 7
category c153;
#line 7
category c154;
#line 7
category c155;
#line 7
category c156;
#line 7
category c157;
#line 7
category c158;
#line 7
category c159;
#line 7
category c160;
#line 7
category c161;
#line 7
category c162;
#line 7
category c163;
#line 7
category c164;
#line 7
category c165;
#line 7
category c166;
#line 7
category c167;
#line 7
category c168;
#line 7
category c169;
#line 7
category c170;
#line 7
category c171;
#line 7
category c172;
#line 7
category c173;
#line 7
category c174;
#line 7
category c175;
#line 7
category c176;
#line 7
category c177;
#line 7
category c178;
#line 7
category c179;
#line 7
category c180;
#line 7
category c181;
#line 7
category c182;
#line 7
category c183;
#line 7
category c184;
#line 7
category c185;
#line 7
category c186;
#line 7
category c187;
#line 7
category c188;
#line 7
category c189;
#line 7
category c190;
#line 7
category c191;
#line 7
category c192;
#line 7
category c193;
#line 7
category c194;
#line 7
category c195;
#line 7
category c196;
#line 7
category c197;
#line 7
category c198;
#line 7
category c199;
#line 7
category c200;
#line 7
category c201;
#line 7
category c202;
#line 7
category c203;
#line 7
category c204;
#line 7
category c205;
#line 7
category c206;
#line 7
category c207;
#line 7
category c208;
#line 7
category c209;
#line 7
category c210;
#line 7
category c211;
#line 7
category c212;
#line 7
category c213;
#line 7
category c214;
#line 7
category c215;
#line 7
category c216;
#line 7
category c217;
#line 7
category c218;
#line 7
category c219;
#line 7
category c220;
#line 7
category c221;
#line 7
category c222;
#line 7
category c223;
#line 7
category c224;
#line 7
category c225;
#line 7
category c226;
#line 7
category c227;
#line 7
category c228;
#line 7
category c229;
#line 7
category c230;
#line 7
category c231;
#line 7
category c232;
#line 7
category c233;
#line 7
category c234;
#line 7
category c235;
#line 7
category c236;
#line 7
category c237;
#line 7
category c238;
#line 7
category c239;
#line 7
category c240;
#line 7
category c241;
#line 7
category c242;
#line 7
category c243;
#line 7
category c244;
#line 7
category c245;
#line 7
category c246;
#line 7
category c247;
#line 7
category c248;
#line 7
category c249;
#line 7
category c250;
#line 7
category c251;
#line 7
category c252;
#line 7
category c253;
#line 7
category c254;
#line 7
category c255;
#line 7
category c256;
#line 7
category c257;
#line 7
category c258;
#line 7
category c259;
#line 7
category c260;
#line 7
category c261;
#line 7
category c262;
#line 7
category c263;
#line 7
category c264;
#line 7
category c265;
#line 7
category c266;
#line 7
category c267;
#line 7
category c268;
#line 7
category c269;
#line 7
category c270;
#line 7
category c271;
#line 7
category c272;
#line 7
category c273;
#line 7
category c274;
#line 7
category c275;
#line 7
category c276;
#line 7
category c277;
#line 7
category c278;
#line 7
category c279;
#line 7
category c280;
#line 7
category c281;
#line 7
category c282;
#line 7
category c283;
#line 7
category c284;
#line 7
category c285;
#line 7
category c286;
#line 7
category c287;
#line 7
category c288;
#line 7
category c289;
#line 7
category c290;
#line 7
category c291;
#line 7
category c292;
#line 7
category c293;
#line 7
category c294;
#line 7
category c295;
#line 7
category c296;
#line 7
category c297;
#line 7
category c298;
#line 7
category c299;
#line 7
category c300;
#line 7
category c301;
#line 7
category c302;
#line 7
category c303;
#line 7
category c304;
#line 7
category c305;
#line 7
category c306;
#line 7
category c307;
#line 7
category c308;
#line 7
category c309;
#line 7
category c310;
#line 7
category c311;
#line 7
category c312;
#line 7
category c313;
#line 7
category c314;
#line 7
category c315;
#line 7
category c316;
#line 7
category c317;
#line 7
category c318;
#line 7
category c319;
#line 7
category c320;
#line 7
category c321;
#line 7
category c322;
#line 7
category c323;
#line 7
category c324;
#line 7
category c325;
#line 7
category c326;
#line 7
category c327;
#line 7
category c328;
#line 7
category c329;
#line 7
category c330;
#line 7
category c331;
#line 7
category c332;
#line 7
category c333;
#line 7
category c334;
#line 7
category c335;
#line 7
category c336;
#line 7
category c337;
#line 7
category c338;
#line 7
category c339;
#line 7
category c340;
#line 7
category c341;
#line 7
category c342;
#line 7
category c343;
#line 7
category c344;
#line 7
category c345;
#line 7
category c346;
#line 7
category c347;
#line 7
category c348;
#line 7
category c349;
#line 7
category c350;
#line 7
category c351;
#line 7
category c352;
#line 7
category c353;
#line 7
category c354;
#line 7
category c355;
#line 7
category c356;
#line 7
category c357;
#line 7
category c358;
#line 7
category c359;
#line 7
category c360;
#line 7
category c361;
#line 7
category c362;
#line 7
category c363;
#line 7
category c364;
#line 7
category c365;
#line 7
category c366;
#line 7
category c367;
#line 7
category c368;
#line 7
category c369;
#line 7
category c370;
#line 7
category c371;
#line 7
category c372;
#line 7
category c373;
#line 7
category c374;
#line 7
category c375;
#line 7
category c376;
#line 7
category c377;
#line 7
category c378;
#line 7
category c379;
#line 7
category c380;
#line 7
category c381;
#line 7
category c382;
#line 7
category c383;
#line 7
category c384;
#line 7
category c385;
#line 7
category c386;
#line 7
category c387;
#line 7
category c388;
#line 7
category c389;
#line 7
category c390;
#line 7
category c391;
#line 7
category c392;
#line 7
category c393;
#line 7
category c394;
#line 7
category c395;
#line 7
category c396;
#line 7
category c397;
#line 7
category c398;
#line 7
category c399;
#line 7
category c400;
#line 7
category c401;
#line 7
category c402;
#line 7
category c403;
#line 7
category c404;
#line 7
category c405;
#line 7
category c406;
#line 7
category c407;
#line 7
category c408;
#line 7
category c409;
#line 7
category c410;
#line 7
category c411;
#line 7
category c412;
#line 7
category c413;
#line 7
category c414;
#line 7
category c415;
#line 7
category c416;
#line 7
category c417;
#line 7
category c418;
#line 7
category c419;
#line 7
category c420;
#line 7
category c421;
#line 7
category c422;
#line 7
category c423;
#line 7
category c424;
#line 7
category c425;
#line 7
category c426;
#line 7
category c427;
#line 7
category c428;
#line 7
category c429;
#line 7
category c430;
#line 7
category c431;
#line 7
category c432;
#line 7
category c433;
#line 7
category c434;
#line 7
category c435;
#line 7
category c436;
#line 7
category c437;
#line 7
category c438;
#line 7
category c439;
#line 7
category c440;
#line 7
category c441;
#line 7
category c442;
#line 7
category c443;
#line 7
category c444;
#line 7
category c445;
#line 7
category c446;
#line 7
category c447;
#line 7
category c448;
#line 7
category c449;
#line 7
category c450;
#line 7
category c451;
#line 7
category c452;
#line 7
category c453;
#line 7
category c454;
#line 7
category c455;
#line 7
category c456;
#line 7
category c457;
#line 7
category c458;
#line 7
category c459;
#line 7
category c460;
#line 7
category c461;
#line 7
category c462;
#line 7
category c463;
#line 7
category c464;
#line 7
category c465;
#line 7
category c466;
#line 7
category c467;
#line 7
category c468;
#line 7
category c469;
#line 7
category c470;
#line 7
category c471;
#line 7
category c472;
#line 7
category c473;
#line 7
category c474;
#line 7
category c475;
#line 7
category c476;
#line 7
category c477;
#line 7
category c478;
#line 7
category c479;
#line 7
category c480;
#line 7
category c481;
#line 7
category c482;
#line 7
category c483;
#line 7
category c484;
#line 7
category c485;
#line 7
category c486;
#line 7
category c487;
#line 7
category c488;
#line 7
category c489;
#line 7
category c490;
#line 7
category c491;
#line 7
category c492;
#line 7
category c493;
#line 7
category c494;
#line 7
category c495;
#line 7
category c496;
#line 7
category c497;
#line 7
category c498;
#line 7
category c499;
#line 7
category c500;
#line 7
category c501;
#line 7
category c502;
#line 7
category c503;
#line 7
category c504;
#line 7
category c505;
#line 7
category c506;
#line 7
category c507;
#line 7
category c508;
#line 7
category c509;
#line 7
category c510;
#line 7
category c511;
#line 7
category c512;
#line 7
category c513;
#line 7
category c514;
#line 7
category c515;
#line 7
category c516;
#line 7
category c517;
#line 7
category c518;
#line 7
category c519;
#line 7
category c520;
#line 7
category c521;
#line 7
category c522;
#line 7
category c523;
#line 7
category c524;
#line 7
category c525;
#line 7
category c526;
#line 7
category c527;
#line 7
category c528;
#line 7
category c529;
#line 7
category c530;
#line 7
category c531;
#line 7
category c532;
#line 7
category c533;
#line 7
category c534;
#line 7
category c535;
#line 7
category c536;
#line 7
category c537;
#line 7
category c538;
#line 7
category c539;
#line 7
category c540;
#line 7
category c541;
#line 7
category c542;
#line 7
category c543;
#line 7
category c544;
#line 7
category c545;
#line 7
category c546;
#line 7
category c547;
#line 7
category c548;
#line 7
category c549;
#line 7
category c550;
#line 7
category c551;
#line 7
category c552;
#line 7
category c553;
#line 7
category c554;
#line 7
category c555;
#line 7
category c556;
#line 7
category c557;
#line 7
category c558;
#line 7
category c559;
#line 7
category c560;
#line 7
category c561;
#line 7
category c562;
#line 7
category c563;
#line 7
category c564;
#line 7
category c565;
#line 7
category c566;
#line 7
category c567;
#line 7
category c568;
#line 7
category c569;
#line 7
category c570;
#line 7
category c571;
#line 7
category c572;
#line 7
category c573;
#line 7
category c574;
#line 7
category c575;
#line 7
category c576;
#line 7
category c577;
#line 7
category c578;
#line 7
category c579;
#line 7
category c580;
#line 7
category c581;
#line 7
category c582;
#line 7
category c583;
#line 7
category c584;
#line 7
category c585;
#line 7
category c586;
#line 7
category c587;
#line 7
category c588;
#line 7
category c589;
#line 7
category c590;
#line 7
category c591;
#line 7
category c592;
#line 7
category c593;
#line 7
category c594;
#line 7
category c595;
#line 7
category c596;
#line 7
category c597;
#line 7
category c598;
#line 7
category c599;
#line 7
category c600;
#line 7
category c601;
#line 7
category c602;
#line 7
category c603;
#line 7
category c604;
#line 7
category c605;
#line 7
category c606;
#line 7
category c607;
#line 7
category c608;
#line 7
category c609;
#line 7
category c610;
#line 7
category c611;
#line 7
category c612;
#line 7
category c613;
#line 7
category c614;
#line 7
category c615;
#line 7
category c616;
#line 7
category c617;
#line 7
category c618;
#line 7
category c619;
#line 7
category c620;
#line 7
category c621;
#line 7
category c622;
#line 7
category c623;
#line 7
category c624;
#line 7
category c625;
#line 7
category c626;
#line 7
category c627;
#line 7
category c628;
#line 7
category c629;
#line 7
category c630;
#line 7
category c631;
#line 7
category c632;
#line 7
category c633;
#line 7
category c634;
#line 7
category c635;
#line 7
category c636;
#line 7
category c637;
#line 7
category c638;
#line 7
category c639;
#line 7
category c640;
#line 7
category c641;
#line 7
category c642;
#line 7
category c643;
#line 7
category c644;
#line 7
category c645;
#line 7
category c646;
#line 7
category c647;
#line 7
category c648;
#line 7
category c649;
#line 7
category c650;
#line 7
category c651;
#line 7
category c652;
#line 7
category c653;
#line 7
category c654;
#line 7
category c655;
#line 7
category c656;
#line 7
category c657;
#line 7
category c658;
#line 7
category c659;
#line 7
category c660;
#line 7
category c661;
#line 7
category c662;
#line 7
category c663;
#line 7
category c664;
#line 7
category c665;
#line 7
category c666;
#line 7
category c667;
#line 7
category c668;
#line 7
category c669;
#line 7
category c670;
#line 7
category c671;
#line 7
category c672;
#line 7
category c673;
#line 7
category c674;
#line 7
category c675;
#line 7
category c676;
#line 7
category c677;
#line 7
category c678;
#line 7
category c679;
#line 7
category c680;
#line 7
category c681;
#line 7
category c682;
#line 7
category c683;
#line 7
category c684;
#line 7
category c685;
#line 7
category c686;
#line 7
category c687;
#line 7
category c688;
#line 7
category c689;
#line 7
category c690;
#line 7
category c691;
#line 7
category c692;
#line 7
category c693;
#line 7
category c694;
#line 7
category c695;
#line 7
category c696;
#line 7
category c697;
#line 7
category c698;
#line 7
category c699;
#line 7
category c700;
#line 7
category c701;
#line 7
category c702;
#line 7
category c703;
#line 7
category c704;
#line 7
category c705;
#line 7
category c706;
#line 7
category c707;
#line 7
category c708;
#line 7
category c709;
#line 7
category c710;
#line 7
category c711;
#line 7
category c712;
#line 7
category c713;
#line 7
category c714;
#line 7
category c715;
#line 7
category c716;
#line 7
category c717;
#line 7
category c718;
#line 7
category c719;
#line 7
category c720;
#line 7
category c721;
#line 7
category c722;
#line 7
category c723;
#line 7
category c724;
#line 7
category c725;
#line 7
category c726;
#line 7
category c727;
#line 7
category c728;
#line 7
category c729;
#line 7
category c730;
#line 7
category c731;
#line 7
category c732;
#line 7
category c733;
#line 7
category c734;
#line 7
category c735;
#line 7
category c736;
#line 7
category c737;
#line 7
category c738;
#line 7
category c739;
#line 7
category c740;
#line 7
category c741;
#line 7
category c742;
#line 7
category c743;
#line 7
category c744;
#line 7
category c745;
#line 7
category c746;
#line 7
category c747;
#line 7
category c748;
#line 7
category c749;
#line 7
category c750;
#line 7
category c751;
#line 7
category c752;
#line 7
category c753;
#line 7
category c754;
#line 7
category c755;
#line 7
category c756;
#line 7
category c757;
#line 7
category c758;
#line 7
category c759;
#line 7
category c760;
#line 7
category c761;
#line 7
category c762;
#line 7
category c763;
#line 7
category c764;
#line 7
category c765;
#line 7
category c766;
#line 7
category c767;
#line 7
category c768;
#line 7
category c769;
#line 7
category c770;
#line 7
category c771;
#line 7
category c772;
#line 7
category c773;
#line 7
category c774;
#line 7
category c775;
#line 7
category c776;
#line 7
category c777;
#line 7
category c778;
#line 7
category c779;
#line 7
category c780;
#line 7
category c781;
#line 7
category c782;
#line 7
category c783;
#line 7
category c784;
#line 7
category c785;
#line 7
category c786;
#line 7
category c787;
#line 7
category c788;
#line 7
category c789;
#line 7
category c790;
#line 7
category c791;
#line 7
category c792;
#line 7
category c793;
#line 7
category c794;
#line 7
category c795;
#line 7
category c796;
#line 7
category c797;
#line 7
category c798;
#line 7
category c799;
#line 7
category c800;
#line 7
category c801;
#line 7
category c802;
#line 7
category c803;
#line 7
category c804;
#line 7
category c805;
#line 7
category c806;
#line 7
category c807;
#line 7
category c808;
#line 7
category c809;
#line 7
category c810;
#line 7
category c811;
#line 7
category c812;
#line 7
category c813;
#line 7
category c814;
#line 7
category c815;
#line 7
category c816;
#line 7
category c817;
#line 7
category c818;
#line 7
category c819;
#line 7
category c820;
#line 7
category c821;
#line 7
category c822;
#line 7
category c823;
#line 7
category c824;
#line 7
category c825;
#line 7
category c826;
#line 7
category c827;
#line 7
category c828;
#line 7
category c829;
#line 7
category c830;
#line 7
category c831;
#line 7
category c832;
#line 7
category c833;
#line 7
category c834;
#line 7
category c835;
#line 7
category c836;
#line 7
category c837;
#line 7
category c838;
#line 7
category c839;
#line 7
category c840;
#line 7
category c841;
#line 7
category c842;
#line 7
category c843;
#line 7
category c844;
#line 7
category c845;
#line 7
category c846;
#line 7
category c847;
#line 7
category c848;
#line 7
category c849;
#line 7
category c850;
#line 7
category c851;
#line 7
category c852;
#line 7
category c853;
#line 7
category c854;
#line 7
category c855;
#line 7
category c856;
#line 7
category c857;
#line 7
category c858;
#line 7
category c859;
#line 7
category c860;
#line 7
category c861;
#line 7
category c862;
#line 7
category c863;
#line 7
category c864;
#line 7
category c865;
#line 7
category c866;
#line 7
category c867;
#line 7
category c868;
#line 7
category c869;
#line 7
category c870;
#line 7
category c871;
#line 7
category c872;
#line 7
category c873;
#line 7
category c874;
#line 7
category c875;
#line 7
category c876;
#line 7
category c877;
#line 7
category c878;
#line 7
category c879;
#line 7
category c880;
#line 7
category c881;
#line 7
category c882;
#line 7
category c883;
#line 7
category c884;
#line 7
category c885;
#line 7
category c886;
#line 7
category c887;
#line 7
category c888;
#line 7
category c889;
#line 7
category c890;
#line 7
category c891;
#line 7
category c892;
#line 7
category c893;
#line 7
category c894;
#line 7
category c895;
#line 7
category c896;
#line 7
category c897;
#line 7
category c898;
#line 7
category c899;
#line 7
category c900;
#line 7
category c901;
#line 7
category c902;
#line 7
category c903;
#line 7
category c904;
#line 7
category c905;
#line 7
category c906;
#line 7
category c907;
#line 7
category c908;
#line 7
category c909;
#line 7
category c910;
#line 7
category c911;
#line 7
category c912;
#line 7
category c913;
#line 7
category c914;
#line 7
category c915;
#line 7
category c916;
#line 7
category c917;
#line 7
category c918;
#line 7
category c919;
#line 7
category c920;
#line 7
category c921;
#line 7
category c922;
#line 7
category c923;
#line 7
category c924;
#line 7
category c925;
#line 7
category c926;
#line 7
category c927;
#line 7
category c928;
#line 7
category c929;
#line 7
category c930;
#line 7
category c931;
#line 7
category c932;
#line 7
category c933;
#line 7
category c934;
#line 7
category c935;
#line 7
category c936;
#line 7
category c937;
#line 7
category c938;
#line 7
category c939;
#line 7
category c940;
#line 7
category c941;
#line 7
category c942;
#line 7
category c943;
#line 7
category c944;
#line 7
category c945;
#line 7
category c946;
#line 7
category c947;
#line 7
category c948;
#line 7
category c949;
#line 7
category c950;
#line 7
category c951;
#line 7
category c952;
#line 7
category c953;
#line 7
category c954;
#line 7
category c955;
#line 7
category c956;
#line 7
category c957;
#line 7
category c958;
#line 7
category c959;
#line 7
category c960;
#line 7
category c961;
#line 7
category c962;
#line 7
category c963;
#line 7
category c964;
#line 7
category c965;
#line 7
category c966;
#line 7
category c967;
#line 7
category c968;
#line 7
category c969;
#line 7
category c970;
#line 7
category c971;
#line 7
category c972;
#line 7
category c973;
#line 7
category c974;
#line 7
category c975;
#line 7
category c976;
#line 7
category c977;
#line 7
category c978;
#line 7
category c979;
#line 7
category c980;
#line 7
category c981;
#line 7
category c982;
#line 7
category c983;
#line 7
category c984;
#line 7
category c985;
#line 7
category c986;
#line 7
category c987;
#line 7
category c988;
#line 7
category c989;
#line 7
category c990;
#line 7
category c991;
#line 7
category c992;
#line 7
category c993;
#line 7
category c994;
#line 7
category c995;
#line 7
category c996;
#line 7
category c997;
#line 7
category c998;
#line 7
category c999;
#line 7
category c1000;
#line 7
category c1001;
#line 7
category c1002;
#line 7
category c1003;
#line 7
category c1004;
#line 7
category c1005;
#line 7
category c1006;
#line 7
category c1007;
#line 7
category c1008;
#line 7
category c1009;
#line 7
category c1010;
#line 7
category c1011;
#line 7
category c1012;
#line 7
category c1013;
#line 7
category c1014;
#line 7
category c1015;
#line 7
category c1016;
#line 7
category c1017;
#line 7
category c1018;
#line 7
category c1019;
#line 7
category c1020;
#line 7
category c1021;
#line 7
category c1022;
#line 7
category c1023;
#line 7
# Generate level definitions for each sensitivity and category.
level s0:c0.c1023;
#line 10
#line 1 "system/sepolicy/private/mls"
#################################################
# MLS policy constraints
#
#
# Process constraints
#
# Process transition: Require equivalence unless the subject is trusted.
mlsconstrain process { transition dyntransition }
((h1 eq h2 and l1 eq l2) or t1 == mlstrustedsubject);
# Process read operations: No read up unless trusted.
mlsconstrain process { getsched getsession getpgid getcap getattr ptrace share }
(l1 dom l2 or t1 == mlstrustedsubject);
# Process write operations: Require equivalence unless trusted.
mlsconstrain process { sigkill sigstop signal setsched setpgid setcap setrlimit ptrace share }
(l1 eq l2 or t1 == mlstrustedsubject);
#
# Socket constraints
#
# Create/relabel operations: Subject must be equivalent to object unless
# the subject is trusted. Sockets inherit the range of their creator.
mlsconstrain { socket tcp_socket udp_socket rawip_socket netlink_socket packet_socket key_socket unix_stream_socket unix_dgram_socket appletalk_socket netlink_route_socket netlink_tcpdiag_socket netlink_nflog_socket netlink_xfrm_socket netlink_selinux_socket netlink_audit_socket netlink_dnrt_socket netlink_kobject_uevent_socket tun_socket netlink_iscsi_socket netlink_fib_lookup_socket netlink_connector_socket netlink_netfilter_socket netlink_generic_socket netlink_scsitransport_socket netlink_rdma_socket netlink_crypto_socket sctp_socket icmp_socket ax25_socket ipx_socket netrom_socket atmpvc_socket x25_socket rose_socket decnet_socket atmsvc_socket rds_socket irda_socket pppox_socket llc_socket can_socket tipc_socket bluetooth_socket iucv_socket rxrpc_socket isdn_socket phonet_socket ieee802154_socket caif_socket alg_socket nfc_socket vsock_socket kcm_socket qipcrtr_socket smc_socket xdp_socket } { create relabelfrom relabelto }
((h1 eq h2 and l1 eq l2) or t1 == mlstrustedsubject);
# Datagram send: Sender must be equivalent to the receiver unless one of them
# is trusted.
mlsconstrain unix_dgram_socket { sendto }
(l1 eq l2 or t1 == mlstrustedsubject or t2 == mlstrustedsubject);
# Stream connect: Client must be equivalent to server unless one of them
# is trusted.
mlsconstrain unix_stream_socket { connectto }
(l1 eq l2 or t1 == mlstrustedsubject or t2 == mlstrustedsubject);
#
# Directory/file constraints
#
# Create/relabel operations: Subject must be equivalent to object unless
# the subject is trusted. Also, files should always be single-level.
# Do NOT exempt mlstrustedobject types from this constraint.
mlsconstrain { dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } { create relabelfrom relabelto }
(l2 eq h2 and (l1 eq l2 or t1 == mlstrustedsubject));
#
# Userfaultfd constraints
#
# To enforce that anonymous inodes are self contained in the application's process.
mlsconstrain anon_inode { ioctl read write create getattr setattr lock relabelfrom relabelto append map unlink link rename execute open execmod }
(l1 eq l2);
#
# Constraints for app data files only.
#
# Only constrain open, not read/write, so already open fds can be used.
# Also constrain other forms of manipulation, e.g. chmod/chown, unlink, rename, etc.
# Subject must dominate object unless the subject is trusted.
mlsconstrain dir { open search getattr setattr rename add_name remove_name reparent rmdir }
(t2 != app_data_file_type or l1 dom l2 or t1 == mlstrustedsubject);
mlsconstrain { file sock_file } { open setattr unlink link rename }
( (t2 != app_data_file_type and t2 != appdomain_tmpfs) or l1 dom l2 or t1 == mlstrustedsubject);
# For symlinks in app data files, require equivalence in order to manipulate or follow (read).
mlsconstrain { lnk_file } { open setattr unlink link rename read }
( (t2 != app_data_file_type or t2 == privapp_data_file) or l1 eq l2 or t1 == mlstrustedsubject);
# But for priv_app_data_file, continue to use dominance for symlinks because dynamite relies on this.
# TODO: Migrate to equivalence when it's no longer needed.
mlsconstrain { lnk_file } { open setattr unlink link rename read }
( (t2 != privapp_data_file and t2 != appdomain_tmpfs) or l1 dom l2 or t1 == mlstrustedsubject);
#
# Constraints for file types other than app data files.
#
# Read operations: Subject must dominate object unless the subject
# or the object is trusted.
mlsconstrain dir { read getattr search }
(t2 == app_data_file_type or l1 dom l2 or t1 == mlstrustedsubject or t2 == mlstrustedobject
or (t1 == mlsvendorcompat and (t2 == system_data_file or t2 == user_profile_root_file) ) );
mlsconstrain { file lnk_file sock_file chr_file blk_file } { read getattr execute }
(t2 == app_data_file_type or t2 == appdomain_tmpfs or l1 dom l2 or t1 == mlstrustedsubject or t2 == mlstrustedobject);
# Write operations: Subject must be equivalent to the object unless the
# subject or the object is trusted.
mlsconstrain dir { write setattr rename add_name remove_name reparent rmdir }
(t2 == app_data_file_type or l1 eq l2 or t1 == mlstrustedsubject or t2 == mlstrustedobject);
mlsconstrain { file lnk_file sock_file chr_file blk_file } { write setattr append unlink link rename }
(t2 == app_data_file_type or t2 == appdomain_tmpfs or l1 eq l2 or t1 == mlstrustedsubject or t2 == mlstrustedobject);
# Special case for FIFOs.
# These can be unnamed pipes, in which case they will be labeled with the
# creating process' label. Thus we also have an exemption when the "object"
# is a domain type, so that processes can communicate via unnamed pipes
# passed by binder or local socket IPC.
mlsconstrain fifo_file { read getattr }
(l1 dom l2 or t1 == mlstrustedsubject or t2 == mlstrustedobject or t2 == domain);
mlsconstrain fifo_file { write setattr append unlink link rename }
(l1 eq l2 or t1 == mlstrustedsubject or t2 == mlstrustedobject or t2 == domain);
#
# Binder IPC constraints
#
# Presently commented out, as apps are expected to call one another.
# This would only make sense if apps were assigned categories
# based on allowable communications rather than per-app categories.
#mlsconstrain binder call
# (l1 eq l2 or t1 == mlstrustedsubject or t2 == mlstrustedsubject);
#line 1 "system/sepolicy/private/policy_capabilities"
# Enable new networking controls.
policycap network_peer_controls;
# Enable open permission check.
policycap open_perms;
# Enable separate security classes for
# all network address families previously
# mapped to the socket class and for
# ICMP and SCTP sockets previously mapped
# to the rawip_socket class.
policycap extended_socket_class;
# Enable NoNewPrivileges support. Requires libsepol 2.7+
# and kernel 4.14 (estimated).
#
# Checks enabled;
# process2: nnp_transition, nosuid_transition
#
policycap nnp_nosuid_transition;
#line 1 "system/sepolicy/flagging/te_macros"
####################################
# is_flag_enabled(flag, rules)
# SELinux rules which apply only if given feature is turned on
####################################
# is_flag_disabled(flag, rules)
# SELinux rules which apply only if given feature is turned off
#line 1 "system/sepolicy/public/te_macros"
#####################################
# domain_trans(olddomain, type, newdomain)
# Allow a transition from olddomain to newdomain
# upon executing a file labeled with type.
# This only allows the transition; it does not
# cause it to occur automatically - use domain_auto_trans
# if that is what you want.
#
#line 21
#####################################
# domain_auto_trans(olddomain, type, newdomain)
# Automatically transition from olddomain to newdomain
# upon executing a file labeled with type.
#
#line 33
#####################################
# file_type_trans(domain, dir_type, file_type)
# Allow domain to create a file labeled file_type in a
# directory labeled dir_type.
# This only allows the transition; it does not
# cause it to occur automatically - use file_type_auto_trans
# if that is what you want.
#
#line 49
#####################################
# file_type_auto_trans(domain, dir_type, file_type)
# Automatically label new files with file_type when
# they are created by domain in directories labeled dir_type.
#
#line 62
#####################################
# r_dir_file(domain, type)
# Allow the specified domain to read directories, files
# and symbolic links of the specified type.
#line 71
#####################################
# tmpfs_domain(domain)
# Allow access to a unique type for this domain when creating tmpfs / ashmem files.
#line 79
# pdx macros for IPC. pdx is a high-level name which contains transport-specific
# rules from underlying transport (e.g. UDS-based implementation).
#####################################
# pdx_service_attributes(service)
# Defines type attribute used to identify various service-related types.
#line 92
#####################################
# pdx_service_socket_types(service, endpoint_dir_t)
# Define types for endpoint and channel sockets.
#line 105
#####################################
# pdx_server(server_domain, service)
#line 124
#####################################
# pdx_connect(client, service)
#line 134
#####################################
# pdx_use(client, service)
#line 149
#####################################
# pdx_client(client, service)
#line 156
#####################################
# init_daemon_domain(domain)
# Set up a transition from init to the daemon domain
# upon executing its binary.
#line 164
####################################
# userfaultfd_use(domain)
# Allow domain to create/use userfaultfd.
#line 179
####################################
# virtualizationservice_use(domain)
# Allow domain to create and communicate with a virtual machine using
# virtualizationservice and virtualizationmanager.
#line 204
#####################################
# app_domain(domain)
# Allow a base set of permissions required for all apps.
#line 226
#####################################
# untrusted_app_domain(domain)
# Allow a base set of permissions required for all untrusted apps.
#line 233
#####################################
# isolated_app_domain(domain)
# Allow a base set of permissions required for all isolated apps.
#line 240
#####################################
# net_domain(domain)
# Allow a base set of permissions required for network access.
#line 247
#####################################
# bluetooth_domain(domain)
# Allow a base set of permissions required for bluetooth access.
#line 254
#####################################
# hal_attribute(hal_name)
# Add an attribute for hal implementations along with necessary
# restrictions.
#line 276
#####################################
# hal_server_domain(domain, hal_type)
# Allow a base set of permissions required for a domain to offer a
# HAL implementation of the specified type over HwBinder.
#
# For example, default implementation of Foo HAL:
# type hal_foo_default, domain;
# hal_server_domain(hal_foo_default, hal_foo)
#
#line 291
#####################################
# hal_client_domain(domain, hal_type)
# Allow a base set of permissions required for a domain to be a
# client of a HAL of the specified type.
#
# For example, make some_domain a client of Foo HAL:
# hal_client_domain(some_domain, hal_foo)
#
#line 315
#####################################
# passthrough_hal_client_domain(domain, hal_type)
# Allow a base set of permissions required for a domain to be a
# client of a passthrough HAL of the specified type.
#
# For example, make some_domain a client of passthrough Foo HAL:
# passthrough_hal_client_domain(some_domain, hal_foo)
#
#line 333
#####################################
# unix_socket_connect(clientdomain, socket, serverdomain)
# Allow a local socket connection from clientdomain via
# socket to serverdomain.
#
# Note: If you see denial records that distill to the
# following allow rules:
# allow clientdomain property_socket:sock_file write;
# allow clientdomain init:unix_stream_socket connectto;
# allow clientdomain something_prop:property_service set;
#
# This sequence is indicative of attempting to set a property.
# use set_prop(sourcedomain, targetproperty)
#
#line 352
#####################################
# set_prop(sourcedomain, targetproperty)
# Allows source domain to set the
# targetproperty.
#
#line 363
#####################################
# get_prop(sourcedomain, targetproperty)
# Allows source domain to read the
# targetproperty.
#
#line 372
#####################################
# unix_socket_send(clientdomain, socket, serverdomain)
# Allow a local socket send from clientdomain via
# socket to serverdomain.
#line 381
#####################################
# binder_use(domain)
# Allow domain to use Binder IPC.
#line 397
#####################################
# hwbinder_use(domain)
# Allow domain to use HwBinder IPC.
#line 413
#####################################
# vndbinder_use(domain)
# Allow domain to use Binder IPC.
#line 427
#####################################
# binder_call(clientdomain, serverdomain)
# Allow clientdomain to perform binder IPC to serverdomain.
#line 439
#####################################
# binder_service(domain)
# Deprecated. Consider granting the exact permissions required by your service.
#line 446
#####################################
# wakelock_use(domain)
# Allow domain to manage wake locks
#line 468
#####################################
# selinux_check_access(domain)
# Allow domain to check SELinux permissions via selinuxfs.
#line 478
#####################################
# selinux_check_context(domain)
# Allow domain to check SELinux contexts via selinuxfs.
#line 487
#####################################
# create_pty(domain)
# Allow domain to create and use a pty, isolated from any other domain ptys.
#line 506
#####################################
# Non system_app application set
#
#####################################
# Recovery only
# SELinux rules which apply only to recovery mode
#
#####################################
# Not recovery
# SELinux rules which apply only to non-recovery (normal) mode
#
#####################################
# Full TREBLE only
# SELinux rules which apply only to full TREBLE devices
#
#line 534
#####################################
# Not full TREBLE
# SELinux rules which apply only to devices which are not full TREBLE devices
#
#####################################
# enforce_debugfs_restriction
# SELinux rules which apply to devices that enable debugfs restrictions.
# The keyword "cts" is used to insert markers to only CTS test the neverallows
# added by the macro for S-launch devices and newer.
#line 552
#####################################
# no_debugfs_restriction
# SELinux rules which apply to devices that do not have debugfs restrictions in non-user builds.
#####################################
# Compatible property only
# SELinux rules which apply only to devices with compatible property
#
#line 568
#####################################
# Not compatible property
# SELinux rules which apply only to devices without compatible property
#
#####################################
# Userdebug or eng builds
# SELinux rules which apply only to userdebug or eng builds
#
#####################################
# asan builds
# SELinux rules which apply only to asan builds
#
#####################################
# native coverage builds
# SELinux rules which apply only to builds with native coverage
#
#####################################
# Build-time-only test
# SELinux rules which are verified during build, but not as part of *TS testing.
#
####################################
# Fallback crash handling for processes that can't exec crash_dump (e.g. because of seccomp).
#
#line 618
#####################################
# WITH_DEXPREOPT builds
# SELinux rules which apply only when pre-opting.
#
#####################################
# write_logd(domain)
# Ability to write to android log
# daemon via sockets
#line 633
#####################################
# read_logd(domain)
# Ability to run logcat and read from android
# log daemon via sockets
#line 642
#####################################
# read_runtime_log_tags(domain)
# ability to directly map the runtime event log tags
#line 649
#####################################
# control_logd(domain)
# Ability to control
# android log daemon via sockets
#line 659
#####################################
# use_keystore(domain)
# Ability to use keystore.
# Keystore is requires the following permissions
# to call getpidcon.
#line 675
#####################################
# use_credstore(domain)
# Ability to use credstore.
#line 687
###########################################
# use_drmservice(domain)
# Ability to use DrmService which requires
# DrmService to call getpidcon.
#line 697
###########################################
# add_service(domain, service)
# Ability for domain to add a service to service_manager
# and find it. It also creates a neverallow preventing
# others from adding it.
#line 713
###########################################
# add_hwservice(domain, service)
# Ability for domain to add a service to hwservice_manager
# and find it. It also creates a neverallow preventing
# others from adding it.
#line 724
###########################################
# hal_attribute_hwservice(attribute, service)
# Ability for domain to get a service to hwservice_manager
# and find it. It also creates a neverallow preventing
# others from adding it.
#
# Used to pair hal_foo_client with hal_foo_hwservice
#line 743
###########################################
# hal_attribute_service(attribute, service)
# Ability for domain to get a service to service_manager
# and find it. It also creates a neverallow preventing
# others from adding it.
#
# Used to pair hal_foo_client with hal_foo_service
#line 771
###################################
# can_profile_heap(domain)
# Allow processes within the domain to have their heap profiled by central
# heapprofd.
#line 801
###################################
# never_profile_heap(domain)
# Opt out of heap profiling by heapprofd.
#line 809
###################################
# can_profile_perf(domain)
# Allow processes within the domain to be profiled, and have their stacks
# sampled, by traced_perf.
#line 829
###################################
# never_profile_perf(domain)
# Opt out of profiling by traced_perf.
#line 837
###################################
# perfetto_producer(domain)
# Allow processes within the domain to write data to Perfetto.
# When applying this macro, you might need to also allow traced to use the
# producer tmpfs domain, if the producer will be the one creating the shared
# memory.
#line 854
###########################################
# dump_hal(hal_type)
# Ability to dump the hal debug info
#
#line 864
#####################################
# treble_sysprop_neverallow(rules)
# SELinux neverallow rules which enforces the accessibility of each property
# outside the owner.
#
# For devices launching with R or later, exported properties must be explicitly marked as
# "restricted" or "public", depending on the accessibility outside the owner.
# For devices launching with Q or eariler, this neverallow rules can be relaxed with defining
# BUILD_BROKEN_TREBLE_SYSPROP_NEVERALLOW := true on BoardConfig.mk.
# See {partition}_{accessibility}_prop macros below.
#
# CTS uses these rules only for devices launching with R or later.
#
# TODO(b/131162102): deprecate BUILD_BROKEN_TREBLE_SYSPROP_NEVERALLOW
#
#line 886
#####################################
# enforce_sysprop_owner(rules)
# SELinux neverallow rules which enforces the owner of each property.
#
# For devices launching with S or later, all properties must be explicitly marked as one of:
# system_property_type, vendor_property_type, or product_property_type.
# For devices launching with R or eariler, this neverallow rules can be relaxed with defining
# BUILD_BROKEN_ENFORCE_SYSPROP_OWNER := true on BoardConfig.mk.
# See {partition}_{accessibility}_prop macros below.
#
# CTS uses these ules only for devices launching with S or later.
#
#line 905
###########################################
# define_prop(name, owner, scope)
# Define a property with given owner and scope
#
#line 913
###########################################
# system_internal_prop(name)
# Define a /system-owned property used only in /system
# For devices launching with Q or eariler, this restriction can be relaxed with
# BUILD_BROKEN_TREBLE_SYSPROP_NEVERALLOW := true
#
#line 926
###########################################
# system_restricted_prop(name)
# Define a /system-owned property which can't be written outside /system
# For devices launching with Q or eariler, this restriction can be relaxed with
# BUILD_BROKEN_TREBLE_SYSPROP_NEVERALLOW := true
#
#line 939
###########################################
# system_public_prop(name)
# Define a /system-owned property with no restrictions
#
###########################################
# system_vendor_config_prop(name)
# Define a /system-owned property which can only be written by vendor_init
# This is a macro for vendor-specific configuration properties which is meant
# to be set once from vendor_init.
#
#line 957
###########################################
# product_internal_prop(name)
# Define a /product-owned property used only in /product
# For devices launching with Q or eariler, this restriction can be relaxed with
# BUILD_BROKEN_TREBLE_SYSPROP_NEVERALLOW := true
#
#line 970
###########################################
# product_restricted_prop(name)
# Define a /product-owned property which can't be written outside /product
# For devices launching with Q or eariler, this restriction can be relaxed with
# BUILD_BROKEN_TREBLE_SYSPROP_NEVERALLOW := true
#
#line 983
###########################################
# product_public_prop(name)
# Define a /product-owned property with no restrictions
#
###########################################
# vendor_internal_prop(name)
# Define a /vendor-owned property used only in /vendor
# For devices launching with Q or eariler, this restriction can be relaxed with
# BUILD_BROKEN_TREBLE_SYSPROP_NEVERALLOW := true
#
#line 1003
###########################################
# vendor_restricted_prop(name)
# Define a /vendor-owned property which can't be written outside /vendor
# For devices launching with Q or eariler, this restriction can be relaxed with
# BUILD_BROKEN_TREBLE_SYSPROP_NEVERALLOW := true
#
#line 1017
###########################################
# vendor_public_prop(name)
# Define a /vendor-owned property with no restrictions
#
#####################################
# read_fstab(domain)
# Ability to call ReadDefaultFstab() and ReadFstabFromFile().
#
#line 1033
######################################
# use_bootstrap_libs(domain)
# Allow domain to use bootstrap bionic libraries in system/lib[64]/bootstrap
#line 1041
######################################
# use_apex_info(domain)
# Allow access to apex information
#line 1050
####################################
# io_uring_use(domain)
# Allow domain to create/use io_uring.
#line 1068
#line 1 "system/sepolicy/public/ioctl_defines"
#line 1 "system/sepolicy/public/ioctl_macros"
# socket ioctls allowed to unprivileged apps
#line 12
# socket ioctls never allowed to unprivileged apps
#line 42
# commonly used ioctls on unix sockets
#line 47
# commonly used TTY ioctls
# merge with unpriv_unix_sock_ioctls?
#line 54
# point to point ioctls
#line 68
# unprivileged binder ioctls
#line 77
#line 1 "system/sepolicy/public/attributes"
######################################
# Attribute declarations
#
# All types used for devices.
# On change, update CHECK_FC_ASSERT_ATTRS
# in tools/checkfc.c
attribute dev_type;
# Attribute for all bpf filesystem subtypes.
attribute bpffs_type;
# All types used for processes.
attribute domain;
# All types used for filesystems.
# On change, update CHECK_FC_ASSERT_ATTRS
# definition in tools/checkfc.c.
attribute fs_type;
# All types used for context= mounts.
attribute contextmount_type;
# All types referencing a FUSE filesystem.
# When mounting a new FUSE filesystem, the fscontext= option should be used to
# set a domain-specific type with this attribute. See app_fusefs for an
# example.
attribute fusefs_type;
# All types used for files that can exist on a labeled fs.
# Do not use for pseudo file types.
# On change, update CHECK_FC_ASSERT_ATTRS
# definition in tools/checkfc.c.
attribute file_type;
# All types used for domain entry points.
attribute exec_type;
# All types used for /data files.
attribute data_file_type;
expandattribute data_file_type false;
# All types in /data, not in /data/vendor
attribute core_data_file_type;
expandattribute core_data_file_type false;
# All types used for app private data files in seapp_contexts.
# Such types should not be applied to any other files.
attribute app_data_file_type;
expandattribute app_data_file_type false;
# All types in /system
attribute system_file_type;
# All types in /system_dlkm
attribute system_dlkm_file_type;
# All types in /vendor
attribute vendor_file_type;
# All types used for procfs files.
attribute proc_type;
expandattribute proc_type false;
# Types in /proc/net, excluding qtaguid types.
# TODO(b/9496886) Lock down access to /proc/net.
# This attribute is used to audit access to proc_net. it is temporary and will
# be removed.
attribute proc_net_type;
expandattribute proc_net_type true;
# All types used for sysfs files.
attribute sysfs_type;
# All types use for debugfs files.
attribute debugfs_type;
# All types used for tracefs files.
attribute tracefs_type;
# Attribute used for all sdcards
attribute sdcard_type;
# All types used for nodes/hosts.
attribute node_type;
# All types used for network interfaces.
attribute netif_type;
# All types used for network ports.
attribute port_type;
# All types used for property service
# On change, update CHECK_PC_ASSERT_ATTRS
# definition in tools/checkfc.c.
attribute property_type;
# All properties defined in core SELinux policy. Should not be
# used by device specific properties
attribute core_property_type;
# All properties used to configure log filtering.
attribute log_property_type;
# All properties that are not specific to device but are added from
# outside of AOSP. (e.g. OEM-specific properties)
# These properties are not accessible from device-specific domains
attribute extended_core_property_type;
# Properties used for representing ownership. All properties should have one
# of: system_property_type, product_property_type, or vendor_property_type.
# All properties defined by /system.
attribute system_property_type;
expandattribute system_property_type false;
# All /system-defined properties used only in /system.
attribute system_internal_property_type;
expandattribute system_internal_property_type false;
# All /system-defined properties which can't be written outside /system.
attribute system_restricted_property_type;
expandattribute system_restricted_property_type false;
# All /system-defined properties with no restrictions.
attribute system_public_property_type;
expandattribute system_public_property_type false;
# All keystore2_key labels.
attribute keystore2_key_type;
# All properties defined by /product.
# Currently there are no enforcements between /system and /product, so for now
# /product attributes are just replaced to /system attributes.
# All properties defined by /vendor.
attribute vendor_property_type;
expandattribute vendor_property_type false;
# All /vendor-defined properties used only in /vendor.
attribute vendor_internal_property_type;
expandattribute vendor_internal_property_type false;
# All /vendor-defined properties which can't be written outside /vendor.
attribute vendor_restricted_property_type;
expandattribute vendor_restricted_property_type false;
# All /vendor-defined properties with no restrictions.
attribute vendor_public_property_type;
expandattribute vendor_public_property_type false;
# All service_manager types created by system_server
attribute system_server_service;
# services which should be available to all but isolated apps
attribute app_api_service;
# services which should be available to all ephemeral apps
attribute ephemeral_app_api_service;
# services which export only system_api
attribute system_api_service;
# services which are explicitly disallowed for untrusted apps to access
attribute protected_service;
# All types used for services managed by servicemanager.
# On change, update CHECK_SC_ASSERT_ATTRS
# definition in tools/checkfc.c.
attribute service_manager_type;
# All types used for services managed by hwservicemanager
attribute hwservice_manager_type;
# All HwBinder services guaranteed to be passthrough. These services always run
# in the process of their clients, and thus operate with the same access as
# their clients.
attribute same_process_hwservice;
# All HwBinder services guaranteed to be offered only by core domain components
attribute coredomain_hwservice;
# All HwBinder services that untrusted apps can't directly access
attribute protected_hwservice;
# All types used for services managed by vndservicemanager
attribute vndservice_manager_type;
# All services declared as part of an HAL
attribute hal_service_type;
# All domains that can override MLS restrictions.
# i.e. processes that can read up and write down.
attribute mlstrustedsubject;
# All types that can override MLS restrictions.
# i.e. files that can be read by lower and written by higher
attribute mlstrustedobject;
# All domains used for apps.
attribute appdomain;
# All third party apps (except isolated_app and ephemeral_app)
attribute untrusted_app_all;
# All apps with UID between AID_ISOLATED_START (99000) and AID_ISOLATED_END (99999).
attribute isolated_app_all;
# All service types that would be allowed for isolated_compute_app.
attribute isolated_compute_allowed_service;
# All device types that would be allowed for isolated_compute_app.
attribute isolated_compute_allowed_device;
# All domains used for apps with network access.
attribute netdomain;
# All domains used for apps with bluetooth access.
attribute bluetoothdomain;
# Specific domains that expose a binder service.
# Deprecated, consider granting the exact permissions required by your service.
attribute binderservicedomain;
# All domains which have BPF access.
attribute bpfdomain;
expandattribute bpfdomain false;
# update_engine related domains that need to apply an update and run
# postinstall. This includes the background daemon and the sideload tool from
# recovery for A/B devices.
attribute update_engine_common;
# All core domains (as opposed to vendor/device-specific domains)
attribute coredomain;
# All vendor hwservice.
attribute vendor_hwservice_type;
# All socket devices owned by core domain components
attribute coredomain_socket;
expandattribute coredomain_socket false;
# All vendor domains which violate the requirement of not using sockets for
# communicating with core components
# TODO(b/36577153): Remove this once there are no violations
attribute socket_between_core_and_vendor_violators;
expandattribute socket_between_core_and_vendor_violators false;
# All vendor domains which violate the requirement of not executing
# system processes
# TODO(b/36463595)
attribute vendor_executes_system_violators;
expandattribute vendor_executes_system_violators false;
# All domains which violate the requirement of not sharing files by path
# between between vendor and core domains.
# TODO(b/34980020)
attribute data_between_core_and_vendor_violators;
expandattribute data_between_core_and_vendor_violators false;
# All system domains which violate the requirement of not executing vendor
# binaries/libraries.
# TODO(b/62041836)
attribute system_executes_vendor_violators;
expandattribute system_executes_vendor_violators false;
# All system domains which violate the requirement of not writing vendor
# properties.
# TODO(b/78598545): Remove this once there are no violations
attribute system_writes_vendor_properties_violators;
expandattribute system_writes_vendor_properties_violators false;
# All system domains which violate the requirement of not writing to
# /mnt/vendor/*. Must not be used on devices launched with P or later.
attribute system_writes_mnt_vendor_violators;
expandattribute system_writes_mnt_vendor_violators false;
# hwservices that are accessible from untrusted applications
# WARNING: Use of this attribute should be avoided unless
# absolutely necessary. It is a temporary allowance to aid the
# transition to treble and will be removed in a future platform
# version, requiring all hwservices that are labeled with this
# attribute to be submitted to AOSP in order to maintain their
# app-visibility.
attribute untrusted_app_visible_hwservice_violators;
expandattribute untrusted_app_visible_hwservice_violators false;
# halserver domains that are accessible to untrusted applications. These
# domains are typically those hosting hwservices attributed by the
# untrusted_app_visible_hwservice_violators.
# WARNING: Use of this attribute should be avoided unless absolutely necessary.
# It is a temporary allowance to aid the transition to treble and will be
# removed in the future platform version, requiring all halserver domains that
# are labeled with this attribute to be submitted to AOSP in order to maintain
# their app-visibility.
attribute untrusted_app_visible_halserver_violators;
expandattribute untrusted_app_visible_halserver_violators false;
# PDX services
attribute pdx_endpoint_dir_type;
attribute pdx_endpoint_socket_type;
expandattribute pdx_endpoint_socket_type false;
attribute pdx_channel_socket_type;
expandattribute pdx_channel_socket_type false;
#line 310
attribute pdx_display_client_endpoint_dir_type;
#line 310
attribute pdx_display_client_endpoint_socket_type;
#line 310
attribute pdx_display_client_channel_socket_type;
#line 310
attribute pdx_display_client_server_type;
#line 310
#line 311
attribute pdx_display_manager_endpoint_dir_type;
#line 311
attribute pdx_display_manager_endpoint_socket_type;
#line 311
attribute pdx_display_manager_channel_socket_type;
#line 311
attribute pdx_display_manager_server_type;
#line 311
#line 312
attribute pdx_display_screenshot_endpoint_dir_type;
#line 312
attribute pdx_display_screenshot_endpoint_socket_type;
#line 312
attribute pdx_display_screenshot_channel_socket_type;
#line 312
attribute pdx_display_screenshot_server_type;
#line 312
#line 313
attribute pdx_display_vsync_endpoint_dir_type;
#line 313
attribute pdx_display_vsync_endpoint_socket_type;
#line 313
attribute pdx_display_vsync_channel_socket_type;
#line 313
attribute pdx_display_vsync_server_type;
#line 313
#line 314
attribute pdx_performance_client_endpoint_dir_type;
#line 314
attribute pdx_performance_client_endpoint_socket_type;
#line 314
attribute pdx_performance_client_channel_socket_type;
#line 314
attribute pdx_performance_client_server_type;
#line 314
#line 315
attribute pdx_bufferhub_client_endpoint_dir_type;
#line 315
attribute pdx_bufferhub_client_endpoint_socket_type;
#line 315
attribute pdx_bufferhub_client_channel_socket_type;
#line 315
attribute pdx_bufferhub_client_server_type;
#line 315
# All HAL servers
attribute halserverdomain;
# All HAL clients
attribute halclientdomain;
expandattribute halclientdomain true;
# Exempt for halserverdomain to access sockets. Only builds for automotive
# device types are allowed to use this attribute (enforced by CTS).
# Unlike phone, in a car many modules are external from Android perspective and
# HALs should be able to communicate with those devices through sockets.
attribute hal_automotive_socket_exemption;
# HALs
#line 330
attribute hal_allocator;
#line 330
expandattribute hal_allocator true;
#line 330
attribute hal_allocator_client;
#line 330
expandattribute hal_allocator_client true;
#line 330
attribute hal_allocator_server;
#line 330
expandattribute hal_allocator_server false;
#line 330
#line 330
neverallow { hal_allocator_server -halserverdomain } domain:process fork;
#line 330
# hal_*_client and halclientdomain attributes are always expanded for
#line 330
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 330
# verified by CTS since these attributes are already expanded by that time.
#line 330
#line 330
;
#line 331
attribute hal_atrace;
#line 331
expandattribute hal_atrace true;
#line 331
attribute hal_atrace_client;
#line 331
expandattribute hal_atrace_client true;
#line 331
attribute hal_atrace_server;
#line 331
expandattribute hal_atrace_server false;
#line 331
#line 331
neverallow { hal_atrace_server -halserverdomain } domain:process fork;
#line 331
# hal_*_client and halclientdomain attributes are always expanded for
#line 331
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 331
# verified by CTS since these attributes are already expanded by that time.
#line 331
#line 331
;
#line 332
attribute hal_audio;
#line 332
expandattribute hal_audio true;
#line 332
attribute hal_audio_client;
#line 332
expandattribute hal_audio_client true;
#line 332
attribute hal_audio_server;
#line 332
expandattribute hal_audio_server false;
#line 332
#line 332
neverallow { hal_audio_server -halserverdomain } domain:process fork;
#line 332
# hal_*_client and halclientdomain attributes are always expanded for
#line 332
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 332
# verified by CTS since these attributes are already expanded by that time.
#line 332
#line 332
;
#line 333
attribute hal_audiocontrol;
#line 333
expandattribute hal_audiocontrol true;
#line 333
attribute hal_audiocontrol_client;
#line 333
expandattribute hal_audiocontrol_client true;
#line 333
attribute hal_audiocontrol_server;
#line 333
expandattribute hal_audiocontrol_server false;
#line 333
#line 333
neverallow { hal_audiocontrol_server -halserverdomain } domain:process fork;
#line 333
# hal_*_client and halclientdomain attributes are always expanded for
#line 333
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 333
# verified by CTS since these attributes are already expanded by that time.
#line 333
#line 333
;
#line 334
attribute hal_authgraph;
#line 334
expandattribute hal_authgraph true;
#line 334
attribute hal_authgraph_client;
#line 334
expandattribute hal_authgraph_client true;
#line 334
attribute hal_authgraph_server;
#line 334
expandattribute hal_authgraph_server false;
#line 334
#line 334
neverallow { hal_authgraph_server -halserverdomain } domain:process fork;
#line 334
# hal_*_client and halclientdomain attributes are always expanded for
#line 334
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 334
# verified by CTS since these attributes are already expanded by that time.
#line 334
#line 334
;
#line 335
attribute hal_authsecret;
#line 335
expandattribute hal_authsecret true;
#line 335
attribute hal_authsecret_client;
#line 335
expandattribute hal_authsecret_client true;
#line 335
attribute hal_authsecret_server;
#line 335
expandattribute hal_authsecret_server false;
#line 335
#line 335
neverallow { hal_authsecret_server -halserverdomain } domain:process fork;
#line 335
# hal_*_client and halclientdomain attributes are always expanded for
#line 335
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 335
# verified by CTS since these attributes are already expanded by that time.
#line 335
#line 335
;
#line 336
attribute hal_bluetooth;
#line 336
expandattribute hal_bluetooth true;
#line 336
attribute hal_bluetooth_client;
#line 336
expandattribute hal_bluetooth_client true;
#line 336
attribute hal_bluetooth_server;
#line 336
expandattribute hal_bluetooth_server false;
#line 336
#line 336
neverallow { hal_bluetooth_server -halserverdomain } domain:process fork;
#line 336
# hal_*_client and halclientdomain attributes are always expanded for
#line 336
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 336
# verified by CTS since these attributes are already expanded by that time.
#line 336
#line 336
;
#line 337
attribute hal_bootctl;
#line 337
expandattribute hal_bootctl true;
#line 337
attribute hal_bootctl_client;
#line 337
expandattribute hal_bootctl_client true;
#line 337
attribute hal_bootctl_server;
#line 337
expandattribute hal_bootctl_server false;
#line 337
#line 337
neverallow { hal_bootctl_server -halserverdomain } domain:process fork;
#line 337
# hal_*_client and halclientdomain attributes are always expanded for
#line 337
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 337
# verified by CTS since these attributes are already expanded by that time.
#line 337
#line 337
;
#line 338
attribute hal_broadcastradio;
#line 338
expandattribute hal_broadcastradio true;
#line 338
attribute hal_broadcastradio_client;
#line 338
expandattribute hal_broadcastradio_client true;
#line 338
attribute hal_broadcastradio_server;
#line 338
expandattribute hal_broadcastradio_server false;
#line 338
#line 338
neverallow { hal_broadcastradio_server -halserverdomain } domain:process fork;
#line 338
# hal_*_client and halclientdomain attributes are always expanded for
#line 338
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 338
# verified by CTS since these attributes are already expanded by that time.
#line 338
#line 338
;
#line 339
attribute hal_camera;
#line 339
expandattribute hal_camera true;
#line 339
attribute hal_camera_client;
#line 339
expandattribute hal_camera_client true;
#line 339
attribute hal_camera_server;
#line 339
expandattribute hal_camera_server false;
#line 339
#line 339
neverallow { hal_camera_server -halserverdomain } domain:process fork;
#line 339
# hal_*_client and halclientdomain attributes are always expanded for
#line 339
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 339
# verified by CTS since these attributes are already expanded by that time.
#line 339
#line 339
;
#line 340
attribute hal_can_bus;
#line 340
expandattribute hal_can_bus true;
#line 340
attribute hal_can_bus_client;
#line 340
expandattribute hal_can_bus_client true;
#line 340
attribute hal_can_bus_server;
#line 340
expandattribute hal_can_bus_server false;
#line 340
#line 340
neverallow { hal_can_bus_server -halserverdomain } domain:process fork;
#line 340
# hal_*_client and halclientdomain attributes are always expanded for
#line 340
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 340
# verified by CTS since these attributes are already expanded by that time.
#line 340
#line 340
;
#line 341
attribute hal_can_controller;
#line 341
expandattribute hal_can_controller true;
#line 341
attribute hal_can_controller_client;
#line 341
expandattribute hal_can_controller_client true;
#line 341
attribute hal_can_controller_server;
#line 341
expandattribute hal_can_controller_server false;
#line 341
#line 341
neverallow { hal_can_controller_server -halserverdomain } domain:process fork;
#line 341
# hal_*_client and halclientdomain attributes are always expanded for
#line 341
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 341
# verified by CTS since these attributes are already expanded by that time.
#line 341
#line 341
;
#line 342
attribute hal_cas;
#line 342
expandattribute hal_cas true;
#line 342
attribute hal_cas_client;
#line 342
expandattribute hal_cas_client true;
#line 342
attribute hal_cas_server;
#line 342
expandattribute hal_cas_server false;
#line 342
#line 342
neverallow { hal_cas_server -halserverdomain } domain:process fork;
#line 342
# hal_*_client and halclientdomain attributes are always expanded for
#line 342
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 342
# verified by CTS since these attributes are already expanded by that time.
#line 342
#line 342
;
#line 343
attribute hal_codec2;
#line 343
expandattribute hal_codec2 true;
#line 343
attribute hal_codec2_client;
#line 343
expandattribute hal_codec2_client true;
#line 343
attribute hal_codec2_server;
#line 343
expandattribute hal_codec2_server false;
#line 343
#line 343
neverallow { hal_codec2_server -halserverdomain } domain:process fork;
#line 343
# hal_*_client and halclientdomain attributes are always expanded for
#line 343
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 343
# verified by CTS since these attributes are already expanded by that time.
#line 343
#line 343
;
#line 344
attribute hal_configstore;
#line 344
expandattribute hal_configstore true;
#line 344
attribute hal_configstore_client;
#line 344
expandattribute hal_configstore_client true;
#line 344
attribute hal_configstore_server;
#line 344
expandattribute hal_configstore_server false;
#line 344
#line 344
neverallow { hal_configstore_server -halserverdomain } domain:process fork;
#line 344
# hal_*_client and halclientdomain attributes are always expanded for
#line 344
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 344
# verified by CTS since these attributes are already expanded by that time.
#line 344
#line 344
;
#line 345
attribute hal_confirmationui;
#line 345
expandattribute hal_confirmationui true;
#line 345
attribute hal_confirmationui_client;
#line 345
expandattribute hal_confirmationui_client true;
#line 345
attribute hal_confirmationui_server;
#line 345
expandattribute hal_confirmationui_server false;
#line 345
#line 345
neverallow { hal_confirmationui_server -halserverdomain } domain:process fork;
#line 345
# hal_*_client and halclientdomain attributes are always expanded for
#line 345
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 345
# verified by CTS since these attributes are already expanded by that time.
#line 345
#line 345
;
#line 346
attribute hal_contexthub;
#line 346
expandattribute hal_contexthub true;
#line 346
attribute hal_contexthub_client;
#line 346
expandattribute hal_contexthub_client true;
#line 346
attribute hal_contexthub_server;
#line 346
expandattribute hal_contexthub_server false;
#line 346
#line 346
neverallow { hal_contexthub_server -halserverdomain } domain:process fork;
#line 346
# hal_*_client and halclientdomain attributes are always expanded for
#line 346
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 346
# verified by CTS since these attributes are already expanded by that time.
#line 346
#line 346
;
#line 347
attribute hal_drm;
#line 347
expandattribute hal_drm true;
#line 347
attribute hal_drm_client;
#line 347
expandattribute hal_drm_client true;
#line 347
attribute hal_drm_server;
#line 347
expandattribute hal_drm_server false;
#line 347
#line 347
neverallow { hal_drm_server -halserverdomain } domain:process fork;
#line 347
# hal_*_client and halclientdomain attributes are always expanded for
#line 347
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 347
# verified by CTS since these attributes are already expanded by that time.
#line 347
#line 347
;
#line 348
attribute hal_dumpstate;
#line 348
expandattribute hal_dumpstate true;
#line 348
attribute hal_dumpstate_client;
#line 348
expandattribute hal_dumpstate_client true;
#line 348
attribute hal_dumpstate_server;
#line 348
expandattribute hal_dumpstate_server false;
#line 348
#line 348
neverallow { hal_dumpstate_server -halserverdomain } domain:process fork;
#line 348
# hal_*_client and halclientdomain attributes are always expanded for
#line 348
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 348
# verified by CTS since these attributes are already expanded by that time.
#line 348
#line 348
;
#line 349
attribute hal_evs;
#line 349
expandattribute hal_evs true;
#line 349
attribute hal_evs_client;
#line 349
expandattribute hal_evs_client true;
#line 349
attribute hal_evs_server;
#line 349
expandattribute hal_evs_server false;
#line 349
#line 349
neverallow { hal_evs_server -halserverdomain } domain:process fork;
#line 349
# hal_*_client and halclientdomain attributes are always expanded for
#line 349
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 349
# verified by CTS since these attributes are already expanded by that time.
#line 349
#line 349
;
#line 350
attribute hal_face;
#line 350
expandattribute hal_face true;
#line 350
attribute hal_face_client;
#line 350
expandattribute hal_face_client true;
#line 350
attribute hal_face_server;
#line 350
expandattribute hal_face_server false;
#line 350
#line 350
neverallow { hal_face_server -halserverdomain } domain:process fork;
#line 350
# hal_*_client and halclientdomain attributes are always expanded for
#line 350
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 350
# verified by CTS since these attributes are already expanded by that time.
#line 350
#line 350
;
#line 351
attribute hal_fastboot;
#line 351
expandattribute hal_fastboot true;
#line 351
attribute hal_fastboot_client;
#line 351
expandattribute hal_fastboot_client true;
#line 351
attribute hal_fastboot_server;
#line 351
expandattribute hal_fastboot_server false;
#line 351
#line 351
neverallow { hal_fastboot_server -halserverdomain } domain:process fork;
#line 351
# hal_*_client and halclientdomain attributes are always expanded for
#line 351
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 351
# verified by CTS since these attributes are already expanded by that time.
#line 351
#line 351
;
#line 352
attribute hal_fingerprint;
#line 352
expandattribute hal_fingerprint true;
#line 352
attribute hal_fingerprint_client;
#line 352
expandattribute hal_fingerprint_client true;
#line 352
attribute hal_fingerprint_server;
#line 352
expandattribute hal_fingerprint_server false;
#line 352
#line 352
neverallow { hal_fingerprint_server -halserverdomain } domain:process fork;
#line 352
# hal_*_client and halclientdomain attributes are always expanded for
#line 352
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 352
# verified by CTS since these attributes are already expanded by that time.
#line 352
#line 352
;
#line 353
attribute hal_gatekeeper;
#line 353
expandattribute hal_gatekeeper true;
#line 353
attribute hal_gatekeeper_client;
#line 353
expandattribute hal_gatekeeper_client true;
#line 353
attribute hal_gatekeeper_server;
#line 353
expandattribute hal_gatekeeper_server false;
#line 353
#line 353
neverallow { hal_gatekeeper_server -halserverdomain } domain:process fork;
#line 353
# hal_*_client and halclientdomain attributes are always expanded for
#line 353
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 353
# verified by CTS since these attributes are already expanded by that time.
#line 353
#line 353
;
#line 354
attribute hal_gnss;
#line 354
expandattribute hal_gnss true;
#line 354
attribute hal_gnss_client;
#line 354
expandattribute hal_gnss_client true;
#line 354
attribute hal_gnss_server;
#line 354
expandattribute hal_gnss_server false;
#line 354
#line 354
neverallow { hal_gnss_server -halserverdomain } domain:process fork;
#line 354
# hal_*_client and halclientdomain attributes are always expanded for
#line 354
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 354
# verified by CTS since these attributes are already expanded by that time.
#line 354
#line 354
;
#line 355
attribute hal_graphics_allocator;
#line 355
expandattribute hal_graphics_allocator true;
#line 355
attribute hal_graphics_allocator_client;
#line 355
expandattribute hal_graphics_allocator_client true;
#line 355
attribute hal_graphics_allocator_server;
#line 355
expandattribute hal_graphics_allocator_server false;
#line 355
#line 355
neverallow { hal_graphics_allocator_server -halserverdomain } domain:process fork;
#line 355
# hal_*_client and halclientdomain attributes are always expanded for
#line 355
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 355
# verified by CTS since these attributes are already expanded by that time.
#line 355
#line 355
;
#line 356
attribute hal_graphics_composer;
#line 356
expandattribute hal_graphics_composer true;
#line 356
attribute hal_graphics_composer_client;
#line 356
expandattribute hal_graphics_composer_client true;
#line 356
attribute hal_graphics_composer_server;
#line 356
expandattribute hal_graphics_composer_server false;
#line 356
#line 356
neverallow { hal_graphics_composer_server -halserverdomain } domain:process fork;
#line 356
# hal_*_client and halclientdomain attributes are always expanded for
#line 356
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 356
# verified by CTS since these attributes are already expanded by that time.
#line 356
#line 356
;
#line 357
attribute hal_health;
#line 357
expandattribute hal_health true;
#line 357
attribute hal_health_client;
#line 357
expandattribute hal_health_client true;
#line 357
attribute hal_health_server;
#line 357
expandattribute hal_health_server false;
#line 357
#line 357
neverallow { hal_health_server -halserverdomain } domain:process fork;
#line 357
# hal_*_client and halclientdomain attributes are always expanded for
#line 357
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 357
# verified by CTS since these attributes are already expanded by that time.
#line 357
#line 357
;
#line 358
attribute hal_health_storage;
#line 358
expandattribute hal_health_storage true;
#line 358
attribute hal_health_storage_client;
#line 358
expandattribute hal_health_storage_client true;
#line 358
attribute hal_health_storage_server;
#line 358
expandattribute hal_health_storage_server false;
#line 358
#line 358
neverallow { hal_health_storage_server -halserverdomain } domain:process fork;
#line 358
# hal_*_client and halclientdomain attributes are always expanded for
#line 358
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 358
# verified by CTS since these attributes are already expanded by that time.
#line 358
#line 358
;
#line 359
attribute hal_identity;
#line 359
expandattribute hal_identity true;
#line 359
attribute hal_identity_client;
#line 359
expandattribute hal_identity_client true;
#line 359
attribute hal_identity_server;
#line 359
expandattribute hal_identity_server false;
#line 359
#line 359
neverallow { hal_identity_server -halserverdomain } domain:process fork;
#line 359
# hal_*_client and halclientdomain attributes are always expanded for
#line 359
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 359
# verified by CTS since these attributes are already expanded by that time.
#line 359
#line 359
;
#line 360
attribute hal_input_classifier;
#line 360
expandattribute hal_input_classifier true;
#line 360
attribute hal_input_classifier_client;
#line 360
expandattribute hal_input_classifier_client true;
#line 360
attribute hal_input_classifier_server;
#line 360
expandattribute hal_input_classifier_server false;
#line 360
#line 360
neverallow { hal_input_classifier_server -halserverdomain } domain:process fork;
#line 360
# hal_*_client and halclientdomain attributes are always expanded for
#line 360
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 360
# verified by CTS since these attributes are already expanded by that time.
#line 360
#line 360
;
#line 361
attribute hal_input_processor;
#line 361
expandattribute hal_input_processor true;
#line 361
attribute hal_input_processor_client;
#line 361
expandattribute hal_input_processor_client true;
#line 361
attribute hal_input_processor_server;
#line 361
expandattribute hal_input_processor_server false;
#line 361
#line 361
neverallow { hal_input_processor_server -halserverdomain } domain:process fork;
#line 361
# hal_*_client and halclientdomain attributes are always expanded for
#line 361
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 361
# verified by CTS since these attributes are already expanded by that time.
#line 361
#line 361
;
#line 362
attribute hal_ir;
#line 362
expandattribute hal_ir true;
#line 362
attribute hal_ir_client;
#line 362
expandattribute hal_ir_client true;
#line 362
attribute hal_ir_server;
#line 362
expandattribute hal_ir_server false;
#line 362
#line 362
neverallow { hal_ir_server -halserverdomain } domain:process fork;
#line 362
# hal_*_client and halclientdomain attributes are always expanded for
#line 362
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 362
# verified by CTS since these attributes are already expanded by that time.
#line 362
#line 362
;
#line 363
attribute hal_ivn;
#line 363
expandattribute hal_ivn true;
#line 363
attribute hal_ivn_client;
#line 363
expandattribute hal_ivn_client true;
#line 363
attribute hal_ivn_server;
#line 363
expandattribute hal_ivn_server false;
#line 363
#line 363
neverallow { hal_ivn_server -halserverdomain } domain:process fork;
#line 363
# hal_*_client and halclientdomain attributes are always expanded for
#line 363
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 363
# verified by CTS since these attributes are already expanded by that time.
#line 363
#line 363
;
#line 364
attribute hal_keymaster;
#line 364
expandattribute hal_keymaster true;
#line 364
attribute hal_keymaster_client;
#line 364
expandattribute hal_keymaster_client true;
#line 364
attribute hal_keymaster_server;
#line 364
expandattribute hal_keymaster_server false;
#line 364
#line 364
neverallow { hal_keymaster_server -halserverdomain } domain:process fork;
#line 364
# hal_*_client and halclientdomain attributes are always expanded for
#line 364
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 364
# verified by CTS since these attributes are already expanded by that time.
#line 364
#line 364
;
#line 365
attribute hal_keymint;
#line 365
expandattribute hal_keymint true;
#line 365
attribute hal_keymint_client;
#line 365
expandattribute hal_keymint_client true;
#line 365
attribute hal_keymint_server;
#line 365
expandattribute hal_keymint_server false;
#line 365
#line 365
neverallow { hal_keymint_server -halserverdomain } domain:process fork;
#line 365
# hal_*_client and halclientdomain attributes are always expanded for
#line 365
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 365
# verified by CTS since these attributes are already expanded by that time.
#line 365
#line 365
;
#line 366
attribute hal_light;
#line 366
expandattribute hal_light true;
#line 366
attribute hal_light_client;
#line 366
expandattribute hal_light_client true;
#line 366
attribute hal_light_server;
#line 366
expandattribute hal_light_server false;
#line 366
#line 366
neverallow { hal_light_server -halserverdomain } domain:process fork;
#line 366
# hal_*_client and halclientdomain attributes are always expanded for
#line 366
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 366
# verified by CTS since these attributes are already expanded by that time.
#line 366
#line 366
;
#line 367
attribute hal_lowpan;
#line 367
expandattribute hal_lowpan true;
#line 367
attribute hal_lowpan_client;
#line 367
expandattribute hal_lowpan_client true;
#line 367
attribute hal_lowpan_server;
#line 367
expandattribute hal_lowpan_server false;
#line 367
#line 367
neverallow { hal_lowpan_server -halserverdomain } domain:process fork;
#line 367
# hal_*_client and halclientdomain attributes are always expanded for
#line 367
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 367
# verified by CTS since these attributes are already expanded by that time.
#line 367
#line 367
;
#line 368
attribute hal_macsec;
#line 368
expandattribute hal_macsec true;
#line 368
attribute hal_macsec_client;
#line 368
expandattribute hal_macsec_client true;
#line 368
attribute hal_macsec_server;
#line 368
expandattribute hal_macsec_server false;
#line 368
#line 368
neverallow { hal_macsec_server -halserverdomain } domain:process fork;
#line 368
# hal_*_client and halclientdomain attributes are always expanded for
#line 368
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 368
# verified by CTS since these attributes are already expanded by that time.
#line 368
#line 368
;
#line 369
attribute hal_memtrack;
#line 369
expandattribute hal_memtrack true;
#line 369
attribute hal_memtrack_client;
#line 369
expandattribute hal_memtrack_client true;
#line 369
attribute hal_memtrack_server;
#line 369
expandattribute hal_memtrack_server false;
#line 369
#line 369
neverallow { hal_memtrack_server -halserverdomain } domain:process fork;
#line 369
# hal_*_client and halclientdomain attributes are always expanded for
#line 369
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 369
# verified by CTS since these attributes are already expanded by that time.
#line 369
#line 369
;
#line 370
attribute hal_neuralnetworks;
#line 370
expandattribute hal_neuralnetworks true;
#line 370
attribute hal_neuralnetworks_client;
#line 370
expandattribute hal_neuralnetworks_client true;
#line 370
attribute hal_neuralnetworks_server;
#line 370
expandattribute hal_neuralnetworks_server false;
#line 370
#line 370
neverallow { hal_neuralnetworks_server -halserverdomain } domain:process fork;
#line 370
# hal_*_client and halclientdomain attributes are always expanded for
#line 370
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 370
# verified by CTS since these attributes are already expanded by that time.
#line 370
#line 370
;
#line 371
attribute hal_nfc;
#line 371
expandattribute hal_nfc true;
#line 371
attribute hal_nfc_client;
#line 371
expandattribute hal_nfc_client true;
#line 371
attribute hal_nfc_server;
#line 371
expandattribute hal_nfc_server false;
#line 371
#line 371
neverallow { hal_nfc_server -halserverdomain } domain:process fork;
#line 371
# hal_*_client and halclientdomain attributes are always expanded for
#line 371
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 371
# verified by CTS since these attributes are already expanded by that time.
#line 371
#line 371
;
#line 372
attribute hal_nlinterceptor;
#line 372
expandattribute hal_nlinterceptor true;
#line 372
attribute hal_nlinterceptor_client;
#line 372
expandattribute hal_nlinterceptor_client true;
#line 372
attribute hal_nlinterceptor_server;
#line 372
expandattribute hal_nlinterceptor_server false;
#line 372
#line 372
neverallow { hal_nlinterceptor_server -halserverdomain } domain:process fork;
#line 372
# hal_*_client and halclientdomain attributes are always expanded for
#line 372
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 372
# verified by CTS since these attributes are already expanded by that time.
#line 372
#line 372
;
#line 373
attribute hal_oemlock;
#line 373
expandattribute hal_oemlock true;
#line 373
attribute hal_oemlock_client;
#line 373
expandattribute hal_oemlock_client true;
#line 373
attribute hal_oemlock_server;
#line 373
expandattribute hal_oemlock_server false;
#line 373
#line 373
neverallow { hal_oemlock_server -halserverdomain } domain:process fork;
#line 373
# hal_*_client and halclientdomain attributes are always expanded for
#line 373
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 373
# verified by CTS since these attributes are already expanded by that time.
#line 373
#line 373
;
#line 374
attribute hal_omx;
#line 374
expandattribute hal_omx true;
#line 374
attribute hal_omx_client;
#line 374
expandattribute hal_omx_client true;
#line 374
attribute hal_omx_server;
#line 374
expandattribute hal_omx_server false;
#line 374
#line 374
neverallow { hal_omx_server -halserverdomain } domain:process fork;
#line 374
# hal_*_client and halclientdomain attributes are always expanded for
#line 374
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 374
# verified by CTS since these attributes are already expanded by that time.
#line 374
#line 374
;
#line 375
attribute hal_power;
#line 375
expandattribute hal_power true;
#line 375
attribute hal_power_client;
#line 375
expandattribute hal_power_client true;
#line 375
attribute hal_power_server;
#line 375
expandattribute hal_power_server false;
#line 375
#line 375
neverallow { hal_power_server -halserverdomain } domain:process fork;
#line 375
# hal_*_client and halclientdomain attributes are always expanded for
#line 375
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 375
# verified by CTS since these attributes are already expanded by that time.
#line 375
#line 375
;
#line 376
attribute hal_power_stats;
#line 376
expandattribute hal_power_stats true;
#line 376
attribute hal_power_stats_client;
#line 376
expandattribute hal_power_stats_client true;
#line 376
attribute hal_power_stats_server;
#line 376
expandattribute hal_power_stats_server false;
#line 376
#line 376
neverallow { hal_power_stats_server -halserverdomain } domain:process fork;
#line 376
# hal_*_client and halclientdomain attributes are always expanded for
#line 376
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 376
# verified by CTS since these attributes are already expanded by that time.
#line 376
#line 376
;
#line 377
attribute hal_rebootescrow;
#line 377
expandattribute hal_rebootescrow true;
#line 377
attribute hal_rebootescrow_client;
#line 377
expandattribute hal_rebootescrow_client true;
#line 377
attribute hal_rebootescrow_server;
#line 377
expandattribute hal_rebootescrow_server false;
#line 377
#line 377
neverallow { hal_rebootescrow_server -halserverdomain } domain:process fork;
#line 377
# hal_*_client and halclientdomain attributes are always expanded for
#line 377
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 377
# verified by CTS since these attributes are already expanded by that time.
#line 377
#line 377
;
#line 378
attribute hal_remoteaccess;
#line 378
expandattribute hal_remoteaccess true;
#line 378
attribute hal_remoteaccess_client;
#line 378
expandattribute hal_remoteaccess_client true;
#line 378
attribute hal_remoteaccess_server;
#line 378
expandattribute hal_remoteaccess_server false;
#line 378
#line 378
neverallow { hal_remoteaccess_server -halserverdomain } domain:process fork;
#line 378
# hal_*_client and halclientdomain attributes are always expanded for
#line 378
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 378
# verified by CTS since these attributes are already expanded by that time.
#line 378
#line 378
;
#line 379
attribute hal_secretkeeper;
#line 379
expandattribute hal_secretkeeper true;
#line 379
attribute hal_secretkeeper_client;
#line 379
expandattribute hal_secretkeeper_client true;
#line 379
attribute hal_secretkeeper_server;
#line 379
expandattribute hal_secretkeeper_server false;
#line 379
#line 379
neverallow { hal_secretkeeper_server -halserverdomain } domain:process fork;
#line 379
# hal_*_client and halclientdomain attributes are always expanded for
#line 379
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 379
# verified by CTS since these attributes are already expanded by that time.
#line 379
#line 379
;
#line 380
attribute hal_remotelyprovisionedcomponent_avf;
#line 380
expandattribute hal_remotelyprovisionedcomponent_avf true;
#line 380
attribute hal_remotelyprovisionedcomponent_avf_client;
#line 380
expandattribute hal_remotelyprovisionedcomponent_avf_client true;
#line 380
attribute hal_remotelyprovisionedcomponent_avf_server;
#line 380
expandattribute hal_remotelyprovisionedcomponent_avf_server false;
#line 380
#line 380
neverallow { hal_remotelyprovisionedcomponent_avf_server -halserverdomain } domain:process fork;
#line 380
# hal_*_client and halclientdomain attributes are always expanded for
#line 380
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 380
# verified by CTS since these attributes are already expanded by that time.
#line 380
#line 380
;
#line 381
attribute hal_secure_element;
#line 381
expandattribute hal_secure_element true;
#line 381
attribute hal_secure_element_client;
#line 381
expandattribute hal_secure_element_client true;
#line 381
attribute hal_secure_element_server;
#line 381
expandattribute hal_secure_element_server false;
#line 381
#line 381
neverallow { hal_secure_element_server -halserverdomain } domain:process fork;
#line 381
# hal_*_client and halclientdomain attributes are always expanded for
#line 381
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 381
# verified by CTS since these attributes are already expanded by that time.
#line 381
#line 381
;
#line 382
attribute hal_sensors;
#line 382
expandattribute hal_sensors true;
#line 382
attribute hal_sensors_client;
#line 382
expandattribute hal_sensors_client true;
#line 382
attribute hal_sensors_server;
#line 382
expandattribute hal_sensors_server false;
#line 382
#line 382
neverallow { hal_sensors_server -halserverdomain } domain:process fork;
#line 382
# hal_*_client and halclientdomain attributes are always expanded for
#line 382
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 382
# verified by CTS since these attributes are already expanded by that time.
#line 382
#line 382
;
#line 383
attribute hal_telephony;
#line 383
expandattribute hal_telephony true;
#line 383
attribute hal_telephony_client;
#line 383
expandattribute hal_telephony_client true;
#line 383
attribute hal_telephony_server;
#line 383
expandattribute hal_telephony_server false;
#line 383
#line 383
neverallow { hal_telephony_server -halserverdomain } domain:process fork;
#line 383
# hal_*_client and halclientdomain attributes are always expanded for
#line 383
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 383
# verified by CTS since these attributes are already expanded by that time.
#line 383
#line 383
;
#line 384
attribute hal_tetheroffload;
#line 384
expandattribute hal_tetheroffload true;
#line 384
attribute hal_tetheroffload_client;
#line 384
expandattribute hal_tetheroffload_client true;
#line 384
attribute hal_tetheroffload_server;
#line 384
expandattribute hal_tetheroffload_server false;
#line 384
#line 384
neverallow { hal_tetheroffload_server -halserverdomain } domain:process fork;
#line 384
# hal_*_client and halclientdomain attributes are always expanded for
#line 384
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 384
# verified by CTS since these attributes are already expanded by that time.
#line 384
#line 384
;
#line 385
attribute hal_thermal;
#line 385
expandattribute hal_thermal true;
#line 385
attribute hal_thermal_client;
#line 385
expandattribute hal_thermal_client true;
#line 385
attribute hal_thermal_server;
#line 385
expandattribute hal_thermal_server false;
#line 385
#line 385
neverallow { hal_thermal_server -halserverdomain } domain:process fork;
#line 385
# hal_*_client and halclientdomain attributes are always expanded for
#line 385
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 385
# verified by CTS since these attributes are already expanded by that time.
#line 385
#line 385
;
#line 386
attribute hal_threadnetwork;
#line 386
expandattribute hal_threadnetwork true;
#line 386
attribute hal_threadnetwork_client;
#line 386
expandattribute hal_threadnetwork_client true;
#line 386
attribute hal_threadnetwork_server;
#line 386
expandattribute hal_threadnetwork_server false;
#line 386
#line 386
neverallow { hal_threadnetwork_server -halserverdomain } domain:process fork;
#line 386
# hal_*_client and halclientdomain attributes are always expanded for
#line 386
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 386
# verified by CTS since these attributes are already expanded by that time.
#line 386
#line 386
;
#line 387
attribute hal_tv_cec;
#line 387
expandattribute hal_tv_cec true;
#line 387
attribute hal_tv_cec_client;
#line 387
expandattribute hal_tv_cec_client true;
#line 387
attribute hal_tv_cec_server;
#line 387
expandattribute hal_tv_cec_server false;
#line 387
#line 387
neverallow { hal_tv_cec_server -halserverdomain } domain:process fork;
#line 387
# hal_*_client and halclientdomain attributes are always expanded for
#line 387
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 387
# verified by CTS since these attributes are already expanded by that time.
#line 387
#line 387
;
#line 388
attribute hal_tv_hdmi_cec;
#line 388
expandattribute hal_tv_hdmi_cec true;
#line 388
attribute hal_tv_hdmi_cec_client;
#line 388
expandattribute hal_tv_hdmi_cec_client true;
#line 388
attribute hal_tv_hdmi_cec_server;
#line 388
expandattribute hal_tv_hdmi_cec_server false;
#line 388
#line 388
neverallow { hal_tv_hdmi_cec_server -halserverdomain } domain:process fork;
#line 388
# hal_*_client and halclientdomain attributes are always expanded for
#line 388
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 388
# verified by CTS since these attributes are already expanded by that time.
#line 388
#line 388
;
#line 389
attribute hal_tv_hdmi_connection;
#line 389
expandattribute hal_tv_hdmi_connection true;
#line 389
attribute hal_tv_hdmi_connection_client;
#line 389
expandattribute hal_tv_hdmi_connection_client true;
#line 389
attribute hal_tv_hdmi_connection_server;
#line 389
expandattribute hal_tv_hdmi_connection_server false;
#line 389
#line 389
neverallow { hal_tv_hdmi_connection_server -halserverdomain } domain:process fork;
#line 389
# hal_*_client and halclientdomain attributes are always expanded for
#line 389
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 389
# verified by CTS since these attributes are already expanded by that time.
#line 389
#line 389
;
#line 390
attribute hal_tv_hdmi_earc;
#line 390
expandattribute hal_tv_hdmi_earc true;
#line 390
attribute hal_tv_hdmi_earc_client;
#line 390
expandattribute hal_tv_hdmi_earc_client true;
#line 390
attribute hal_tv_hdmi_earc_server;
#line 390
expandattribute hal_tv_hdmi_earc_server false;
#line 390
#line 390
neverallow { hal_tv_hdmi_earc_server -halserverdomain } domain:process fork;
#line 390
# hal_*_client and halclientdomain attributes are always expanded for
#line 390
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 390
# verified by CTS since these attributes are already expanded by that time.
#line 390
#line 390
;
#line 391
attribute hal_tv_input;
#line 391
expandattribute hal_tv_input true;
#line 391
attribute hal_tv_input_client;
#line 391
expandattribute hal_tv_input_client true;
#line 391
attribute hal_tv_input_server;
#line 391
expandattribute hal_tv_input_server false;
#line 391
#line 391
neverallow { hal_tv_input_server -halserverdomain } domain:process fork;
#line 391
# hal_*_client and halclientdomain attributes are always expanded for
#line 391
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 391
# verified by CTS since these attributes are already expanded by that time.
#line 391
#line 391
;
#line 392
attribute hal_tv_tuner;
#line 392
expandattribute hal_tv_tuner true;
#line 392
attribute hal_tv_tuner_client;
#line 392
expandattribute hal_tv_tuner_client true;
#line 392
attribute hal_tv_tuner_server;
#line 392
expandattribute hal_tv_tuner_server false;
#line 392
#line 392
neverallow { hal_tv_tuner_server -halserverdomain } domain:process fork;
#line 392
# hal_*_client and halclientdomain attributes are always expanded for
#line 392
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 392
# verified by CTS since these attributes are already expanded by that time.
#line 392
#line 392
;
#line 393
attribute hal_usb;
#line 393
expandattribute hal_usb true;
#line 393
attribute hal_usb_client;
#line 393
expandattribute hal_usb_client true;
#line 393
attribute hal_usb_server;
#line 393
expandattribute hal_usb_server false;
#line 393
#line 393
neverallow { hal_usb_server -halserverdomain } domain:process fork;
#line 393
# hal_*_client and halclientdomain attributes are always expanded for
#line 393
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 393
# verified by CTS since these attributes are already expanded by that time.
#line 393
#line 393
;
#line 394
attribute hal_usb_gadget;
#line 394
expandattribute hal_usb_gadget true;
#line 394
attribute hal_usb_gadget_client;
#line 394
expandattribute hal_usb_gadget_client true;
#line 394
attribute hal_usb_gadget_server;
#line 394
expandattribute hal_usb_gadget_server false;
#line 394
#line 394
neverallow { hal_usb_gadget_server -halserverdomain } domain:process fork;
#line 394
# hal_*_client and halclientdomain attributes are always expanded for
#line 394
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 394
# verified by CTS since these attributes are already expanded by that time.
#line 394
#line 394
;
#line 395
attribute hal_uwb;
#line 395
expandattribute hal_uwb true;
#line 395
attribute hal_uwb_client;
#line 395
expandattribute hal_uwb_client true;
#line 395
attribute hal_uwb_server;
#line 395
expandattribute hal_uwb_server false;
#line 395
#line 395
neverallow { hal_uwb_server -halserverdomain } domain:process fork;
#line 395
# hal_*_client and halclientdomain attributes are always expanded for
#line 395
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 395
# verified by CTS since these attributes are already expanded by that time.
#line 395
#line 395
;
# TODO(b/196225233): Remove this attribute and its usages elsewhere
# once all chip vendors integrate to the new UWB stack.
#line 398
attribute hal_uwb_vendor;
#line 398
expandattribute hal_uwb_vendor true;
#line 398
attribute hal_uwb_vendor_client;
#line 398
expandattribute hal_uwb_vendor_client true;
#line 398
attribute hal_uwb_vendor_server;
#line 398
expandattribute hal_uwb_vendor_server false;
#line 398
#line 398
neverallow { hal_uwb_vendor_server -halserverdomain } domain:process fork;
#line 398
# hal_*_client and halclientdomain attributes are always expanded for
#line 398
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 398
# verified by CTS since these attributes are already expanded by that time.
#line 398
#line 398
;
#line 399
attribute hal_vehicle;
#line 399
expandattribute hal_vehicle true;
#line 399
attribute hal_vehicle_client;
#line 399
expandattribute hal_vehicle_client true;
#line 399
attribute hal_vehicle_server;
#line 399
expandattribute hal_vehicle_server false;
#line 399
#line 399
neverallow { hal_vehicle_server -halserverdomain } domain:process fork;
#line 399
# hal_*_client and halclientdomain attributes are always expanded for
#line 399
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 399
# verified by CTS since these attributes are already expanded by that time.
#line 399
#line 399
;
#line 400
attribute hal_vibrator;
#line 400
expandattribute hal_vibrator true;
#line 400
attribute hal_vibrator_client;
#line 400
expandattribute hal_vibrator_client true;
#line 400
attribute hal_vibrator_server;
#line 400
expandattribute hal_vibrator_server false;
#line 400
#line 400
neverallow { hal_vibrator_server -halserverdomain } domain:process fork;
#line 400
# hal_*_client and halclientdomain attributes are always expanded for
#line 400
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 400
# verified by CTS since these attributes are already expanded by that time.
#line 400
#line 400
;
#line 401
attribute hal_vr;
#line 401
expandattribute hal_vr true;
#line 401
attribute hal_vr_client;
#line 401
expandattribute hal_vr_client true;
#line 401
attribute hal_vr_server;
#line 401
expandattribute hal_vr_server false;
#line 401
#line 401
neverallow { hal_vr_server -halserverdomain } domain:process fork;
#line 401
# hal_*_client and halclientdomain attributes are always expanded for
#line 401
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 401
# verified by CTS since these attributes are already expanded by that time.
#line 401
#line 401
;
#line 402
attribute hal_weaver;
#line 402
expandattribute hal_weaver true;
#line 402
attribute hal_weaver_client;
#line 402
expandattribute hal_weaver_client true;
#line 402
attribute hal_weaver_server;
#line 402
expandattribute hal_weaver_server false;
#line 402
#line 402
neverallow { hal_weaver_server -halserverdomain } domain:process fork;
#line 402
# hal_*_client and halclientdomain attributes are always expanded for
#line 402
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 402
# verified by CTS since these attributes are already expanded by that time.
#line 402
#line 402
;
#line 403
attribute hal_wifi;
#line 403
expandattribute hal_wifi true;
#line 403
attribute hal_wifi_client;
#line 403
expandattribute hal_wifi_client true;
#line 403
attribute hal_wifi_server;
#line 403
expandattribute hal_wifi_server false;
#line 403
#line 403
neverallow { hal_wifi_server -halserverdomain } domain:process fork;
#line 403
# hal_*_client and halclientdomain attributes are always expanded for
#line 403
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 403
# verified by CTS since these attributes are already expanded by that time.
#line 403
#line 403
;
#line 404
attribute hal_wifi_hostapd;
#line 404
expandattribute hal_wifi_hostapd true;
#line 404
attribute hal_wifi_hostapd_client;
#line 404
expandattribute hal_wifi_hostapd_client true;
#line 404
attribute hal_wifi_hostapd_server;
#line 404
expandattribute hal_wifi_hostapd_server false;
#line 404
#line 404
neverallow { hal_wifi_hostapd_server -halserverdomain } domain:process fork;
#line 404
# hal_*_client and halclientdomain attributes are always expanded for
#line 404
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 404
# verified by CTS since these attributes are already expanded by that time.
#line 404
#line 404
;
#line 405
attribute hal_wifi_supplicant;
#line 405
expandattribute hal_wifi_supplicant true;
#line 405
attribute hal_wifi_supplicant_client;
#line 405
expandattribute hal_wifi_supplicant_client true;
#line 405
attribute hal_wifi_supplicant_server;
#line 405
expandattribute hal_wifi_supplicant_server false;
#line 405
#line 405
neverallow { hal_wifi_supplicant_server -halserverdomain } domain:process fork;
#line 405
# hal_*_client and halclientdomain attributes are always expanded for
#line 405
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 405
# verified by CTS since these attributes are already expanded by that time.
#line 405
#line 405
;
# HwBinder services offered across the core-vendor boundary
#
# We annotate server domains with x_server to loosen the coupling between
# system and vendor images. For example, it should be possible to move a service
# from one core domain to another, without having to update the vendor image
# which contains clients of this service.
attribute automotive_display_service_server;
attribute camera_service_server;
attribute display_service_server;
attribute evsmanager_service_server;
attribute remote_provisioning_service_server;
attribute scheduler_service_server;
attribute sensor_service_server;
attribute stats_service_server;
attribute system_suspend_internal_server;
attribute system_suspend_server;
attribute wifi_keystore_service_server;
# All types used for super partition block devices.
attribute super_block_device_type;
# All types used for DMA-BUF heaps
attribute dmabuf_heap_device_type;
expandattribute dmabuf_heap_device_type false;
# Types for VM managers
attribute vm_manager_device_type;
# All types used for DSU metadata files.
attribute gsi_metadata_file_type;
# Types used for module-specific APEX data directories under
# /data/{misc,misc_ce,misc_de}/apexdata.
attribute apex_data_file_type;
# Domains used for charger.
# This is the common type for domains that executes charger's
# functionalities, including setting and getting necessary properties,
# permissions to maintain the health loop, writing to kernel log, handling
# inputs and drawing screens, etc.
attribute charger_type;
# All types of ART properties.
attribute dalvik_config_prop_type;
#line 1 "system/sepolicy/public/adbd.te"
# adbd seclabel is specified in init.rc since
# it lives in the rootfs and has no unique file type.
type adbd, domain;
type adbd_exec, exec_type, file_type, system_file_type;
# Only init is allowed to enter the adbd domain via exec()
neverallow { domain -init } adbd:process transition;
neverallow * adbd:process dyntransition;
# Access /data/local/tests.
allow adbd shell_test_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow adbd shell_test_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow adbd shell_test_data_file:lnk_file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
#line 1 "system/sepolicy/public/aidl_lazy_test_server.te"
type aidl_lazy_test_server, domain;
type aidl_lazy_test_server_exec, exec_type, file_type, system_file_type;
#line 9
#line 1 "system/sepolicy/public/apexd.te"
# apexd -- manager for APEX packages
type apexd, domain;
type apexd_exec, exec_type, file_type, system_file_type;
#line 5
# Call the servicemanager and transfer references to it.
#line 5
allow apexd servicemanager:binder { call transfer };
#line 5
# Allow servicemanager to send out callbacks
#line 5
allow servicemanager apexd:binder { call transfer };
#line 5
# servicemanager performs getpidcon on clients.
#line 5
allow servicemanager apexd:dir search;
#line 5
allow servicemanager apexd:file { read open };
#line 5
allow servicemanager apexd:process getattr;
#line 5
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 5
# all domains in domain.te.
#line 5
#line 6
allow apexd apex_service:service_manager { add find };
#line 6
neverallow { domain -apexd } apex_service:service_manager add;
#line 6
#line 6
# On debug builds with root, allow binder services to use binder over TCP.
#line 6
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 6
#line 6
neverallow { domain -init -apexd -system_server -update_engine } apex_service:service_manager find;
neverallow { domain -init -apexd -system_server -servicemanager -update_engine } apexd:binder call;
neverallow { domain } apexd:process ptrace;
#line 1 "system/sepolicy/public/app.te"
###
### Domain for all zygote spawned apps
###
### This file is the base policy for all zygote spawned apps.
### Other policy files, such as isolated_app.te, untrusted_app.te, etc
### extend from this policy. Only policies which should apply to ALL
### zygote spawned apps should be added here.
###
type appdomain_tmpfs, file_type;
###
### Neverallow rules
###
### These are things that Android apps should NEVER be able to do
###
# Superuser capabilities.
# bluetooth requires net_admin and wake_alarm. network stack app requires net_admin.
neverallow { appdomain -bluetooth -network_stack } self:{ capability capability2 cap_userns cap2_userns } *;
# Block device access.
neverallow appdomain dev_type:blk_file { read write };
# Note: Try expanding list of app domains in the future.
neverallow { untrusted_app isolated_app shell } graphics_device:chr_file { read write };
neverallow { appdomain -nfc } nfc_device:chr_file
{ read write };
neverallow { appdomain -bluetooth } hci_attach_dev:chr_file
{ read write };
neverallow appdomain tee_device:chr_file { read write };
# Privileged netlink socket interfaces.
neverallow { appdomain -network_stack }
domain:{
netlink_tcpdiag_socket
netlink_nflog_socket
netlink_xfrm_socket
netlink_audit_socket
netlink_dnrt_socket
} *;
# These messages are broadcast messages from the kernel to userspace.
# Do not allow the writing of netlink messages, which has been a source
# of rooting vulns in the past.
neverallow { appdomain -network_stack }
domain:netlink_kobject_uevent_socket { write append };
# Sockets under /dev/socket that are not specifically typed.
neverallow appdomain socket_device:sock_file write;
# Unix domain sockets.
neverallow appdomain adbd_socket:sock_file write;
neverallow { appdomain -radio } rild_socket:sock_file write;
# ptrace access to non-app domains.
neverallow appdomain { domain -appdomain }:process ptrace;
# The Android security model guarantees the confidentiality and integrity
# of application data and execution state. Ptrace bypasses those
# confidentiality guarantees. Disallow ptrace access from system components
# to apps. Crash_dump is excluded, as it needs ptrace access to
# produce stack traces. llkd is excluded, as it needs ptrace access to
# inspect stack traces for live lock conditions.
neverallow {
domain
-appdomain
-crash_dump
} appdomain:process ptrace;
# Read or write access to /proc/pid entries for any non-app domain.
# A different form of hidepid=2 like protections
neverallow appdomain { domain -appdomain }:file { append create link unlink relabelfrom rename setattr write };
neverallow { appdomain -shell } { domain -appdomain }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# signal access to non-app domains.
# sigchld allowed for parent death notification.
# signull allowed for kill(pid, 0) existence test.
# All others prohibited.
# -perfetto is to allow shell (which is an appdomain) to kill perfetto
# (see private/shell.te).
neverallow appdomain { domain -appdomain -perfetto }:process
{ sigkill sigstop signal };
# Write to rootfs.
neverallow appdomain rootfs:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } }
{ create write setattr relabelfrom relabelto append unlink link rename };
# Write to /system.
neverallow appdomain system_file_type:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } }
{ create write setattr relabelfrom relabelto append unlink link rename };
# Write to entrypoint executables.
neverallow appdomain exec_type:file
{ create write setattr relabelfrom relabelto append unlink link rename };
# Write to system-owned parts of /data.
# This is the default type for anything under /data not otherwise
# specified in file_contexts. Define a different type for portions
# that should be writable by apps.
neverallow appdomain system_data_file:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } }
{ create write setattr relabelfrom relabelto append unlink link rename };
# Write to various other parts of /data.
neverallow appdomain drm_data_file:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } }
{ create write setattr relabelfrom relabelto append unlink link rename };
neverallow { appdomain -platform_app }
apk_data_file:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } }
{ create write setattr relabelfrom relabelto append unlink link rename };
neverallow { appdomain -platform_app }
apk_private_data_file:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } }
{ create write setattr relabelfrom relabelto append unlink link rename };
neverallow { appdomain -platform_app }
apk_private_tmp_file:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } }
{ create write setattr relabelfrom relabelto append unlink link rename };
neverallow { appdomain -shell }
shell_data_file:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } }
{ create setattr relabelfrom relabelto append unlink link rename };
neverallow { appdomain -bluetooth }
bluetooth_data_file:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } }
{ create write setattr relabelfrom relabelto append unlink link rename };
neverallow { domain -credstore -init } credstore_data_file:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } *;
neverallow appdomain
keystore_data_file:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } }
{ create write setattr relabelfrom relabelto append unlink link rename };
neverallow appdomain
systemkeys_data_file:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } }
{ create write setattr relabelfrom relabelto append unlink link rename };
neverallow appdomain
wifi_data_file:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } }
{ create write setattr relabelfrom relabelto append unlink link rename };
neverallow appdomain
dhcp_data_file:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } }
{ create write setattr relabelfrom relabelto append unlink link rename };
# access tmp apk files
neverallow { appdomain -platform_app }
apk_tmp_file:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } }
{ create write setattr relabelfrom relabelto append unlink link rename };
neverallow { appdomain -untrusted_app_all -platform_app -priv_app -isolated_app_all }
{ apk_tmp_file apk_private_tmp_file }:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } *;
neverallow { untrusted_app_all isolated_app_all } { apk_tmp_file apk_private_tmp_file }:{ { chr_file blk_file } dir fifo_file lnk_file sock_file } *;
neverallow { untrusted_app_all isolated_app_all } { apk_tmp_file apk_private_tmp_file }:file ~{ getattr read };
# Access to factory files.
neverallow appdomain efs_file:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } write;
neverallow { appdomain -shell } efs_file:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } read;
# Write to various pseudo file systems.
neverallow { appdomain -bluetooth -nfc }
sysfs:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } write;
neverallow appdomain
proc:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } write;
# Access to syslog(2) or /proc/kmsg.
neverallow appdomain kernel:system { syslog_read syslog_mod syslog_console };
# SELinux is not an API for apps to use
neverallow { appdomain -shell } *:security { compute_av check_context };
neverallow { appdomain -shell } *:netlink_selinux_socket *;
# Ability to perform any filesystem operation other than statfs(2).
# i.e. no mount(2), unmount(2), etc.
neverallow appdomain fs_type:filesystem ~getattr;
# prevent creation/manipulation of globally readable symlinks
neverallow appdomain {
apk_data_file
cache_file
cache_recovery_file
dev_type
rootfs
system_file
tmpfs
}:lnk_file { append create link unlink relabelfrom rename setattr write };
# Applications should use the activity model for receiving events
neverallow {
appdomain
-shell # bugreport
} input_device:chr_file ~getattr;
# Do not allow access to Bluetooth-related system properties except for a few allowed domains.
# neverallow rules for access to Bluetooth-related data files are above.
neverallow {
appdomain
-bluetooth
-system_app
} { bluetooth_audio_hal_prop bluetooth_a2dp_offload_prop bluetooth_prop exported_bluetooth_prop }:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# allow system_app to access Nfc-related system properties.
#line 196
#line 196
allow system_app property_socket:sock_file write;
#line 196
allow system_app init:unix_stream_socket connectto;
#line 196
#line 196
allow system_app nfc_prop:property_service set;
#line 196
#line 196
allow system_app nfc_prop:file { getattr open read map };
#line 196
#line 196
# allow system_app to access radio_config system properties.
#line 199
#line 199
allow system_app property_socket:sock_file write;
#line 199
allow system_app init:unix_stream_socket connectto;
#line 199
#line 199
allow system_app radio_control_prop:property_service set;
#line 199
#line 199
allow system_app radio_control_prop:file { getattr open read map };
#line 199
#line 199
# Apps cannot access proc_uid_time_in_state
neverallow appdomain proc_uid_time_in_state:file *;
# Apps cannot access proc_uid_concurrent_active_time
neverallow appdomain proc_uid_concurrent_active_time:file *;
# Apps cannot access proc_uid_concurrent_policy_time
neverallow appdomain proc_uid_concurrent_policy_time:file *;
# Apps cannot access proc_uid_cpupower
neverallow appdomain proc_uid_cpupower:file *;
# Apps may not read /proc/net/{tcp,tcp6,udp,udp6}. These files leak information across the
# application boundary. VPN apps may use the ConnectivityManager.getConnectionOwnerUid() API to
# perform UID lookups.
neverallow { appdomain -shell } proc_net_tcp_udp:file *;
# Apps cannot access bootstrap files. The bootstrap files are only for
# extremely early processes (like init, etc.) which are started before
# the runtime APEX is activated and Bionic libs are provided from there.
# If app process accesses (or even load/execute) the bootstrap files,
# it might cause problems such as ODR violation, etc.
neverallow appdomain system_bootstrap_lib_file:file
{ open read write append execute execute_no_trans map };
neverallow appdomain system_bootstrap_lib_file:dir
{ open read getattr search };
#line 1 "system/sepolicy/public/app_zygote.te"
# app_zygote is an auxiliary zygote process that is used to spawn
# isolated service processes for individual applications. It is
# spawned from the regular zygote process as a "child zygote".
type app_zygote, domain;
type app_zygote_tmpfs, file_type;
#line 1 "system/sepolicy/public/artd.te"
# ART service daemon.
type artd, domain;
#line 1 "system/sepolicy/public/asan_extract.te"
# asan_extract
#
# This command set moves the artifact corresponding to the current slot
# from /data/ota to /data/dalvik-cache.
#line 33
#line 1 "system/sepolicy/public/atrace.te"
type atrace, domain, coredomain;
#line 1 "system/sepolicy/public/audioserver.te"
# audioserver - audio services daemon
type audioserver, domain;
type audioserver_tmpfs, file_type;
# Allow audioserver to signal audio HAL processes and dump their stacks.
allow audioserver hal_audio_server:process signal;
# Allow audioserver to access sensorservice.
allow audioserver sensorservice_service:service_manager find;
allow audioserver system_server:unix_stream_socket { read write };
#line 1 "system/sepolicy/public/blkid.te"
# blkid called from vold
type blkid, domain;
#line 1 "system/sepolicy/public/blkid_untrusted.te"
# blkid for untrusted block devices
type blkid_untrusted, domain;
#line 1 "system/sepolicy/public/bluetooth.te"
# bluetooth subsystem
type bluetooth, domain;
#line 1 "system/sepolicy/public/bootanim.te"
# bootanimation oneshot service
type bootanim, domain;
type bootanim_exec, system_file_type, exec_type, file_type;
#line 5
typeattribute bootanim halclientdomain;
#line 5
typeattribute bootanim hal_configstore_client;
#line 5
#line 5
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 5
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 5
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 5
#line 5
typeattribute bootanim hal_configstore;
#line 5
# Find passthrough HAL implementations
#line 5
allow hal_configstore system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 5
allow hal_configstore vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 5
allow hal_configstore vendor_file:file { read open getattr execute map };
#line 5
#line 5
#line 6
typeattribute bootanim halclientdomain;
#line 6
typeattribute bootanim hal_graphics_allocator_client;
#line 6
#line 6
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 6
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 6
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 6
#line 6
typeattribute bootanim hal_graphics_allocator;
#line 6
# Find passthrough HAL implementations
#line 6
allow hal_graphics_allocator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 6
allow hal_graphics_allocator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 6
allow hal_graphics_allocator vendor_file:file { read open getattr execute map };
#line 6
#line 6
#line 7
typeattribute bootanim halclientdomain;
#line 7
typeattribute bootanim hal_graphics_composer_client;
#line 7
#line 7
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 7
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 7
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 7
#line 7
typeattribute bootanim hal_graphics_composer;
#line 7
# Find passthrough HAL implementations
#line 7
allow hal_graphics_composer system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 7
allow hal_graphics_composer vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 7
allow hal_graphics_composer vendor_file:file { read open getattr execute map };
#line 7
#line 7
#line 9
# Call the servicemanager and transfer references to it.
#line 9
allow bootanim servicemanager:binder { call transfer };
#line 9
# Allow servicemanager to send out callbacks
#line 9
allow servicemanager bootanim:binder { call transfer };
#line 9
# servicemanager performs getpidcon on clients.
#line 9
allow servicemanager bootanim:dir search;
#line 9
allow servicemanager bootanim:file { read open };
#line 9
allow servicemanager bootanim:process getattr;
#line 9
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 9
# all domains in domain.te.
#line 9
#line 10
# Call the server domain and optionally transfer references to it.
#line 10
allow bootanim surfaceflinger:binder { call transfer };
#line 10
# Allow the serverdomain to transfer references to the client on the reply.
#line 10
allow surfaceflinger bootanim:binder transfer;
#line 10
# Receive and use open files from the server.
#line 10
allow bootanim surfaceflinger:fd use;
#line 10
#line 11
# Call the server domain and optionally transfer references to it.
#line 11
allow bootanim audioserver:binder { call transfer };
#line 11
# Allow the serverdomain to transfer references to the client on the reply.
#line 11
allow audioserver bootanim:binder transfer;
#line 11
# Receive and use open files from the server.
#line 11
allow bootanim audioserver:fd use;
#line 11
#line 13
# Call the hwservicemanager and transfer references to it.
#line 13
allow bootanim hwservicemanager:binder { call transfer };
#line 13
# Allow hwservicemanager to send out callbacks
#line 13
allow hwservicemanager bootanim:binder { call transfer };
#line 13
# hwservicemanager performs getpidcon on clients.
#line 13
allow hwservicemanager bootanim:dir search;
#line 13
allow hwservicemanager bootanim:file { read open map };
#line 13
allow hwservicemanager bootanim:process getattr;
#line 13
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 13
# all domains in domain.te.
#line 13
allow bootanim gpu_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow bootanim gpu_device:dir { open getattr read search ioctl lock watch watch_reads };
allow bootanim sysfs_gpu:file { getattr open read ioctl lock map watch watch_reads };
# /oem access
allow bootanim oemfs:dir { open getattr read search ioctl lock watch watch_reads };
# boot animations on oem are stored with specific label
allow bootanim bootanim_oem_file:file { getattr open read ioctl lock map watch watch_reads };
allow bootanim audio_device:dir { open getattr read search ioctl lock watch watch_reads };
allow bootanim audio_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow bootanim audioserver_service:service_manager find;
allow bootanim surfaceflinger_service:service_manager find;
allow bootanim surfaceflinger:unix_stream_socket { read write };
# Allow access to ion memory allocation device
allow bootanim ion_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Allow access to DMA-BUF system heap
allow bootanim dmabuf_system_heap_device:chr_file { getattr open read ioctl lock map watch watch_reads };
allow bootanim hal_graphics_allocator:fd use;
# Fences
allow bootanim hal_graphics_composer:fd use;
# Read access to pseudo filesystems.
allow bootanim proc_meminfo:file { getattr open read ioctl lock map watch watch_reads };
# System file accesses.
allow bootanim system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 1 "system/sepolicy/public/bootstat.te"
# bootstat command
type bootstat, domain;
type bootstat_exec, system_file_type, exec_type, file_type;
#line 5
allow bootstat runtime_event_log_tags_file:file { getattr open read ioctl lock map watch watch_reads };
#line 5
# Allow persistent storage in /data/misc/bootstat.
allow bootstat bootstat_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow bootstat bootstat_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow bootstat metadata_file:dir search;
allow bootstat metadata_bootstat_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow bootstat metadata_bootstat_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# ToDo: TBI move access for the following to a system health HAL
# Allow access to /sys/fs/pstore/ and syslog
allow bootstat pstorefs:dir search;
allow bootstat pstorefs:file { getattr open read ioctl lock map watch watch_reads };
allow bootstat kernel:system syslog_read;
# Allow access to reading the logs to read aspects of system health
#line 23
allow bootstat logcat_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
#line 23
#line 23
allow bootstat logdr_socket:sock_file write;
#line 23
allow bootstat logd:unix_stream_socket connectto;
#line 23
#line 23
# Allow bootstat write to statsd.
#line 26
allow bootstat statsdw_socket:sock_file write;
#line 26
allow bootstat statsd:unix_dgram_socket sendto;
#line 26
neverallow {
domain
-bootstat
-init
} system_boot_reason_prop:property_service set;
#line 1 "system/sepolicy/public/bpfloader.te"
type bpfloader, domain, coredomain;
#line 1 "system/sepolicy/public/bufferhubd.te"
# bufferhubd
type bufferhubd, domain, mlstrustedsubject;
type bufferhubd_exec, system_file_type, exec_type, file_type;
#line 5
typeattribute bufferhubd halclientdomain;
#line 5
typeattribute bufferhubd hal_graphics_allocator_client;
#line 5
#line 5
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 5
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 5
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 5
#line 5
typeattribute bufferhubd hal_graphics_allocator;
#line 5
# Find passthrough HAL implementations
#line 5
allow hal_graphics_allocator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 5
allow hal_graphics_allocator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 5
allow hal_graphics_allocator vendor_file:file { read open getattr execute map };
#line 5
#line 5
# TODO(b/112338294): remove these after migrate to Binder
#line 8
# Mark the server domain as a PDX server.
#line 8
typeattribute bufferhubd pdx_bufferhub_client_server_type;
#line 8
# Allow the init process to create the initial endpoint socket.
#line 8
allow init pdx_bufferhub_client_endpoint_socket_type:unix_stream_socket { create bind };
#line 8
# Allow the server domain to use the endpoint socket and accept connections on it.
#line 8
# Not using macro like "rw_socket_perms_no_ioctl" because it provides more rights
#line 8
# than we need (e.g. we don"t need "bind" or "connect").
#line 8
allow bufferhubd pdx_bufferhub_client_endpoint_socket_type:unix_stream_socket { read getattr write setattr lock append getopt setopt shutdown listen accept };
#line 8
# Allow the server domain to apply security context label to the channel socket pair (allow process to use setsockcreatecon_raw()).
#line 8
allow bufferhubd self:process setsockcreate;
#line 8
# Allow the server domain to create a client channel socket.
#line 8
allow bufferhubd pdx_bufferhub_client_channel_socket_type:unix_stream_socket { create { { ioctl read getattr write setattr lock append bind connect getopt setopt shutdown map } listen accept } };
#line 8
# Prevent other processes from claiming to be a server for the same service.
#line 8
neverallow {domain -bufferhubd} pdx_bufferhub_client_endpoint_socket_type:unix_stream_socket { listen accept };
#line 8
#line 9
#line 9
# Allow client to open the service endpoint file.
#line 9
allow bufferhubd pdx_performance_client_endpoint_dir_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 9
allow bufferhubd pdx_performance_client_endpoint_socket_type:sock_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 9
# Allow the client to connect to endpoint socket.
#line 9
allow bufferhubd pdx_performance_client_endpoint_socket_type:unix_stream_socket { connectto read write shutdown };
#line 9
#line 9
#line 9
# Allow the client to use the PDX channel socket.
#line 9
# Not using macro like "rw_socket_perms_no_ioctl" because it provides more rights
#line 9
# than we need (e.g. we don"t need "bind" or "connect").
#line 9
allow bufferhubd pdx_performance_client_channel_socket_type:unix_stream_socket { read getattr write setattr lock append getopt setopt shutdown };
#line 9
# Client needs to use an channel event fd from the server.
#line 9
allow bufferhubd pdx_performance_client_server_type:fd use;
#line 9
# Servers may receive sync fences, gralloc buffers, etc, from clients.
#line 9
# This could be tightened on a per-server basis, but keeping track of service
#line 9
# clients is error prone.
#line 9
allow pdx_performance_client_server_type bufferhubd:fd use;
#line 9
#line 9
# Access the GPU.
allow bufferhubd gpu_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Access /dev/ion
allow bufferhubd ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
# Receive sync fence FDs from hal_omx_server. Note that hal_omx_server never directly
# connects to bufferhubd via PDX. Instead, a VR app acts as a bridge between
# those two: it talks to hal_omx_server via Binder and talks to bufferhubd via PDX.
# Thus, there is no need to use pdx_client macro.
allow bufferhubd hal_omx_server:fd use;
# Codec2 is similar to OMX
allow bufferhubd hal_codec2_server:fd use;
#line 1 "system/sepolicy/public/camera_service_server.te"
#line 1
allow camera_service_server fwk_camera_hwservice:hwservice_manager { add find };
#line 1
allow camera_service_server hidl_base_hwservice:hwservice_manager add;
#line 1
neverallow { domain -camera_service_server } fwk_camera_hwservice:hwservice_manager add;
#line 1
#line 1 "system/sepolicy/public/cameraserver.te"
# cameraserver - camera daemon
type cameraserver, domain;
type cameraserver_exec, system_file_type, exec_type, file_type;
type cameraserver_tmpfs, file_type;
#line 6
# Call the servicemanager and transfer references to it.
#line 6
allow cameraserver servicemanager:binder { call transfer };
#line 6
# Allow servicemanager to send out callbacks
#line 6
allow servicemanager cameraserver:binder { call transfer };
#line 6
# servicemanager performs getpidcon on clients.
#line 6
allow servicemanager cameraserver:dir search;
#line 6
allow servicemanager cameraserver:file { read open };
#line 6
allow servicemanager cameraserver:process getattr;
#line 6
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 6
# all domains in domain.te.
#line 6
#line 7
# Call the server domain and optionally transfer references to it.
#line 7
allow cameraserver binderservicedomain:binder { call transfer };
#line 7
# Allow the serverdomain to transfer references to the client on the reply.
#line 7
allow binderservicedomain cameraserver:binder transfer;
#line 7
# Receive and use open files from the server.
#line 7
allow cameraserver binderservicedomain:fd use;
#line 7
#line 8
# Call the server domain and optionally transfer references to it.
#line 8
allow cameraserver appdomain:binder { call transfer };
#line 8
# Allow the serverdomain to transfer references to the client on the reply.
#line 8
allow appdomain cameraserver:binder transfer;
#line 8
# Receive and use open files from the server.
#line 8
allow cameraserver appdomain:fd use;
#line 8
#line 9
typeattribute cameraserver binderservicedomain;
#line 9
#line 11
typeattribute cameraserver halclientdomain;
#line 11
typeattribute cameraserver hal_camera_client;
#line 11
#line 11
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 11
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 11
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 11
#line 11
typeattribute cameraserver hal_camera;
#line 11
# Find passthrough HAL implementations
#line 11
allow hal_camera system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 11
allow hal_camera vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 11
allow hal_camera vendor_file:file { read open getattr execute map };
#line 11
#line 11
#line 13
typeattribute cameraserver halclientdomain;
#line 13
typeattribute cameraserver hal_graphics_allocator_client;
#line 13
#line 13
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 13
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 13
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 13
#line 13
typeattribute cameraserver hal_graphics_allocator;
#line 13
# Find passthrough HAL implementations
#line 13
allow hal_graphics_allocator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 13
allow hal_graphics_allocator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 13
allow hal_graphics_allocator vendor_file:file { read open getattr execute map };
#line 13
#line 13
allow cameraserver ion_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow cameraserver dmabuf_system_heap_device:chr_file { getattr open read ioctl lock map watch watch_reads };
# Talk with graphics composer fences
allow cameraserver hal_graphics_composer:fd use;
#line 21
allow cameraserver cameraserver_service:service_manager { add find };
#line 21
neverallow { domain -cameraserver } cameraserver_service:service_manager add;
#line 21
#line 21
# On debug builds with root, allow binder services to use binder over TCP.
#line 21
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 21
#line 21
#line 22
allow cameraserver fwk_camera_service:service_manager { add find };
#line 22
neverallow { domain -cameraserver } fwk_camera_service:service_manager add;
#line 22
#line 22
# On debug builds with root, allow binder services to use binder over TCP.
#line 22
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 22
#line 22
#line 23
allow cameraserver fwk_camera_hwservice:hwservice_manager { add find };
#line 23
allow cameraserver hidl_base_hwservice:hwservice_manager add;
#line 23
neverallow { domain -cameraserver } fwk_camera_hwservice:hwservice_manager add;
#line 23
allow cameraserver activity_service:service_manager find;
allow cameraserver appops_service:service_manager find;
allow cameraserver audioserver_service:service_manager find;
allow cameraserver batterystats_service:service_manager find;
allow cameraserver cameraproxy_service:service_manager find;
allow cameraserver mediaserver_service:service_manager find;
allow cameraserver package_native_service:service_manager find;
allow cameraserver permission_checker_service:service_manager find;
allow cameraserver processinfo_service:service_manager find;
allow cameraserver scheduling_policy_service:service_manager find;
allow cameraserver sensor_privacy_service:service_manager find;
allow cameraserver surfaceflinger_service:service_manager find;
allow cameraserver hidl_token_hwservice:hwservice_manager find;
allow cameraserver hal_camera_service:service_manager find;
allow cameraserver virtual_camera_service:service_manager find;
# Allow to talk with surfaceflinger through unix stream socket
allow cameraserver surfaceflinger:unix_stream_socket { read write };
###
### neverallow rules
###
# cameraserver should never execute any executable without a
# domain transition
neverallow cameraserver { file_type fs_type }:file execute_no_trans;
# The goal of the mediaserver split is to place media processing code into
# restrictive sandboxes with limited responsibilities and thus limited
# permissions. Example: Audioserver is only responsible for controlling audio
# hardware and processing audio content. Cameraserver does the same for camera
# hardware/content. Etc.
#
# Media processing code is inherently risky and thus should have limited
# permissions and be isolated from the rest of the system and network.
# Lengthier explanation here:
# https://android-developers.googleblog.com/2016/05/hardening-media-stack.html
neverallow cameraserver domain:{ udp_socket rawip_socket } *;
neverallow cameraserver { domain }:tcp_socket *;
# Allow shell commands from ADB for CTS testing/dumping
allow cameraserver adbd:fd use;
allow cameraserver adbd:unix_stream_socket { read write };
allow cameraserver shell:fd use;
allow cameraserver shell:unix_stream_socket { read write };
allow cameraserver shell:fifo_file { read write };
# Allow to talk with media codec
allow cameraserver mediametrics_service:service_manager find;
#line 75
typeattribute cameraserver halclientdomain;
#line 75
typeattribute cameraserver hal_codec2_client;
#line 75
#line 75
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 75
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 75
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 75
#line 75
typeattribute cameraserver hal_codec2;
#line 75
# Find passthrough HAL implementations
#line 75
allow hal_codec2 system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 75
allow hal_codec2 vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 75
allow hal_codec2 vendor_file:file { read open getattr execute map };
#line 75
#line 75
#line 76
typeattribute cameraserver halclientdomain;
#line 76
typeattribute cameraserver hal_omx_client;
#line 76
#line 76
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 76
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 76
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 76
#line 76
typeattribute cameraserver hal_omx;
#line 76
# Find passthrough HAL implementations
#line 76
allow hal_omx system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 76
allow hal_omx vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 76
allow hal_omx vendor_file:file { read open getattr execute map };
#line 76
#line 76
#line 77
typeattribute cameraserver halclientdomain;
#line 77
typeattribute cameraserver hal_allocator_client;
#line 77
#line 77
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 77
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 77
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 77
#line 77
typeattribute cameraserver hal_allocator;
#line 77
# Find passthrough HAL implementations
#line 77
allow hal_allocator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 77
allow hal_allocator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 77
allow hal_allocator vendor_file:file { read open getattr execute map };
#line 77
#line 77
# Allow shell commands from ADB for CTS testing/dumping
#line 84
#line 1 "system/sepolicy/public/charger.te"
type charger, charger_type, domain;
type charger_exec, system_file_type, exec_type, file_type;
# The system charger is a client of HIDL health HAL.
#line 5
typeattribute charger halclientdomain;
#line 5
typeattribute charger hal_health_client;
#line 5
#line 5
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 5
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 5
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 5
#line 5
typeattribute charger hal_health;
#line 5
# Find passthrough HAL implementations
#line 5
allow hal_health system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 5
allow hal_health vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 5
allow hal_health vendor_file:file { read open getattr execute map };
#line 5
#line 5
#line 1 "system/sepolicy/public/charger_type.te"
# Write to /dev/kmsg
allow charger_type kmsg_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Read access to pseudo filesystems.
#line 5
allow charger_type rootfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 5
allow charger_type rootfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 5
#line 6
allow charger_type cgroup:dir { open getattr read search ioctl lock watch watch_reads };
#line 6
allow charger_type cgroup:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 6
#line 7
allow charger_type cgroup_v2:dir { open getattr read search ioctl lock watch watch_reads };
#line 7
allow charger_type cgroup_v2:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 7
# Allow to read /sys/class/power_supply directory
allow charger_type sysfs_type:dir { open getattr read search ioctl lock watch watch_reads };
allow charger_type self:{ capability cap_userns } {
sys_boot
sys_tty_config
};
#line 17
# TODO(b/115946999): Remove /sys/power/* permissions once CONFIG_PM_WAKELOCKS is
#line 17
# deprecated.
#line 17
# Access /sys/power/wake_lock and /sys/power/wake_unlock
#line 17
allow charger_type sysfs_wake_lock:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 17
# Accessing these files requires CAP_BLOCK_SUSPEND
#line 17
allow charger_type self:{ capability2 cap2_userns } block_suspend;
#line 17
# system_suspend permissions
#line 17
#line 17
# Call the server domain and optionally transfer references to it.
#line 17
allow charger_type system_suspend_server:binder { call transfer };
#line 17
# Allow the serverdomain to transfer references to the client on the reply.
#line 17
allow system_suspend_server charger_type:binder transfer;
#line 17
# Receive and use open files from the server.
#line 17
allow charger_type system_suspend_server:fd use;
#line 17
#line 17
allow charger_type system_suspend_hwservice:hwservice_manager find;
#line 17
# halclientdomain permissions
#line 17
#line 17
# Call the hwservicemanager and transfer references to it.
#line 17
allow charger_type hwservicemanager:binder { call transfer };
#line 17
# Allow hwservicemanager to send out callbacks
#line 17
allow hwservicemanager charger_type:binder { call transfer };
#line 17
# hwservicemanager performs getpidcon on clients.
#line 17
allow hwservicemanager charger_type:dir search;
#line 17
allow hwservicemanager charger_type:file { read open map };
#line 17
allow hwservicemanager charger_type:process getattr;
#line 17
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 17
# all domains in domain.te.
#line 17
#line 17
#line 17
allow charger_type hwservicemanager_prop:file { getattr open read map };
#line 17
#line 17
allow charger_type hidl_manager_hwservice:hwservice_manager find;
#line 17
# AIDL suspend hal permissions
#line 17
allow charger_type hal_system_suspend_service:service_manager find;
#line 17
#line 17
# Call the servicemanager and transfer references to it.
#line 17
allow charger_type servicemanager:binder { call transfer };
#line 17
# Allow servicemanager to send out callbacks
#line 17
allow servicemanager charger_type:binder { call transfer };
#line 17
# servicemanager performs getpidcon on clients.
#line 17
allow servicemanager charger_type:dir search;
#line 17
allow servicemanager charger_type:file { read open };
#line 17
allow servicemanager charger_type:process getattr;
#line 17
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 17
# all domains in domain.te.
#line 17
#line 17
allow charger_type self:netlink_kobject_uevent_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# Read/write to /sys/power/state
allow charger_type sysfs_power:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 24
allow charger_type sysfs_batteryinfo:dir { open getattr read search ioctl lock watch watch_reads };
#line 24
allow charger_type sysfs_batteryinfo:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 24
# Read /sys/fs/pstore/console-ramoops
# Don't worry about overly broad permissions for now, as there's
# only one file in /sys/fs/pstore
allow charger_type pstorefs:dir { open getattr read search ioctl lock watch watch_reads };
allow charger_type pstorefs:file { getattr open read ioctl lock map watch watch_reads };
allow charger_type graphics_device:dir { open getattr read search ioctl lock watch watch_reads };
allow charger_type graphics_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow charger_type input_device:dir { open getattr read search ioctl lock watch watch_reads };
allow charger_type input_device:chr_file { getattr open read ioctl lock map watch watch_reads };
allow charger_type tty_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow charger_type proc_sysrq:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 1 "system/sepolicy/public/charger_vendor.te"
# Context when health HAL runs charger mode
type charger_vendor, charger_type, domain;
#line 4
typeattribute charger_vendor halserverdomain;
#line 4
typeattribute charger_vendor hal_health_server;
#line 4
typeattribute charger_vendor hal_health;
#line 4
typeattribute charger_vendor bpfdomain;
#line 1 "system/sepolicy/public/crash_dump.te"
type crash_dump, domain;
type crash_dump_exec, system_file_type, exec_type, file_type;
# crash_dump might inherit CAP_SYS_PTRACE from a privileged process,
# which will result in an audit log even when it's allowed to trace.
dontaudit crash_dump self:{ capability cap_userns } { sys_ptrace };
#line 13
# Use inherited file descriptors
allow crash_dump domain:fd use;
# Read/write IPC pipes inherited from crashing processes.
allow crash_dump domain:fifo_file { read write };
# Append to pipes given to us by processes requesting dumps (e.g. dumpstate)
allow crash_dump domain:fifo_file { append };
# Read information from /proc/$PID.
allow crash_dump domain:process getattr;
#line 27
allow crash_dump domain:dir { open getattr read search ioctl lock watch watch_reads };
#line 27
allow crash_dump domain:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 27
allow crash_dump exec_type:file { getattr open read ioctl lock map watch watch_reads };
# Read /data/dalvik-cache.
allow crash_dump dalvikcache_data_file:dir { search getattr };
allow crash_dump dalvikcache_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Read APEX data directories.
allow crash_dump apex_module_data_file:dir { getattr search };
# Read uptime
allow crash_dump proc_uptime:file { getattr open read ioctl lock map watch watch_reads };
# Read APK files.
#line 41
allow crash_dump apk_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 41
allow crash_dump apk_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 41
;
# Read all /vendor
#line 44
allow crash_dump { vendor_file same_process_hal_file }:dir { open getattr read search ioctl lock watch watch_reads };
#line 44
allow crash_dump { vendor_file same_process_hal_file }:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 44
# Read all /data/local/tests
#line 47
allow crash_dump shell_test_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 47
allow crash_dump shell_test_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 47
# Talk to tombstoned
#line 50
allow crash_dump tombstoned_crash_socket:sock_file write;
#line 50
allow crash_dump tombstoned:unix_stream_socket connectto;
#line 50
# Talk to ActivityManager.
#line 53
allow crash_dump system_ndebug_socket:sock_file write;
#line 53
allow crash_dump system_server:unix_stream_socket connectto;
#line 53
# Append to ANR files.
allow crash_dump anr_data_file:file { append getattr };
# Append to tombstone files.
allow crash_dump tombstone_data_file:file { append getattr };
# crash_dump writes out logcat logs at the bottom of tombstones,
# which is super useful in some cases.
#line 63
allow crash_dump logdr_socket:sock_file write;
#line 63
allow crash_dump logd:unix_stream_socket connectto;
#line 63
# Crash dump is not intended to access the following files. Since these
# are WAI, suppress the denials to clean up the logs.
dontaudit crash_dump {
core_data_file_type
vendor_file_type
}:dir search;
dontaudit crash_dump system_data_file:{ lnk_file file } read;
dontaudit crash_dump property_type:file read;
###
### neverallow assertions
###
# A domain transition must occur for crash_dump to get the privileges needed to trace the process.
# Do not allow the execution of crash_dump without a domain transition.
neverallow domain crash_dump_exec:file execute_no_trans;
#line 1 "system/sepolicy/public/credstore.te"
type credstore, domain;
type credstore_exec, system_file_type, exec_type, file_type;
# credstore daemon
#line 5
# Call the servicemanager and transfer references to it.
#line 5
allow credstore servicemanager:binder { call transfer };
#line 5
# Allow servicemanager to send out callbacks
#line 5
allow servicemanager credstore:binder { call transfer };
#line 5
# servicemanager performs getpidcon on clients.
#line 5
allow servicemanager credstore:dir search;
#line 5
allow servicemanager credstore:file { read open };
#line 5
allow servicemanager credstore:process getattr;
#line 5
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 5
# all domains in domain.te.
#line 5
#line 6
typeattribute credstore binderservicedomain;
#line 6
#line 7
# Call the server domain and optionally transfer references to it.
#line 7
allow credstore system_server:binder { call transfer };
#line 7
# Allow the serverdomain to transfer references to the client on the reply.
#line 7
allow system_server credstore:binder transfer;
#line 7
# Receive and use open files from the server.
#line 7
allow credstore system_server:fd use;
#line 7
allow credstore credstore_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow credstore credstore_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
#line 12
allow credstore credstore_service:service_manager { add find };
#line 12
neverallow { domain -credstore } credstore_service:service_manager add;
#line 12
#line 12
# On debug builds with root, allow binder services to use binder over TCP.
#line 12
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 12
#line 12
allow credstore sec_key_att_app_id_provider_service:service_manager find;
allow credstore dropbox_service:service_manager find;
allow credstore authorization_service:service_manager find;
allow credstore keystore:keystore2 get_auth_token;
#line 18
allow credstore cgroup:dir { open getattr read search ioctl lock watch watch_reads };
#line 18
allow credstore cgroup:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 18
#line 19
allow credstore cgroup_v2:dir { open getattr read search ioctl lock watch watch_reads };
#line 19
allow credstore cgroup_v2:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 19
#line 1 "system/sepolicy/public/device.te"
# Device types
type device, dev_type, fs_type;
type ashmem_device, dev_type, mlstrustedobject;
type ashmem_libcutils_device, dev_type, mlstrustedobject;
type audio_device, dev_type;
type binder_device, dev_type, mlstrustedobject;
type hwbinder_device, dev_type, mlstrustedobject, isolated_compute_allowed_device;
type vndbinder_device, dev_type;
type block_device, dev_type;
type bt_device, dev_type;
type camera_device, dev_type;
type dm_device, dev_type;
type ublk_block_device, dev_type;
type dm_user_device, dev_type;
type ublk_control_device, dev_type;
type keychord_device, dev_type;
type loop_control_device, dev_type;
type loop_device, dev_type;
type pmsg_device, dev_type, mlstrustedobject;
type radio_device, dev_type;
type ram_device, dev_type;
type rtc_device, dev_type;
type vd_device, dev_type;
type vold_device, dev_type;
type console_device, dev_type;
type fscklogs, dev_type;
# GPU (used by most UI apps)
type gpu_device, dev_type, mlstrustedobject;
type graphics_device, dev_type;
type hw_random_device, dev_type;
type input_device, dev_type;
type port_device, dev_type;
type lowpan_device, dev_type;
type mtp_device, dev_type, mlstrustedobject;
type nfc_device, dev_type;
type ptmx_device, dev_type, mlstrustedobject;
type kmsg_device, dev_type, mlstrustedobject;
type kmsg_debug_device, dev_type;
type null_device, dev_type, mlstrustedobject;
type random_device, dev_type, mlstrustedobject;
type secure_element_device, dev_type;
type sensors_device, dev_type;
type serial_device, dev_type;
type socket_device, dev_type;
type owntty_device, dev_type, mlstrustedobject;
type tty_device, dev_type;
type video_device, dev_type;
type zero_device, dev_type, mlstrustedobject;
type fuse_device, dev_type, mlstrustedobject;
type iio_device, dev_type;
type ion_device, dev_type, mlstrustedobject, isolated_compute_allowed_device;
type dmabuf_heap_device, dmabuf_heap_device_type, dev_type, mlstrustedobject;
type dmabuf_system_heap_device, dmabuf_heap_device_type, dev_type, mlstrustedobject, isolated_compute_allowed_device;
type dmabuf_system_secure_heap_device, dmabuf_heap_device_type, dev_type, mlstrustedobject;
type qtaguid_device, dev_type;
type watchdog_device, dev_type;
type uhid_device, dev_type, mlstrustedobject;
type uio_device, dev_type;
type tun_device, dev_type, mlstrustedobject;
type usbaccessory_device, dev_type, mlstrustedobject;
type usb_device, dev_type, mlstrustedobject;
type usb_serial_device, dev_type;
type gnss_device, dev_type;
type properties_device, dev_type;
type properties_serial, dev_type;
type property_info, dev_type;
type hidraw_device, dev_type;
# All devices have a uart for the hci
# attach service. The uart dev node
# varies per device. This type
# is used in per device policy
type hci_attach_dev, dev_type;
# All devices have a rpmsg device for
# achieving remoteproc and rpmsg modules
type rpmsg_device, dev_type;
# Partition layout block device
type root_block_device, dev_type;
# factory reset protection block device
type frp_block_device, dev_type;
# System block device mounted on /system.
# Documented at https://source.android.com/devices/bootloader/partitions
type system_block_device, dev_type;
# Recovery block device.
# Documented at https://source.android.com/devices/bootloader/partitions
type recovery_block_device, dev_type;
# boot block device.
# Documented at https://source.android.com/devices/bootloader/partitions
type boot_block_device, dev_type;
# dtbo block device, type used for getting DTBO information for AVF.
# Documented at https://source.android.com/docs/core/architecture/dto/partitions
type dtbo_block_device, dev_type;
# Userdata block device mounted on /data.
# Documented at https://source.android.com/devices/bootloader/partitions
type userdata_block_device, dev_type;
# Zoned block device.
type zoned_block_device, dev_type;
# Cache block device mounted on /cache.
# Documented at https://source.android.com/devices/bootloader/partitions
type cache_block_device, dev_type;
# Block device for any swap partition.
type swap_block_device, dev_type;
# Metadata block device mounted on /metadata, used for encryption metadata and
# various other purposes.
# Documented at https://source.android.com/devices/bootloader/partitions
type metadata_block_device, dev_type;
# The 'misc' partition used by recovery and A/B.
# Documented at https://source.android.com/devices/bootloader/partitions
type misc_block_device, dev_type;
# 'super' partition to be used for logical partitioning.
type super_block_device, super_block_device_type, dev_type;
# sdcard devices; normally vold uses the vold_block_device label and creates a
# separate device node. gsid, however, accesses the original devide node
# created through uevents, so we use a separate label.
type sdcard_block_device, dev_type;
# Userdata device file for filesystem tunables
type userdata_sysdev, dev_type;
# Root disk file for disk tunables
type rootdisk_sysdev, dev_type;
# vfio device
type vfio_device, dev_type;
#line 1 "system/sepolicy/public/dhcp.te"
type dhcp, domain;
type dhcp_exec, system_file_type, exec_type, file_type;
#line 4
typeattribute dhcp netdomain;
#line 4
allow dhcp cgroup:dir { create write add_name };
allow dhcp cgroup_v2:dir { create write add_name };
allow dhcp self:{ capability cap_userns } { setgid setuid net_admin net_raw net_bind_service };
allow dhcp self:packet_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow dhcp self:netlink_route_socket nlmsg_write;
allow dhcp shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow dhcp system_file:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow dhcp vendor_file:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# dhcpcd runs dhcpcd-hooks/*, which runs getprop / setprop (toolbox_exec)
allow dhcp toolbox_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# For /proc/sys/net/ipv4/conf/*/promote_secondaries
allow dhcp proc_net_type:file write;
allow dhcp dhcp_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow dhcp dhcp_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# PAN connections
allow dhcp netd:fd use;
allow dhcp netd:fifo_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow dhcp netd:{ { udp_socket unix_dgram_socket } unix_stream_socket } { read write };
allow dhcp netd:{ netlink_kobject_uevent_socket netlink_route_socket netlink_nflog_socket } { read write };
#line 1 "system/sepolicy/public/display_service_server.te"
#line 1
allow display_service_server fwk_display_hwservice:hwservice_manager { add find };
#line 1
allow display_service_server hidl_base_hwservice:hwservice_manager add;
#line 1
neverallow { domain -display_service_server } fwk_display_hwservice:hwservice_manager add;
#line 1
#line 1 "system/sepolicy/public/dnsmasq.te"
# DNS, DHCP services
type dnsmasq, domain;
type dnsmasq_exec, system_file_type, exec_type, file_type;
#line 5
typeattribute dnsmasq netdomain;
#line 5
allowxperm dnsmasq self:udp_socket ioctl
#line 6
{
#line 6
# qualcomm rmnet ioctls
#line 6
0x00006900 0x00006902
#line 6
# socket ioctls
#line 6
0x0000890b 0x0000890c 0x0000890d 0x00008911 0x00008914 0x00008916
#line 6
0x00008918 0x0000891a 0x0000891c 0x0000891d 0x0000891e 0x0000891f
#line 6
0x00008920 0x00008922 0x00008923 0x00008924 0x00008925 0x00008926
#line 6
0x00008927 0x00008929 0x00008930 0x00008931 0x00008932
#line 6
0x00008934 0x00008935 0x00008936 0x00008937 0x00008939 0x00008940 0x00008941
#line 6
0x00008943 0x00008946 0x00008947 0x00008948 0x00008949 0x0000894a
#line 6
0x0000894b 0x00008953 0x00008954 0x00008955 0x00008960 0x00008961 0x00008962 0x00008970
#line 6
0x00008971 0x00008980 0x00008981 0x00008982 0x00008983 0x00008990
#line 6
0x00008991 0x00008992 0x00008993 0x00008994
#line 6
0x00008995 0x000089a0 0x000089a1 0x000089a2 0x000089a3 0x000089b0
#line 6
# device and protocol specific ioctls
#line 6
0x000089f0-0x000089ff
#line 6
0x000089e0-0x000089ef
#line 6
# Wireless extension ioctls
#line 6
0x00008b00 0x00008b02 0x00008b04 0x00008b06 0x00008b08 0x00008b0a
#line 6
0x00008b0c 0x00008b0e 0x00008b10 0x00008b14 0x00008b15 0x00008b16 0x00008b17
#line 6
0x00008b18 0x00008b19 0x00008b1a 0x00008b1b 0x00008b1c 0x00008b1d
#line 6
0x00008b20 0x00008b22 0x00008b24 0x00008b26 0x00008b28 0x00008b2a
#line 6
0x00008b2b 0x00008b2c 0x00008b30 0x00008b31 0x00008b32 0x00008b33
#line 6
0x00008b34 0x00008b35 0x00008b36
#line 6
# Dev private ioctl i.e. hardware specific ioctls
#line 6
0x00008be0-0x00008bff
#line 6
};
# TODO: Run with dhcp group to avoid need for dac_override.
allow dnsmasq self:{ capability cap_userns } { dac_override dac_read_search };
allow dnsmasq self:{ capability cap_userns } { net_admin net_raw net_bind_service setgid setuid };
allow dnsmasq dhcp_data_file:dir { open search write add_name remove_name lock };
allow dnsmasq dhcp_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Inherit and use open files from netd.
allow dnsmasq netd:fd use;
allow dnsmasq netd:fifo_file { getattr read write };
# TODO: Investigate whether these inherited sockets should be closed on exec.
allow dnsmasq netd:netlink_kobject_uevent_socket { read write };
allow dnsmasq netd:netlink_nflog_socket { read write };
allow dnsmasq netd:netlink_route_socket { read write };
allow dnsmasq netd:unix_stream_socket { getattr read write };
allow dnsmasq netd:unix_dgram_socket { read write };
allow dnsmasq netd:udp_socket { read write };
#line 1 "system/sepolicy/public/domain.te"
# Rules for all domains.
# Allow reaping by init.
allow domain init:process sigchld;
# Intra-domain accesses.
allow domain self:process {
fork
sigchld
sigkill
sigstop
signull
signal
getsched
setsched
getsession
getpgid
setpgid
getcap
setcap
getattr
setrlimit
};
allow domain self:fd use;
allow domain proc:dir { open getattr read search ioctl lock watch watch_reads };
allow domain proc_net_type:dir search;
#line 27
allow domain self:dir { open getattr read search ioctl lock watch watch_reads };
#line 27
allow domain self:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 27
allow domain self:{ fifo_file file } { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow domain self:unix_dgram_socket { { create { ioctl read getattr write setattr lock append bind connect getopt setopt shutdown map } } sendto };
allow domain self:unix_stream_socket { { create { { ioctl read getattr write setattr lock append bind connect getopt setopt shutdown map } listen accept } } connectto };
# Inherit or receive open files from others.
allow domain init:fd use;
#line 52
#line 58
# Allow everyone to read aconfig flags
#line 61
allow domain device_config_aconfig_flags_prop:file { getattr open read map };
#line 61
;
# Root fs.
allow domain tmpfs:dir { getattr search };
allow domain rootfs:dir search;
allow domain rootfs:lnk_file { read getattr };
# Device accesses.
allow domain device:dir search;
allow domain dev_type:lnk_file { getattr open read ioctl lock map watch watch_reads };
allow domain devpts:dir search;
allow domain dmabuf_heap_device:dir { open getattr read search ioctl lock watch watch_reads };
allow domain socket_device:dir { open getattr read search ioctl lock watch watch_reads };
allow domain owntty_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow domain null_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow domain zero_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# /dev/ashmem is being deprecated by means of constraining and eventually
# removing all "open" permissions. We preserve the other permissions.
allow domain ashmem_device:chr_file { getattr read ioctl lock map append write };
# This device is used by libcutils, which is accessible to everyone.
allow domain ashmem_libcutils_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# /dev/binder can be accessed by ... everyone! :)
allow { domain -hwservicemanager -vndservicemanager } binder_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 86
allow {domain -hwservicemanager -vndservicemanager } servicemanager_prop:file { getattr open read map };
#line 86
# Restrict binder ioctls to an allowlist. Additional ioctl commands may be
# added to individual domains, but this sets safe defaults for all processes.
allowxperm domain binder_device:chr_file ioctl { {
#line 90
0xc0306201 0x40086203 0x40046205
#line 90
0x40046206 0x40046207 0x40046208
#line 90
0xc0046209 0xc018620b 0xc018620c
#line 90
0x4018620d 0x40046210
#line 90
0xc0486211
#line 90
} };
# /dev/binderfs needs to be accessed by everyone too!
allow domain binderfs:dir { getattr search };
allow domain binderfs_logs_proc:dir search;
allow domain binderfs_features:dir search;
allow domain binderfs_features:file { getattr open read ioctl lock map watch watch_reads };
allow { domain -servicemanager -vndservicemanager -isolated_app } hwbinder_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow domain ptmx_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow domain random_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow domain proc_random:dir { open getattr read search ioctl lock watch watch_reads };
allow domain proc_random:file { getattr open read ioctl lock map watch watch_reads };
allow domain properties_device:dir { search getattr };
allow domain properties_serial:file { getattr open read ioctl lock map watch watch_reads };
allow domain property_info:file { getattr open read ioctl lock map watch watch_reads };
# Let everyone read log properties, so that liblog can avoid sending unloggable
# messages to logd.
#line 109
allow domain log_property_type:file { getattr open read map };
#line 109
dontaudit domain property_type:file audit_access;
allow domain property_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
allow domain init:key search;
allow domain vold:key search;
# logd access
#line 117
#line 117
allow domain logdw_socket:sock_file write;
#line 117
allow domain logd:unix_dgram_socket sendto;
#line 117
#line 117
allow domain pmsg_device:chr_file { open append write lock map };
#line 117
# Directory/link file access for path resolution.
allow domain {
system_file
system_lib_file
system_seccomp_policy_file
system_security_cacerts_file
}:dir { open getattr read search ioctl lock watch watch_reads };
allow domain system_file:lnk_file { getattr read };
# Global access to /system/etc/security/cacerts/*, /system/etc/seccomp_policy/*, /system/lib[64]/*,
# /(system|product|system_ext)/etc/(group|passwd), linker and its config.
allow domain system_seccomp_policy_file:file { getattr open read ioctl lock map watch watch_reads };
# cacerts are accessible from public Java API.
allow domain system_security_cacerts_file:file { getattr open read ioctl lock map watch watch_reads };
allow domain system_group_file:file { getattr open read ioctl lock map watch watch_reads };
allow domain system_passwd_file:file { getattr open read ioctl lock map watch watch_reads };
allow domain system_linker_exec:file { execute read open getattr map };
allow domain system_linker_config_file:file { getattr open read ioctl lock map watch watch_reads };
allow domain system_lib_file:file { execute read open getattr map };
# To allow following symlinks at /system/bin/linker, /system/lib/libc.so, etc.
allow domain system_linker_exec:lnk_file { read open getattr };
allow domain system_lib_file:lnk_file { read open getattr };
allow domain system_event_log_tags_file:file { getattr open read ioctl lock map watch watch_reads };
allow { appdomain coredomain } system_file:file { execute read open getattr map };
# Make sure system/vendor split doesn not affect non-treble
# devices
#line 148
allow domain system_file:file { execute read open getattr map };
#line 148
allow domain vendor_file_type:dir { search getattr };
#line 148
allow domain vendor_file_type:file { execute read open getattr map };
#line 148
allow domain vendor_file_type:lnk_file { getattr read };
#line 153
# All domains are allowed to open and read directories
# that contain HAL implementations (e.g. passthrough
# HALs require clients to have these permissions)
allow domain vendor_hal_file:dir { open getattr read search ioctl lock watch watch_reads };
# Everyone can read and execute all same process HALs
allow domain same_process_hal_file:dir { open getattr read search ioctl lock watch watch_reads };
allow {
domain
-coredomain # access is explicitly granted to individual coredomains
} same_process_hal_file:file { execute read open getattr map };
# Any process can load vndk-sp libraries, which are system libraries
# used by same process HALs
allow domain vndk_sp_file:dir { open getattr read search ioctl lock watch watch_reads };
allow domain vndk_sp_file:file { execute read open getattr map };
# All domains get access to /vendor/etc
allow domain vendor_configs_file:dir { open getattr read search ioctl lock watch watch_reads };
allow domain vendor_configs_file:file { read open getattr map };
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 176
#line 176
# Allow all domains to be able to follow /system/vendor and/or
#line 176
# /vendor/odm symlinks.
#line 176
allow domain vendor_file_type:lnk_file { getattr open read };
#line 176
#line 176
# This is required to be able to search & read /vendor/lib64
#line 176
# in order to lookup vendor libraries. The execute permission
#line 176
# for coredomains is granted *only* for same process HALs
#line 176
allow domain vendor_file:dir { getattr search };
#line 176
#line 176
# Allow reading and executing out of /vendor to all vendor domains
#line 176
allow { domain -coredomain } vendor_file_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 176
allow { domain -coredomain } vendor_file_type:file { read open getattr execute map };
#line 176
allow { domain -coredomain } vendor_file_type:lnk_file { getattr read };
#line 176
#line 176
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 190
# read and stat any sysfs symlinks
allow domain sysfs:lnk_file { getattr read };
# libc references /system/usr/share/zoneinfo for timezone related information.
# This directory is considered to be a VNDK-stable
allow domain { system_zoneinfo_file }:file { getattr open read ioctl lock map watch watch_reads };
allow domain { system_zoneinfo_file }:dir { open getattr read search ioctl lock watch watch_reads };
# Lots of processes access current CPU information
#line 201
allow domain sysfs_devices_system_cpu:dir { open getattr read search ioctl lock watch watch_reads };
#line 201
allow domain sysfs_devices_system_cpu:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 201
#line 203
allow domain sysfs_usb:dir { open getattr read search ioctl lock watch watch_reads };
#line 203
allow domain sysfs_usb:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 203
;
# If kernel CONFIG_TRANSPARENT_HUGEPAGE is enabled, libjemalloc5 (statically
# included by libc) reads /sys/kernel/mm/transparent_hugepage/enabled.
allow domain sysfs_transparent_hugepage:dir search;
allow domain sysfs_transparent_hugepage:file { getattr open read ioctl lock map watch watch_reads };
# Allow search access, and sometimes getattr access, to various directories
# under /data. We are fairly lenient in allowing search access to top-level
# dirs that commonly need to be traversed to get access to the "real" files, as
# this greatly simplifies the policy and doesn't open up much attack surface.
#line 214
allow domain system_data_file:dir getattr;
#line 216
allow { coredomain appdomain } system_data_file:dir getattr;
# Anything that accesses anything in /data needs search access to /data itself.
# This includes vendor components, as they need to access /data/vendor.
allow domain system_data_root_file:dir { search getattr } ;
# system_data_file is the default type for directories in /data. Anything
# accessing data files with a more specific type often has to traverse a
# system_data_file directory such as /data/misc to get there.
allow domain system_data_file:dir search;
# Anything that accesses files in /data/user (and /data/user_de, etc.) needs
# search access to these directories themselves. getattr access is sometimes
# needed too.
allow { coredomain appdomain } system_userdir_file:dir { search getattr };
# Anything that accesses files in /data/media needs search access to /data/media
# itself.
allow { coredomain appdomain } media_userdir_file:dir search;
# TODO restrict this to non-coredomain
allow domain vendor_userdir_file:dir { getattr search };
allow domain vendor_data_file:dir { getattr search };
# required by the dynamic linker
allow domain proc:lnk_file { getattr read };
# /proc/cpuinfo
allow domain proc_cpuinfo:file { getattr open read ioctl lock map watch watch_reads };
# /dev/cpu_variant:.*
allow domain dev_cpu_variant:file { getattr open read ioctl lock map watch watch_reads };
# profiling needs to read /proc/sys/kernel/perf_event_max_sample_rate
allow domain proc_perf:file { getattr open read ioctl lock map watch watch_reads };
# toybox loads libselinux which stats /sys/fs/selinux/
allow domain selinuxfs:dir search;
allow domain selinuxfs:file getattr;
allow domain sysfs:dir search;
allow domain selinuxfs:filesystem getattr;
# Almost all processes log tracing information to
# /sys/kernel/debug/tracing/trace_marker
# The reason behind this is documented in b/6513400
allow domain debugfs:dir search;
allow domain debugfs_tracing:dir search;
allow domain debugfs_tracing_debug:dir search;
allow domain debugfs_trace_marker:file { open append write lock map };
# Linux lockdown mode offered coarse-grained definitions for access controls. In
# previous versions of the policy, the integrity permission was neverallowed.
# It was found that this permission mainly duplicates pre-existing rules in
# the policy (see b/285443587). Additionally, some access were found to be
# required (b/269377822). The access vector was removed from kernel 5.16
# onwards. Grant unconditional access, these rules should be removed from the
# policy once no kernel <5.16 are supported.
allow domain self:lockdown { confidentiality integrity };
# Filesystem access.
allow domain fs_type:filesystem getattr;
allow domain fs_type:dir getattr;
# Restrict all domains to an allowlist for common socket types. Additional
# ioctl commands may be added to individual domains, but this sets safe
# defaults for all processes. Note that granting this allowlist to domain does
# not grant the ioctl permission on these socket types. That must be granted
# separately.
allowxperm domain domain:{ icmp_socket rawip_socket tcp_socket udp_socket }
ioctl {
#line 281
{
#line 281
# Socket ioctls for gathering information about the interface
#line 281
0x00008906 0x00008907
#line 281
0x00008910 0x00008912 0x00008913 0x00008915 0x00008917 0x00008919
#line 281
0x0000891b 0x00008921 0x00008933 0x00008938 0x00008942
#line 281
# Wireless extension ioctls. Primarily get functions.
#line 281
0x00008b01 0x00008b05 0x00008b07 0x00008b09 0x00008b0b 0x00008b0d
#line 281
0x00008b0f 0x00008b11 0x00008b12 0x00008b13 0x00008b21 0x00008b23
#line 281
0x00008b25 0x00008b27 0x00008b29 0x00008b2d
#line 281
} {
#line 281
0x00005411 0x00005451 0x00005450 0x00005401 0x00005402 0x00005403 0x00005404 0x00005413 0x00005414
#line 281
0x0000540e 0x0000540b 0x00005410 0x0000540f
#line 281
} };
# default allowlist for unix sockets.
allowxperm domain { domain pdx_channel_socket_type }:{ unix_dgram_socket unix_stream_socket }
ioctl {
#line 284
0x00005411 0x00005451 0x00005450 0x00005401 0x00005413 0x00005414 0x0000541b
#line 284
};
# Restrict PTYs to only allowed ioctls.
# Note that granting this allowlist to domain does
# not grant the wider ioctl permission. That must be granted
# separately.
allowxperm domain devpts:chr_file ioctl {
#line 290
0x00005411 0x00005451 0x00005450 0x00005401 0x00005402 0x00005403 0x00005404 0x00005413 0x00005414
#line 290
0x0000540e 0x0000540b 0x00005410 0x0000540f
#line 290
};
# All domains must clearly enumerate what ioctls they use
# on filesystem objects (plain files, directories, symbolic links,
# named pipes, and named sockets). We start off with a safe set.
allowxperm domain { file_type fs_type domain dev_type }:{ dir { file lnk_file sock_file fifo_file } blk_file } ioctl { 0x00005451 0x00005450 };
# If a domain has ioctl access to tun_device, it must clearly enumerate the
# ioctls used. Safe defaults are listed below.
allowxperm domain tun_device:chr_file ioctl { 0x00005451 0x00005450 };
# Allow a process to make a determination whether a file descriptor
# for a plain file or pipe (fifo_file) is a tty. Note that granting
# this allowlist to domain does not grant the ioctl permission to
# these files. That must be granted separately.
allowxperm domain { file_type fs_type }:file ioctl { 0x00005401 };
allowxperm domain domain:fifo_file ioctl { 0x00005401 };
# If a domain has access to perform an ioctl on a block device, allow these
# very common, benign ioctls
allowxperm domain dev_type:blk_file ioctl { 0x80081272 0x00001268 };
# Support sqlite F2FS specific optimizations
# ioctl permission on the specific file type is still required
# TODO: consider only compiling these rules if we know the
# /data partition is F2FS
allowxperm domain { file_type sdcard_type }:file ioctl {
0xf505
0xf502
0xf50c
0xf50e
0xf50d
0xf501
};
# Workaround for policy compiler being too aggressive and removing hwservice_manager_type
# when it's not explicitly used in allow rules
allow { domain -domain } hwservice_manager_type:hwservice_manager { add find };
# Workaround for policy compiler being too aggressive and removing vndservice_manager_type
# when it's not explicitly used in allow rules
allow { domain -domain } vndservice_manager_type:service_manager { add find };
# Under ASAN, processes will try to read /data, as the sanitized libraries are there.
# Under ASAN, /system/asan.options needs to be globally accessible.
# read APEX dir and stat any symlink pointing to APEXs.
allow domain apex_mnt_dir:dir { getattr search };
allow domain apex_mnt_dir:lnk_file { getattr open read ioctl lock map watch watch_reads };
# Allow everyone to read media server-configurable flags, so that libstagefright can be
# configured using server-configurable flags
#line 343
allow domain device_config_media_native_prop:file { getattr open read map };
#line 343
# Allow everyone to read from flag value boot snapshot files and general pb files
# The boot copy of the flag value files serves flag read traffic for all processes, thus
# needs to be readable by everybody. Also, the metadata directory will contain pb file
# that records where flag storage files are, so also needs to be readable by everbody.
allow domain { aconfig_storage_metadata_file }:file { getattr open read ioctl lock map watch watch_reads };
###
### neverallow rules
###
# All ioctls on file-like objects (except chr_file and blk_file) and
# sockets must be restricted to an allowlist.
neverallowxperm * *:{ dir { file lnk_file sock_file fifo_file } { socket tcp_socket udp_socket rawip_socket netlink_socket packet_socket key_socket unix_stream_socket unix_dgram_socket appletalk_socket netlink_route_socket netlink_tcpdiag_socket netlink_nflog_socket netlink_xfrm_socket netlink_selinux_socket netlink_audit_socket netlink_dnrt_socket netlink_kobject_uevent_socket tun_socket netlink_iscsi_socket netlink_fib_lookup_socket netlink_connector_socket netlink_netfilter_socket netlink_generic_socket netlink_scsitransport_socket netlink_rdma_socket netlink_crypto_socket sctp_socket icmp_socket ax25_socket ipx_socket netrom_socket atmpvc_socket x25_socket rose_socket decnet_socket atmsvc_socket rds_socket irda_socket pppox_socket llc_socket can_socket tipc_socket bluetooth_socket iucv_socket rxrpc_socket isdn_socket phonet_socket ieee802154_socket caif_socket alg_socket nfc_socket vsock_socket kcm_socket qipcrtr_socket smc_socket xdp_socket } blk_file } ioctl { 0 };
# b/68014825 and https://android-review.googlesource.com/516535
# rfc6093 says that processes should not use the TCP urgent mechanism
neverallowxperm domain domain:{ socket tcp_socket udp_socket rawip_socket netlink_socket packet_socket key_socket unix_stream_socket unix_dgram_socket appletalk_socket netlink_route_socket netlink_tcpdiag_socket netlink_nflog_socket netlink_xfrm_socket netlink_selinux_socket netlink_audit_socket netlink_dnrt_socket netlink_kobject_uevent_socket tun_socket netlink_iscsi_socket netlink_fib_lookup_socket netlink_connector_socket netlink_netfilter_socket netlink_generic_socket netlink_scsitransport_socket netlink_rdma_socket netlink_crypto_socket sctp_socket icmp_socket ax25_socket ipx_socket netrom_socket atmpvc_socket x25_socket rose_socket decnet_socket atmsvc_socket rds_socket irda_socket pppox_socket llc_socket can_socket tipc_socket bluetooth_socket iucv_socket rxrpc_socket isdn_socket phonet_socket ieee802154_socket caif_socket alg_socket nfc_socket vsock_socket kcm_socket qipcrtr_socket smc_socket xdp_socket } ioctl { 0x00008905 };
# TIOCSTI is only ever used for exploits. Block it.
# b/33073072, b/7530569
# http://www.openwall.com/lists/oss-security/2016/09/26/14
neverallowxperm * devpts:chr_file ioctl 0x00005412;
# Do not allow any domain other than init to create unlabeled files.
neverallow { domain -init -recovery } unlabeled:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } create;
# Limit device node creation to these allowed domains.
neverallow {
domain
-kernel
-init
-ueventd
-vold
} self:{ capability cap_userns } mknod;
# No process can map low memory (< CONFIG_LSM_MMAP_MIN_ADDR).
neverallow * self:memprotect mmap_zero;
# No domain needs mac_override as it is unused by SELinux.
neverallow * self:{ capability2 cap2_userns } mac_override;
# Disallow attempts to set contexts not defined in current policy
# This helps guarantee that unknown or dangerous contents will not ever
# be set.
neverallow * self:{ capability2 cap2_userns } mac_admin;
# Once the policy has been loaded there shall be none to modify the policy.
# It is sealed.
neverallow * kernel:security load_policy;
# Only init prior to switching context should be able to set enforcing mode.
# init starts in kernel domain and switches to init domain via setcon in
# the init.rc, so the setenforce occurs while still in kernel. After
# switching domains, there is never any need to setenforce again by init.
neverallow * kernel:security setenforce;
neverallow { domain -kernel } kernel:security setcheckreqprot;
# No booleans in AOSP policy, so no need to ever set them.
neverallow * kernel:security setbool;
# Adjusting the AVC cache threshold.
# Not presently allowed to anything in policy, but possibly something
# that could be set from init.rc.
neverallow { domain -init } kernel:security setsecparam;
# Only the kernel hwrng thread should be able to read from the HW RNG.
neverallow {
domain
-prng_seeder # PRNG seeder daemon periodically reseeds itself from HW RNG
-shell # For CTS, restricted to just getattr in shell.te
-ueventd # To create the /dev/hw_random file
} hw_random_device:chr_file *;
# b/78174219 b/64114943
neverallow {
domain
-shell # stat of /dev, getattr only
-ueventd
} keychord_device:chr_file *;
# Ensure that all entrypoint executables are in exec_type or postinstall_file.
neverallow * { file_type -exec_type -postinstall_file }:file entrypoint;
# The dynamic linker always calls access(2) on the path. Don't generate SElinux
# denials since the linker does not actually access the path in case the path
# does not exist or isn't accessible for the process.
dontaudit domain postinstall_mnt_dir:dir audit_access;
#Ensure that nothing in userspace can access /dev/port
neverallow {
domain
-shell # Shell user should not have any abilities outside of getattr
-ueventd
} port_device:chr_file *;
neverallow * port_device:chr_file ~{ create relabelto unlink setattr getattr };
# Only init should be able to configure kernel usermodehelpers or
# security-sensitive proc settings.
neverallow { domain -init } usermodehelper:file { append write };
neverallow { domain -init -ueventd } sysfs_usermodehelper:file { append write };
neverallow { domain -init -vendor_init } proc_security:file { append open read write };
# Init can't do anything with binder calls. If this neverallow rule is being
# triggered, it's probably due to a service with no SELinux domain.
neverallow * init:binder *;
neverallow * vendor_init:binder *;
# Binderfs logs contain sensitive information about other processes.
neverallow { domain -dumpstate -init -vendor_init } { binderfs_logs binderfs_logs_proc }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow { domain -dumpstate -init -vendor_init -system_server } binderfs_logs_stats:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Don't allow raw read/write/open access to block_device
# Rather force a relabel to a more specific type
neverallow { domain -kernel -init -recovery } block_device:blk_file { open read write };
# Do not allow renaming of block files or character files
# Ability to do so can lead to possible use in an exploit chain
# e.g. https://googleprojectzero.blogspot.com/2016/12/chrome-os-exploit-one-byte-overflow-and.html
neverallow * *:{ blk_file chr_file } rename;
# Don't allow raw read/write/open access to generic devices.
# Rather force a relabel to a more specific type.
neverallow domain device:chr_file { open read write };
# Files from cache should never be executed
neverallow domain { cache_file cache_backup_file cache_private_backup_file cache_recovery_file }:file execute;
# The test files and executables MUST not be accessible to any domain
neverallow { domain } nativetest_data_file:{ { chr_file blk_file } { file lnk_file sock_file fifo_file } } { append create link unlink relabelfrom rename setattr write };
neverallow domain nativetest_data_file:dir { add_name create link relabelfrom remove_name rename reparent rmdir setattr write };
neverallow { domain } nativetest_data_file:file { execute execute_no_trans };
neverallow { domain -shell -init -adbd } shell_test_data_file:{ { chr_file blk_file } { file lnk_file sock_file fifo_file } } { append create link unlink relabelfrom rename setattr write };
neverallow { domain -shell -init -adbd } shell_test_data_file:dir { add_name create link relabelfrom remove_name rename reparent rmdir setattr write };
neverallow { domain -shell -init -adbd -heapprofd -crash_dump } shell_test_data_file:file *;
neverallow heapprofd shell_test_data_file:file { { append create link unlink relabelfrom rename setattr write } { execute execute_no_trans } };
neverallow { domain -shell -init -adbd } shell_test_data_file:sock_file *;
# Only the init property service should write to /data/property and /dev/__properties__
neverallow { domain -init } property_data_file:dir { add_name create link relabelfrom remove_name rename reparent rmdir setattr write };
neverallow { domain -init } property_data_file:file { { append create link unlink relabelfrom rename setattr write } { execute execute_no_trans } };
neverallow { domain -init } property_type:file { { append create link unlink relabelfrom rename setattr write } { execute execute_no_trans } };
neverallow { domain -init } properties_device:file { { append create link unlink relabelfrom rename setattr write } { execute execute_no_trans } };
neverallow { domain -init } properties_serial:file { { append create link unlink relabelfrom rename setattr write } { execute execute_no_trans } };
# Nobody should be doing writes to /system & /vendor
# These partitions are intended to be read-only and must never be
# modified. Doing so would violate important Android security guarantees
# and invalidate dm-verity signatures.
neverallow {
domain
} {
system_file_type
vendor_file_type
exec_type
}:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } { create write setattr relabelfrom append unlink link rename };
neverallow { domain -kernel } { system_file_type vendor_file_type exec_type }:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } relabelto;
# Don't allow mounting on top of /system files or directories
neverallow * exec_type:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } mounton;
# Nothing should be writing to files in the rootfs.
neverallow * rootfs:file { create write setattr relabelto append unlink link rename };
# Restrict context mounts to specific types marked with
# the contextmount_type attribute.
neverallow * {fs_type -contextmount_type}:filesystem relabelto;
# Ensure that context mount types are not writable, to ensure that
# the write to /system restriction above is not bypassed via context=
# mount to another type.
neverallow * contextmount_type:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } }
{ create setattr relabelfrom relabelto append link rename };
neverallow { domain } contextmount_type:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } { write unlink };
# Do not allow service_manager add for default service labels.
# Instead domains should use a more specific type such as
# system_app_service rather than the generic type.
# New service_types are defined in {,hw,vnd}service.te and new mappings
# from service name to service_type are defined in {,hw,vnd}service_contexts.
neverallow * default_android_service:service_manager *;
neverallow * default_android_vndservice:service_manager *;
neverallow * default_android_hwservice:hwservice_manager *;
# Looking up the base class/interface of all HwBinder services is a bad idea.
# hwservicemanager currently offer such lookups only to make it so that security
# decisions are expressed in SELinux policy. However, it's unclear whether this
# lookup has security implications. If it doesn't, hwservicemanager should be
# modified to not offer this lookup.
# This rule can be removed if hwservicemanager is modified to not permit these
# lookups.
neverallow * hidl_base_hwservice:hwservice_manager find;
# Require that domains explicitly label unknown properties, and do not allow
# anyone but init to modify unknown properties.
neverallow { domain -init -vendor_init } mmc_prop:property_service set;
neverallow { domain -init -vendor_init } vndk_prop:property_service set;
# BEGIN_COMPATIBLE_PROPERTY_ONLY -- this marker is used by CTS -- do not modify
#line 544
#line 544
neverallow { domain -init } mmc_prop:property_service set;
#line 544
neverallow { domain -init -vendor_init } exported_default_prop:property_service set;
#line 544
neverallow { domain -init } exported_secure_prop:property_service set;
#line 544
neverallow { domain -init -vendor_init } vendor_default_prop:property_service set;
#line 544
neverallow { domain -init -vendor_init } storage_config_prop:property_service set;
#line 544
neverallow { domain -init -vendor_init } hw_timeout_multiplier_prop:property_service set;
#line 544
#line 544
# END_COMPATIBLE_PROPERTY_ONLY -- this marker is used by CTS -- do not modify
#line 551
# BEGIN_COMPATIBLE_PROPERTY_ONLY -- this marker is used by CTS -- do not modify
#line 553
#line 553
neverallow { domain -init -system_server -vendor_init } exported_pm_prop:property_service set;
#line 553
neverallow { domain -coredomain -vendor_init } exported_pm_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 553
#line 553
# END_COMPATIBLE_PROPERTY_ONLY -- this marker is used by CTS -- do not modify
#line 556
# New "pm.dexopt." sysprops should be explicitly listed as exported_pm_prop.
neverallow { domain -init -dumpstate -vendor_init } future_pm_prop:property_service set;
neverallow { domain -init -dumpstate -vendor_init } future_pm_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# ART may introduce new sysprops. SELinux denials due to reading new sysprops on
# old platforms shouldn't be regarded as a problem.
dontaudit domain future_pm_prop:file read;
neverallow { domain -init } aac_drc_prop:property_service set;
neverallow { domain -init } build_prop:property_service set;
neverallow { domain -init } userdebug_or_eng_prop:property_service set;
# Do not allow reading device's serial number from system properties except form
# a few allowed domains.
neverallow {
domain
-adbd
-dumpstate
-fastbootd
-hal_camera_server
-hal_cas_server
-hal_drm_server
-hal_keymint_server
-init
-mediadrmserver
-mediaserver
-recovery
-shell
-system_server
-vendor_init
} serialno_prop:file { getattr open read ioctl lock map watch watch_reads };
neverallow {
domain
-init
-recovery
-system_server
-ueventd # Further restricted in ueventd.te
} frp_block_device:blk_file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# The metadata block device is set aside for device encryption and
# verified boot metadata. It may be reset at will and should not
# be used by other domains.
neverallow {
domain
-init
-recovery
-vold
-e2fs
-fsck
-fastbootd
-hal_fastboot_server
} metadata_block_device:blk_file { append link rename write open read ioctl lock };
# No domain other than recovery, update_engine and fastbootd can write to system partition(s).
neverallow {
domain
-fastbootd
-recovery
-update_engine
} system_block_device:blk_file { write append };
# Only (hw|vnd|)servicemanager should be able to register with binder as the context manager
neverallow { domain -servicemanager -hwservicemanager -vndservicemanager } *:binder set_context_mgr;
# The service managers are only allowed to access their own device node
neverallow servicemanager hwbinder_device:chr_file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow servicemanager vndbinder_device:chr_file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow hwservicemanager binder_device:chr_file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow hwservicemanager vndbinder_device:chr_file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow vndservicemanager binder_device:chr_file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow vndservicemanager hwbinder_device:chr_file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 633
#line 633
# Vendor apps are permited to use only stable public services. If they were to use arbitrary
#line 633
# services which can change any time framework/core is updated, breakage is likely.
#line 633
#
#line 633
# Note, this same logic applies to untrusted apps, but neverallows for these are separate.
#line 633
neverallow {
#line 633
appdomain
#line 633
-coredomain
#line 633
} {
#line 633
service_manager_type
#line 633
#line 633
-app_api_service
#line 633
-ephemeral_app_api_service
#line 633
#line 633
-hal_service_type # see app_neverallows.te
#line 633
#line 633
-apc_service
#line 633
-audioserver_service # TODO(b/36783122) remove exemptions below once app_api_service is fixed
#line 633
-cameraserver_service
#line 633
-drmserver_service
#line 633
-credstore_service
#line 633
-keystore_maintenance_service
#line 633
-keystore_service
#line 633
-legacykeystore_service
#line 633
-mediadrmserver_service
#line 633
-mediaextractor_service
#line 633
-mediametrics_service
#line 633
-mediaserver_service
#line 633
-nfc_service
#line 633
-radio_service
#line 633
-virtual_touchpad_service
#line 633
-vr_manager_service
#line 633
#line 633
}:service_manager find;
#line 633
#line 633
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 667
# On full TREBLE devices, only vendor components, shell, and su can use VendorBinder.
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 670
#line 670
neverallow {
#line 670
coredomain
#line 670
-shell
#line 670
#line 670
-ueventd # uevent is granted create for this device, but we still neverallow I/O below
#line 670
} vndbinder_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 670
#line 670
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 677
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 678
#line 678
neverallow ueventd vndbinder_device:chr_file { read write append ioctl };
#line 678
#line 678
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 680
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 681
#line 681
neverallow {
#line 681
coredomain
#line 681
-shell
#line 681
#line 681
} vndservice_manager_type:service_manager *;
#line 681
#line 681
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 687
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 688
#line 688
neverallow {
#line 688
coredomain
#line 688
-shell
#line 688
#line 688
} vndservicemanager:binder *;
#line 688
#line 688
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 694
# On full TREBLE devices, socket communications between core components and vendor components are
# not permitted.
# Most general rules first, more specific rules below.
# Core domains are not permitted to initiate communications to vendor domain sockets.
# We are not restricting the use of already established sockets because it is fine for a process
# to obtain an already established socket via some public/official/stable API and then exchange
# data with its peer over that socket. The wire format in this scenario is dicatated by the API
# and thus does not break the core-vendor separation.
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 705
#line 705
#line 705
neverallow {
#line 705
coredomain
#line 705
-init
#line 705
-adbd
#line 705
} {
#line 705
domain
#line 705
-coredomain
#line 705
-socket_between_core_and_vendor_violators
#line 705
}:{ socket tcp_socket udp_socket rawip_socket netlink_socket packet_socket key_socket unix_stream_socket unix_dgram_socket appletalk_socket netlink_route_socket netlink_tcpdiag_socket netlink_nflog_socket netlink_xfrm_socket netlink_selinux_socket netlink_audit_socket netlink_dnrt_socket netlink_kobject_uevent_socket tun_socket netlink_iscsi_socket netlink_fib_lookup_socket netlink_connector_socket netlink_netfilter_socket netlink_generic_socket netlink_scsitransport_socket netlink_rdma_socket netlink_crypto_socket sctp_socket icmp_socket ax25_socket ipx_socket netrom_socket atmpvc_socket x25_socket rose_socket decnet_socket atmsvc_socket rds_socket irda_socket pppox_socket llc_socket can_socket tipc_socket bluetooth_socket iucv_socket rxrpc_socket isdn_socket phonet_socket ieee802154_socket caif_socket alg_socket nfc_socket vsock_socket kcm_socket qipcrtr_socket smc_socket xdp_socket } { connect sendto };
#line 705
neverallow {
#line 705
coredomain
#line 705
-init
#line 705
-adbd
#line 705
} {
#line 705
domain
#line 705
-coredomain
#line 705
-socket_between_core_and_vendor_violators
#line 705
}:unix_stream_socket connectto;
#line 705
;
#line 705
#line 705
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 715
# Vendor domains are not permitted to initiate create/open sockets owned by core domains
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 718
#line 718
neverallow {
#line 718
domain
#line 718
-coredomain
#line 718
-appdomain # appdomain restrictions below
#line 718
-data_between_core_and_vendor_violators # b/70393317
#line 718
-socket_between_core_and_vendor_violators
#line 718
-vendor_init
#line 718
} {
#line 718
coredomain_socket
#line 718
core_data_file_type
#line 718
unlabeled # used only by core domains
#line 718
}:sock_file ~{ append getattr ioctl read write };
#line 718
#line 718
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 731
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 732
#line 732
neverallow {
#line 732
appdomain
#line 732
-coredomain
#line 732
} {
#line 732
coredomain_socket
#line 732
unlabeled # used only by core domains
#line 732
core_data_file_type
#line 732
-app_data_file
#line 732
-privapp_data_file
#line 732
-pdx_endpoint_socket_type # used by VR layer
#line 732
-pdx_channel_socket_type # used by VR layer
#line 732
}:sock_file ~{ append getattr ioctl read write };
#line 732
#line 732
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 745
# Core domains are not permitted to create/open sockets owned by vendor domains
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 748
#line 748
neverallow {
#line 748
coredomain
#line 748
-init
#line 748
-ueventd
#line 748
-socket_between_core_and_vendor_violators
#line 748
} {
#line 748
file_type
#line 748
dev_type
#line 748
-coredomain_socket
#line 748
-core_data_file_type
#line 748
-app_data_file_type
#line 748
-unlabeled
#line 748
}:sock_file ~{ append getattr ioctl read write };
#line 748
#line 748
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 762
# On TREBLE devices, vendor and system components are only allowed to share
# files by passing open FDs over hwbinder. Ban all directory access and all file
# accesses other than what can be applied to an open FD such as
# ioctl/stat/read/write/append. This is enforced by segregating /data.
# Vendor domains may directly access file in /data/vendor by path, but may only
# access files outside of /data/vendor via an open FD passed over hwbinder.
# Likewise, core domains may only directly access files outside /data/vendor by
# path and files in /data/vendor by open FD.
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 772
#line 772
# only coredomains may only access core_data_file_type, particularly not
#line 772
# /data/vendor
#line 772
neverallow {
#line 772
coredomain
#line 772
-appdomain # TODO(b/34980020) remove exemption for appdomain
#line 772
-data_between_core_and_vendor_violators
#line 772
-init
#line 772
-vold_prepare_subdirs
#line 772
} {
#line 772
data_file_type
#line 772
-core_data_file_type
#line 772
-app_data_file_type
#line 772
}:{ { chr_file blk_file } { file lnk_file sock_file fifo_file } } ~{ append getattr ioctl read write map };
#line 772
#line 772
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 786
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 787
#line 787
neverallow {
#line 787
coredomain
#line 787
-appdomain # TODO(b/34980020) remove exemption for appdomain
#line 787
-data_between_core_and_vendor_violators
#line 787
-init
#line 787
-vold_prepare_subdirs
#line 787
} {
#line 787
data_file_type
#line 787
-core_data_file_type
#line 787
-app_data_file_type
#line 787
# TODO(b/72998741) Remove exemption. Further restricted in a subsequent
#line 787
# neverallow. Currently only getattr and search are allowed.
#line 787
-vendor_data_file
#line 787
}:dir *;
#line 787
#line 787
#line 787
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 803
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 804
#line 804
# vendor domains may only access files in /data/vendor, never core_data_file_types
#line 804
neverallow {
#line 804
domain
#line 804
-appdomain # TODO(b/34980020) remove exemption for appdomain
#line 804
-coredomain
#line 804
-data_between_core_and_vendor_violators # TODO(b/34980020) Remove once all violators have been cleaned up
#line 804
-vendor_init
#line 804
} {
#line 804
core_data_file_type
#line 804
#line 804
}:{ { chr_file blk_file } { file lnk_file sock_file fifo_file } } ~{ append getattr ioctl read write map };
#line 804
neverallow {
#line 804
vendor_init
#line 804
-data_between_core_and_vendor_violators
#line 804
} {
#line 804
core_data_file_type
#line 804
-unencrypted_data_file
#line 804
#line 804
}:{ { chr_file blk_file } { file lnk_file sock_file fifo_file } } ~{ append getattr ioctl read write map };
#line 804
# vendor init needs to be able to read unencrypted_data_file to create directories with FBE.
#line 804
# The vendor init binary lives on the system partition so there is not a concern with stability.
#line 804
neverallow vendor_init unencrypted_data_file:file ~{ getattr open read ioctl lock map watch watch_reads };
#line 804
#line 804
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 827
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 828
#line 828
# vendor domains may only access dirs in /data/vendor, never core_data_file_types
#line 828
neverallow {
#line 828
domain
#line 828
-appdomain # TODO(b/34980020) remove exemption for appdomain
#line 828
-coredomain
#line 828
-data_between_core_and_vendor_violators
#line 828
-vendor_init
#line 828
} {
#line 828
core_data_file_type
#line 828
-system_data_file # default label for files on /data. Covered below...
#line 828
-system_data_root_file
#line 828
-vendor_userdir_file
#line 828
-vendor_data_file
#line 828
#line 828
}:dir *;
#line 828
neverallow {
#line 828
vendor_init
#line 828
-data_between_core_and_vendor_violators
#line 828
} {
#line 828
core_data_file_type
#line 828
-unencrypted_data_file
#line 828
-system_data_file
#line 828
-system_data_root_file
#line 828
-vendor_userdir_file
#line 828
-vendor_data_file
#line 828
#line 828
}:dir *;
#line 828
# vendor init needs to be able to read unencrypted_data_file to create directories with FBE.
#line 828
# The vendor init binary lives on the system partition so there is not a concern with stability.
#line 828
neverallow vendor_init unencrypted_data_file:dir ~search;
#line 828
#line 828
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 859
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 860
#line 860
# vendor domains may only access dirs in /data/vendor, never core_data_file_types
#line 860
neverallow {
#line 860
domain
#line 860
-appdomain # TODO(b/34980020) remove exemption for appdomain
#line 860
-coredomain
#line 860
-data_between_core_and_vendor_violators # TODO(b/34980020) Remove once all violators have been cleaned up
#line 860
} {
#line 860
system_data_file # default label for files on /data. Covered below
#line 860
}:dir ~{ getattr search };
#line 860
#line 860
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 870
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 872
#line 872
# coredomains may not access dirs in /data/vendor.
#line 872
neverallow {
#line 872
coredomain
#line 872
-data_between_core_and_vendor_violators # TODO(b/34980020) Remove once all violators have been cleaned up
#line 872
-init
#line 872
-vold # vold creates per-user storage for both system and vendor
#line 872
-vold_prepare_subdirs
#line 872
} {
#line 872
vendor_data_file # default label for files on /data. Covered below
#line 872
}:dir ~{ getattr search };
#line 872
#line 872
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 883
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 885
#line 885
# coredomains may not access dirs in /data/vendor.
#line 885
neverallow {
#line 885
coredomain
#line 885
-data_between_core_and_vendor_violators # TODO(b/34980020) Remove once all violators have been cleaned up
#line 885
-init
#line 885
} {
#line 885
vendor_data_file # default label for files on /data/vendor{,_ce,_de}.
#line 885
}:{ { chr_file blk_file } { file lnk_file sock_file fifo_file } } ~{ append getattr ioctl read write map };
#line 885
#line 885
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 894
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 896
#line 896
# Non-vendor domains are not allowed to file execute shell
#line 896
# from vendor
#line 896
neverallow {
#line 896
coredomain
#line 896
-init
#line 896
-shell
#line 896
-ueventd
#line 896
} vendor_shell_exec:file { execute execute_no_trans };
#line 896
#line 896
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 905
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 907
#line 907
# Do not allow vendor components to execute files from system
#line 907
# except for the ones allowed here.
#line 907
neverallow {
#line 907
domain
#line 907
-coredomain
#line 907
-appdomain
#line 907
-vendor_executes_system_violators
#line 907
-vendor_init
#line 907
} {
#line 907
system_file_type
#line 907
-system_lib_file
#line 907
-system_linker_exec
#line 907
-crash_dump_exec
#line 907
-netutils_wrapper_exec
#line 907
#line 907
# Vendor components still can invoke shell commands via /system/bin/sh
#line 907
-shell_exec
#line 907
-toolbox_exec
#line 907
}:file { entrypoint execute execute_no_trans };
#line 907
#line 907
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 927
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 929
#line 929
# Do not allow coredomain to access entrypoint for files other
#line 929
# than system_file_type and postinstall_file
#line 929
neverallow coredomain {
#line 929
file_type
#line 929
-system_file_type
#line 929
-postinstall_file
#line 929
}:file entrypoint;
#line 929
# Do not allow domains other than coredomain to access entrypoint
#line 929
# for anything but vendor_file_type and init_exec for vendor_init.
#line 929
neverallow { domain -coredomain } {
#line 929
file_type
#line 929
-vendor_file_type
#line 929
-init_exec
#line 929
}:file entrypoint;
#line 929
#line 929
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 944
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 946
#line 946
# Do not allow system components to execute files from vendor
#line 946
# except for the ones allowed here.
#line 946
neverallow {
#line 946
coredomain
#line 946
-init
#line 946
-shell
#line 946
-system_executes_vendor_violators
#line 946
-ueventd
#line 946
} {
#line 946
vendor_file_type
#line 946
-same_process_hal_file
#line 946
-vndk_sp_file
#line 946
-vendor_app_file
#line 946
-vendor_public_framework_file
#line 946
-vendor_public_lib_file
#line 946
}:file execute;
#line 946
#line 946
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 963
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 965
#line 965
neverallow {
#line 965
coredomain
#line 965
-shell
#line 965
-system_executes_vendor_violators
#line 965
} {
#line 965
vendor_file_type
#line 965
-same_process_hal_file
#line 965
}:file execute_no_trans;
#line 965
#line 965
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 974
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 976
#line 976
# Do not allow vendor components access to /system files except for the
#line 976
# ones allowed here.
#line 976
neverallow {
#line 976
domain
#line 976
-appdomain
#line 976
-coredomain
#line 976
-vendor_executes_system_violators
#line 976
# vendor_init needs access to init_exec for domain transition. vendor_init
#line 976
# neverallows are covered in public/vendor_init.te
#line 976
-vendor_init
#line 976
} {
#line 976
system_file_type
#line 976
-crash_dump_exec
#line 976
-file_contexts_file
#line 976
-netutils_wrapper_exec
#line 976
-property_contexts_file
#line 976
-system_event_log_tags_file
#line 976
-system_group_file
#line 976
-system_lib_file
#line 976
#line 976
-system_linker_exec
#line 976
-system_linker_config_file
#line 976
-system_passwd_file
#line 976
-system_seccomp_policy_file
#line 976
-system_security_cacerts_file
#line 976
-system_zoneinfo_file
#line 976
-task_profiles_api_file
#line 976
-task_profiles_file
#line 976
#line 976
# Vendor components still can invoke shell commands via /system/bin/sh
#line 976
-shell_exec
#line 976
-toolbox_exec
#line 976
}:file *;
#line 976
#line 976
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 1010
# Only system_server should be able to send commands via the zygote socket
neverallow { domain -zygote -system_server } zygote:unix_stream_socket connectto;
neverallow { domain -system_server } zygote_socket:sock_file write;
neverallow { domain -system_server -webview_zygote -app_zygote } webview_zygote:unix_stream_socket connectto;
neverallow { domain -system_server } webview_zygote:sock_file write;
neverallow { domain -system_server } app_zygote:sock_file write;
neverallow domain tombstoned_crash_socket:unix_stream_socket connectto;
# Never allow anyone except dumpstate, incidentd, or the system server to connect or write to
# the tombstoned intercept socket.
neverallow { domain -dumpstate -incidentd -system_server } tombstoned_intercept_socket:sock_file write;
neverallow { domain -dumpstate -incidentd -system_server } tombstoned_intercept_socket:unix_stream_socket connectto;
# Never allow anyone but system_server to read heapdumps in /data/system/heapdump.
neverallow { domain -init -system_server } heapdump_data_file:file read;
# Android does not support System V IPCs.
#
# The reason for this is due to the fact that, by design, they lead to global
# kernel resource leakage.
#
# For example, there is no way to automatically release a SysV semaphore
# allocated in the kernel when:
#
# - a buggy or malicious process exits
# - a non-buggy and non-malicious process crashes or is explicitly killed.
#
# Killing processes automatically to make room for new ones is an
# important part of Android's application lifecycle implementation. This means
# that, even assuming only non-buggy and non-malicious code, it is very likely
# that over time, the kernel global tables used to implement SysV IPCs will fill
# up.
neverallow * *:{ shm sem msg msgq } *;
# Do not mount on top of symlinks, fifos, or sockets.
# Feature parity with Chromium LSM.
neverallow * { file_type fs_type dev_type }:{ lnk_file fifo_file sock_file } mounton;
# Nobody should be able to execute su on user builds.
# On userdebug/eng builds, only dumpstate, shell, and
# su itself execute su.
neverallow { domain } su_exec:file { execute execute_no_trans };
# Do not allow the introduction of new execmod rules. Text relocations
# and modification of executable pages are unsafe.
# The only exceptions are for NDK text relocations associated with
# https://code.google.com/p/android/issues/detail?id=23203
# which, long term, need to go away.
neverallow * {
file_type
-apk_data_file
-app_data_file
-asec_public_file
}:file execmod;
# Do not allow making the stack or heap executable.
# We would also like to minimize execmem but it seems to be
# required by some device-specific service domains.
neverallow * self:process { execstack execheap };
# Do not allow the introduction of new execmod rules. Text relocations
# and modification of executable pages are unsafe.
neverallow { domain -untrusted_app_25 -untrusted_app_27 } file_type:file execmod;
neverallow { domain -init } proc:{ file dir } mounton;
neverallow { domain -init -zygote } proc_type:{ file dir } mounton;
# Ensure that all types assigned to processes are included
# in the domain attribute, so that all allow and neverallow rules
# written on domain are applied to all processes.
# This is achieved by ensuring that it is impossible to transition
# from a domain to a non-domain type and vice versa.
# TODO - rework this: neverallow domain ~domain:process { transition dyntransition };
neverallow ~domain domain:process { transition dyntransition };
#
# Only system_app and system_server should be creating or writing
# their files. The proper way to share files is to setup
# type transitions to a more specific type or assigning a type
# to its parent directory via a file_contexts entry.
# Example type transition:
# mydomain.te:file_type_auto_trans(mydomain, system_data_file, new_file_type)
#
neverallow {
domain
-system_server
-system_app
-init
-toolbox # TODO(b/141108496) We want to remove toolbox
-installd # for relabelfrom and unlink, check for this in explicit neverallow
-vold_prepare_subdirs # For unlink
} system_data_file:file { append create link unlink relabelfrom rename setattr write };
# do not grant anything greater than r_file_perms and relabelfrom unlink
# to installd
neverallow installd system_data_file:file ~{ { getattr open read ioctl lock map watch watch_reads } relabelfrom unlink };
#
# Only these domains should transition to shell domain. This domain is
# permissible for the "shell user". If you need a process to exec a shell
# script with differing privilege, define a domain and set up a transition.
#
neverallow {
domain
-adbd
-init
-runas
-zygote
} shell:process { transition dyntransition };
# Only domains spawned from zygote, runas and simpleperf_app_runner may have
# the appdomain attribute. simpleperf is excluded as a domain transitioned to
# when running an app-scoped profiling session.
neverallow { domain -simpleperf_app_runner -runas -app_zygote -webview_zygote -zygote } {
appdomain -shell -simpleperf
}:process { transition dyntransition };
# Minimize read access to shell- or app-writable symlinks.
# This is to prevent malicious symlink attacks.
neverallow {
domain
-appdomain
-artd
-installd
} { app_data_file privapp_data_file }:lnk_file read;
neverallow {
domain
-shell
-installd
} shell_data_file:lnk_file read;
# servicemanager and vndservicemanager are the only processes which handle the
# service_manager list request
neverallow * ~{
servicemanager
vndservicemanager
}:service_manager list;
# hwservicemanager is the only process which handles hw list requests
neverallow * ~{
hwservicemanager
}:hwservice_manager list;
# only service_manager_types can be added to service_manager
# TODO - rework this: neverallow * ~service_manager_type:service_manager { add find };
# Prevent assigning non property types to properties
# TODO - rework this: neverallow * ~property_type:property_service set;
# Domain types should never be assigned to any files other
# than the /proc/pid files associated with a process. The
# executable file used to enter a domain should be labeled
# with its own _exec type, not with the domain type.
# Conventionally, this looks something like:
# $ cat mydaemon.te
# type mydaemon, domain;
# type mydaemon_exec, exec_type, file_type;
# init_daemon_domain(mydaemon)
# $ grep mydaemon file_contexts
# /system/bin/mydaemon -- u:object_r:mydaemon_exec:s0
neverallow * domain:file { execute execute_no_trans entrypoint };
# Do not allow access to the generic debugfs label. This is too broad.
# Instead, if access to part of debugfs is desired, it should have a
# more specific label.
# TODO: fix dumpstate
neverallow { domain -init -vendor_init -dumpstate } debugfs:{ file lnk_file } { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Do not allow executable files in debugfs.
neverallow domain debugfs_type:file { execute execute_no_trans };
# Don't allow access to the FUSE control filesystem, except to vold and init's
neverallow { domain -vold -init -vendor_init } fusectlfs:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Profiles contain untrusted data and profman parses that. We should only run
# it from installd and artd forked processes.
neverallow {
domain
-installd
-profman
-artd
} profman_exec:file { execute execute_no_trans };
# Enforce restrictions on kernel module origin.
# Do not allow kernel module loading except from system,
# vendor, boot, and system_dlkm partitions.
# TODO(b/218951883): Remove usage of system and rootfs as origin
neverallow * ~{ system_file_type vendor_file_type rootfs system_dlkm_file_type }:system module_load;
# Only allow filesystem caps to be set at build time. Runtime changes
# to filesystem capabilities are not permitted.
neverallow * self:{ capability cap_userns } setfcap;
# Enforce AT_SECURE for executing crash_dump.
neverallow domain crash_dump:process noatsecure;
# Do not permit non-core domains to register HwBinder services which are
# guaranteed to be provided by core domains only.
neverallow ~coredomain coredomain_hwservice:hwservice_manager add;
# Do not permit the registeration of HwBinder services which are guaranteed to
# be passthrough only (i.e., run in the process of their clients instead of a
# separate server process).
neverallow * same_process_hwservice:hwservice_manager add;
# If an already existing file is opened with O_CREAT, the kernel might generate
# a false report of a create denial. Silence these denials and make sure that
# inappropriate permissions are not granted.
# These filesystems don't allow files or directories to be created, so the permission
# to do so should never be granted.
neverallow domain {
proc_type
sysfs_type
}:dir { add_name create link remove_name rename reparent rmdir write };
# cgroupfs directories can be created, but not files within them.
neverallow domain cgroup:file create;
neverallow domain cgroup_v2:file create;
dontaudit domain proc_type:dir write;
dontaudit domain sysfs_type:dir write;
dontaudit domain cgroup:file create;
dontaudit domain cgroup_v2:file create;
# These are only needed in permissive mode - in enforcing mode the
# directory write check fails and so these are never attempted.
#line 1248
# Platform must not have access to /mnt/vendor.
neverallow {
coredomain
-init
-ueventd
-vold
-system_writes_mnt_vendor_violators
} mnt_vendor_file:dir *;
# Only apps are allowed access to vendor public libraries.
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 1260
#line 1260
neverallow {
#line 1260
coredomain
#line 1260
-appdomain
#line 1260
} {vendor_public_framework_file vendor_public_lib_file}:file { execute execute_no_trans };
#line 1260
#line 1260
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 1265
# Vendor domian must not have access to /mnt/product.
neverallow {
domain
-coredomain
} mnt_product_file:dir *;
# Platform must not have access to sysfs_batteryinfo, but should do it via health HAL
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 1274
#line 1274
neverallow {
#line 1274
coredomain
#line 1274
-shell
#line 1274
# For access to block device information under /sys/class/block.
#line 1274
-apexd
#line 1274
# Read sysfs block device information.
#line 1274
-init
#line 1274
# Generate uevents for health info
#line 1274
-ueventd
#line 1274
# Recovery uses health HAL passthrough implementation.
#line 1274
-recovery
#line 1274
# Charger uses health HAL passthrough implementation.
#line 1274
-charger
#line 1274
# TODO(b/110891300): remove this exception
#line 1274
-incidentd
#line 1274
} sysfs_batteryinfo:file { open read };
#line 1274
#line 1274
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 1291
neverallow {
domain
-hal_codec2_server
-hal_omx_server
} hal_codec2_hwservice:hwservice_manager add;
# Only apps targetting < Q are allowed to open /dev/ashmem directly.
# Apps must use ASharedMemory NDK API. Native code must use libcutils API.
neverallow {
domain
-ephemeral_app # We don't distinguish ephemeral apps based on target API.
-untrusted_app_25
-untrusted_app_27
} ashmem_device:chr_file open;
neverallow { domain -traced_probes -init -vendor_init } debugfs_tracing_printk_formats:file *;
#line 1 "system/sepolicy/public/drmserver.te"
# drmserver - DRM service
type drmserver, domain;
type drmserver_exec, system_file_type, exec_type, file_type;
typeattribute drmserver mlstrustedsubject;
#line 7
typeattribute drmserver netdomain;
#line 7
# Perform Binder IPC to system server.
#line 10
# Call the servicemanager and transfer references to it.
#line 10
allow drmserver servicemanager:binder { call transfer };
#line 10
# Allow servicemanager to send out callbacks
#line 10
allow servicemanager drmserver:binder { call transfer };
#line 10
# servicemanager performs getpidcon on clients.
#line 10
allow servicemanager drmserver:dir search;
#line 10
allow servicemanager drmserver:file { read open };
#line 10
allow servicemanager drmserver:process getattr;
#line 10
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 10
# all domains in domain.te.
#line 10
#line 11
# Call the server domain and optionally transfer references to it.
#line 11
allow drmserver system_server:binder { call transfer };
#line 11
# Allow the serverdomain to transfer references to the client on the reply.
#line 11
allow system_server drmserver:binder transfer;
#line 11
# Receive and use open files from the server.
#line 11
allow drmserver system_server:fd use;
#line 11
#line 12
# Call the server domain and optionally transfer references to it.
#line 12
allow drmserver appdomain:binder { call transfer };
#line 12
# Allow the serverdomain to transfer references to the client on the reply.
#line 12
allow appdomain drmserver:binder transfer;
#line 12
# Receive and use open files from the server.
#line 12
allow drmserver appdomain:fd use;
#line 12
#line 13
# Call the server domain and optionally transfer references to it.
#line 13
allow drmserver mediametrics:binder { call transfer };
#line 13
# Allow the serverdomain to transfer references to the client on the reply.
#line 13
allow mediametrics drmserver:binder transfer;
#line 13
# Receive and use open files from the server.
#line 13
allow drmserver mediametrics:fd use;
#line 13
#line 14
typeattribute drmserver binderservicedomain;
#line 14
# Inherit or receive open files from system_server.
allow drmserver system_server:fd use;
# Perform Binder IPC to mediaserver
#line 19
# Call the server domain and optionally transfer references to it.
#line 19
allow drmserver mediaserver:binder { call transfer };
#line 19
# Allow the serverdomain to transfer references to the client on the reply.
#line 19
allow mediaserver drmserver:binder transfer;
#line 19
# Receive and use open files from the server.
#line 19
allow drmserver mediaserver:fd use;
#line 19
allow drmserver { sdcard_type fuse }:dir search;
allow drmserver drm_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow drmserver drm_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow drmserver { app_data_file privapp_data_file }:file { read write getattr map };
allow drmserver { sdcard_type fuse }:file { read write getattr map };
#line 26
allow drmserver efs_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 26
allow drmserver efs_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 26
type drmserver_socket, file_type;
# /data/app/tlcd_sock socket file.
# Clearly, /data/app is the most logical place to create a socket. Not.
allow drmserver apk_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
auditallow drmserver apk_data_file:dir { add_name write };
allow drmserver drmserver_socket:sock_file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
auditallow drmserver drmserver_socket:sock_file create;
# Delete old socket file if present.
allow drmserver apk_data_file:sock_file unlink;
# After taking a video, drmserver looks at the video file.
#line 40
allow drmserver media_rw_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 40
allow drmserver media_rw_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 40
# Read resources from open apk files passed over Binder.
allow drmserver apk_data_file:file { read getattr map };
allow drmserver asec_apk_file:file { read getattr map };
allow drmserver ringtone_file:file { read getattr map };
# Read /data/data/com.android.providers.telephony files passed over Binder.
allow drmserver radio_data_file:file { read getattr map };
# /oem access
allow drmserver oemfs:dir search;
allow drmserver oemfs:file { getattr open read ioctl lock map watch watch_reads };
# overlay package access
allow drmserver vendor_overlay_file:file { read map };
#line 57
allow drmserver drmserver_service:service_manager { add find };
#line 57
neverallow { domain -drmserver } drmserver_service:service_manager add;
#line 57
#line 57
# On debug builds with root, allow binder services to use binder over TCP.
#line 57
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 57
#line 57
allow drmserver permission_service:service_manager find;
allow drmserver mediametrics_service:service_manager find;
#line 61
#line 61
allow drmserver selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 61
allow drmserver selinuxfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 61
#line 61
allow drmserver selinuxfs:file { open append write lock map };
#line 61
allow drmserver kernel:security compute_av;
#line 61
allow drmserver self:netlink_selinux_socket { read write create getattr setattr lock relabelfrom relabelto append bind connect listen accept getopt setopt shutdown recvfrom sendto name_bind };
#line 61
#line 63
allow drmserver cgroup:dir { open getattr read search ioctl lock watch watch_reads };
#line 63
allow drmserver cgroup:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 63
#line 64
allow drmserver cgroup_v2:dir { open getattr read search ioctl lock watch watch_reads };
#line 64
allow drmserver cgroup_v2:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 64
#line 65
allow drmserver system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 65
allow drmserver system_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 65
#line 1 "system/sepolicy/public/dumpstate.te"
# dumpstate
type dumpstate, domain, mlstrustedsubject;
type dumpstate_exec, system_file_type, exec_type, file_type;
#line 5
typeattribute dumpstate netdomain;
#line 5
#line 6
# Call the servicemanager and transfer references to it.
#line 6
allow dumpstate servicemanager:binder { call transfer };
#line 6
# Allow servicemanager to send out callbacks
#line 6
allow servicemanager dumpstate:binder { call transfer };
#line 6
# servicemanager performs getpidcon on clients.
#line 6
allow servicemanager dumpstate:dir search;
#line 6
allow servicemanager dumpstate:file { read open };
#line 6
allow servicemanager dumpstate:process getattr;
#line 6
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 6
# all domains in domain.te.
#line 6
#line 7
# TODO(b/115946999): Remove /sys/power/* permissions once CONFIG_PM_WAKELOCKS is
#line 7
# deprecated.
#line 7
# Access /sys/power/wake_lock and /sys/power/wake_unlock
#line 7
allow dumpstate sysfs_wake_lock:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 7
# Accessing these files requires CAP_BLOCK_SUSPEND
#line 7
allow dumpstate self:{ capability2 cap2_userns } block_suspend;
#line 7
# system_suspend permissions
#line 7
#line 7
# Call the server domain and optionally transfer references to it.
#line 7
allow dumpstate system_suspend_server:binder { call transfer };
#line 7
# Allow the serverdomain to transfer references to the client on the reply.
#line 7
allow system_suspend_server dumpstate:binder transfer;
#line 7
# Receive and use open files from the server.
#line 7
allow dumpstate system_suspend_server:fd use;
#line 7
#line 7
allow dumpstate system_suspend_hwservice:hwservice_manager find;
#line 7
# halclientdomain permissions
#line 7
#line 7
# Call the hwservicemanager and transfer references to it.
#line 7
allow dumpstate hwservicemanager:binder { call transfer };
#line 7
# Allow hwservicemanager to send out callbacks
#line 7
allow hwservicemanager dumpstate:binder { call transfer };
#line 7
# hwservicemanager performs getpidcon on clients.
#line 7
allow hwservicemanager dumpstate:dir search;
#line 7
allow hwservicemanager dumpstate:file { read open map };
#line 7
allow hwservicemanager dumpstate:process getattr;
#line 7
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 7
# all domains in domain.te.
#line 7
#line 7
#line 7
allow dumpstate hwservicemanager_prop:file { getattr open read map };
#line 7
#line 7
allow dumpstate hidl_manager_hwservice:hwservice_manager find;
#line 7
# AIDL suspend hal permissions
#line 7
allow dumpstate hal_system_suspend_service:service_manager find;
#line 7
#line 7
# Call the servicemanager and transfer references to it.
#line 7
allow dumpstate servicemanager:binder { call transfer };
#line 7
# Allow servicemanager to send out callbacks
#line 7
allow servicemanager dumpstate:binder { call transfer };
#line 7
# servicemanager performs getpidcon on clients.
#line 7
allow servicemanager dumpstate:dir search;
#line 7
allow servicemanager dumpstate:file { read open };
#line 7
allow servicemanager dumpstate:process getattr;
#line 7
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 7
# all domains in domain.te.
#line 7
#line 7
# Allow setting process priority, protect from OOM killer, and dropping
# privileges by switching UID / GID
allow dumpstate self:{ capability cap_userns } { setuid setgid sys_resource };
# Allow dumpstate to scan through /proc/pid for all processes
#line 14
allow dumpstate domain:dir { open getattr read search ioctl lock watch watch_reads };
#line 14
allow dumpstate domain:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 14
allow dumpstate self:{ capability cap_userns } {
# Send signals to processes
kill
# Run iptables
net_raw
net_admin
};
# Allow executing files on system, such as:
# /system/bin/toolbox
# /system/bin/logcat
# /system/bin/dumpsys
allow dumpstate system_file:file execute_no_trans;
allow dumpstate vendor_file:file execute_no_trans;
allow dumpstate toolbox_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# hidl searches for files in /system/lib(64)/hw/
allow dumpstate system_file:dir { open getattr read search ioctl lock watch watch_reads };
# Create and write into /data/anr/
allow dumpstate self:{ capability cap_userns } { dac_override dac_read_search chown fowner fsetid };
allow dumpstate anr_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow dumpstate anr_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow reading /data/system/uiderrors.txt
# TODO: scope this down.
allow dumpstate system_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow dumpstate to append into apps' private files.
allow dumpstate { privapp_data_file app_data_file }:file append;
# Read dmesg
allow dumpstate self:{ capability2 cap2_userns } syslog;
allow dumpstate kernel:system syslog_read;
# Read /sys/fs/pstore/console-ramoops
allow dumpstate pstorefs:dir { open getattr read search ioctl lock watch watch_reads };
allow dumpstate pstorefs:file { getattr open read ioctl lock map watch watch_reads };
# Get process attributes
allow dumpstate domain:process getattr;
# Signal java processes to dump their stack
allow dumpstate { appdomain system_server zygote app_zygote }:process signal;
# Signal native processes to dump their stack.
allow dumpstate {
# This list comes from native_processes_to_dump in dumputils/dump_utils.c
audioserver
cameraserver
drmserver
inputflinger
mediadrmserver
mediaextractor
mediametrics
mediaserver
mediaswcodec
sdcardd
surfaceflinger
vold
# This list comes from hal_interfaces_to_dump in dumputils/dump_utils.c
evsmanagerd
hal_audio_server
hal_audiocontrol_server
hal_bluetooth_server
hal_broadcastradio_server
hal_camera_server
hal_codec2_server
hal_drm_server
hal_evs_server
hal_face_server
hal_fingerprint_server
hal_graphics_allocator_server
hal_graphics_composer_server
hal_health_server
hal_input_processor_server
hal_neuralnetworks_server
hal_omx_server
hal_power_server
hal_power_stats_server
hal_sensors_server
hal_thermal_server
hal_vehicle_server
hal_vr_server
system_suspend_server
}:process signal;
# Connect to tombstoned to intercept dumps.
#line 105
allow dumpstate tombstoned_intercept_socket:sock_file write;
#line 105
allow dumpstate tombstoned:unix_stream_socket connectto;
#line 105
# Access to /sys
allow dumpstate sysfs_type:dir { open getattr read search ioctl lock watch watch_reads };
allow dumpstate {
sysfs_devices_block
sysfs_dm
sysfs_loop
sysfs_usb
sysfs_zram
}:file { getattr open read ioctl lock map watch watch_reads };
# Ignore other file access under /sys.
dontaudit dumpstate sysfs:file { getattr open read ioctl lock map watch watch_reads };
# Other random bits of data we want to collect
#line 122
allow dumpstate debugfs:file { getattr open read ioctl lock map watch watch_reads };
#line 122
auditallow dumpstate debugfs:file { getattr open read ioctl lock map watch watch_reads };
#line 122
#line 122
allow dumpstate debugfs_mmc:file { getattr open read ioctl lock map watch watch_reads };
#line 127
# df for
allow dumpstate {
block_device
cache_file
metadata_file
rootfs
selinuxfs
storage_file
tmpfs
}:dir { search getattr };
allow dumpstate fuse_device:chr_file getattr;
allow dumpstate { dm_device cache_block_device }:blk_file getattr;
allow dumpstate { cache_file rootfs }:lnk_file { getattr read };
# Read /dev/cpuctl and /dev/cpuset
#line 144
allow dumpstate cgroup:dir { open getattr read search ioctl lock watch watch_reads };
#line 144
allow dumpstate cgroup:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 144
#line 145
allow dumpstate cgroup_v2:dir { open getattr read search ioctl lock watch watch_reads };
#line 145
allow dumpstate cgroup_v2:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 145
# Allow dumpstate to make binder calls to any binder service
#line 148
# Call the server domain and optionally transfer references to it.
#line 148
allow dumpstate binderservicedomain:binder { call transfer };
#line 148
# Allow the serverdomain to transfer references to the client on the reply.
#line 148
allow binderservicedomain dumpstate:binder transfer;
#line 148
# Receive and use open files from the server.
#line 148
allow dumpstate binderservicedomain:fd use;
#line 148
#line 149
# Call the server domain and optionally transfer references to it.
#line 149
allow dumpstate { appdomain artd netd wificond }:binder { call transfer };
#line 149
# Allow the serverdomain to transfer references to the client on the reply.
#line 149
allow { appdomain artd netd wificond } dumpstate:binder transfer;
#line 149
# Receive and use open files from the server.
#line 149
allow dumpstate { appdomain artd netd wificond }:fd use;
#line 149
# Allow dumpstate to call dump() on specific hals.
#line 152
#line 152
typeattribute dumpstate halclientdomain;
#line 152
typeattribute dumpstate hal_audio_client;
#line 152
#line 152
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 152
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 152
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 152
#line 152
typeattribute dumpstate hal_audio;
#line 152
# Find passthrough HAL implementations
#line 152
allow hal_audio system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 152
allow hal_audio vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 152
allow hal_audio vendor_file:file { read open getattr execute map };
#line 152
#line 152
;
#line 152
allow hal_audio_server dumpstate:fifo_file write;
#line 152
allow hal_audio_server dumpstate:fd use;
#line 152
#line 153
#line 153
typeattribute dumpstate halclientdomain;
#line 153
typeattribute dumpstate hal_audiocontrol_client;
#line 153
#line 153
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 153
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 153
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 153
#line 153
typeattribute dumpstate hal_audiocontrol;
#line 153
# Find passthrough HAL implementations
#line 153
allow hal_audiocontrol system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 153
allow hal_audiocontrol vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 153
allow hal_audiocontrol vendor_file:file { read open getattr execute map };
#line 153
#line 153
;
#line 153
allow hal_audiocontrol_server dumpstate:fifo_file write;
#line 153
allow hal_audiocontrol_server dumpstate:fd use;
#line 153
#line 154
#line 154
typeattribute dumpstate halclientdomain;
#line 154
typeattribute dumpstate hal_authgraph_client;
#line 154
#line 154
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 154
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 154
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 154
#line 154
typeattribute dumpstate hal_authgraph;
#line 154
# Find passthrough HAL implementations
#line 154
allow hal_authgraph system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 154
allow hal_authgraph vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 154
allow hal_authgraph vendor_file:file { read open getattr execute map };
#line 154
#line 154
;
#line 154
allow hal_authgraph_server dumpstate:fifo_file write;
#line 154
allow hal_authgraph_server dumpstate:fd use;
#line 154
#line 155
#line 155
typeattribute dumpstate halclientdomain;
#line 155
typeattribute dumpstate hal_authsecret_client;
#line 155
#line 155
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 155
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 155
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 155
#line 155
typeattribute dumpstate hal_authsecret;
#line 155
# Find passthrough HAL implementations
#line 155
allow hal_authsecret system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 155
allow hal_authsecret vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 155
allow hal_authsecret vendor_file:file { read open getattr execute map };
#line 155
#line 155
;
#line 155
allow hal_authsecret_server dumpstate:fifo_file write;
#line 155
allow hal_authsecret_server dumpstate:fd use;
#line 155
#line 156
#line 156
typeattribute dumpstate halclientdomain;
#line 156
typeattribute dumpstate hal_bluetooth_client;
#line 156
#line 156
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 156
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 156
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 156
#line 156
typeattribute dumpstate hal_bluetooth;
#line 156
# Find passthrough HAL implementations
#line 156
allow hal_bluetooth system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 156
allow hal_bluetooth vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 156
allow hal_bluetooth vendor_file:file { read open getattr execute map };
#line 156
#line 156
;
#line 156
allow hal_bluetooth_server dumpstate:fifo_file write;
#line 156
allow hal_bluetooth_server dumpstate:fd use;
#line 156
#line 157
#line 157
typeattribute dumpstate halclientdomain;
#line 157
typeattribute dumpstate hal_broadcastradio_client;
#line 157
#line 157
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 157
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 157
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 157
#line 157
typeattribute dumpstate hal_broadcastradio;
#line 157
# Find passthrough HAL implementations
#line 157
allow hal_broadcastradio system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 157
allow hal_broadcastradio vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 157
allow hal_broadcastradio vendor_file:file { read open getattr execute map };
#line 157
#line 157
;
#line 157
allow hal_broadcastradio_server dumpstate:fifo_file write;
#line 157
allow hal_broadcastradio_server dumpstate:fd use;
#line 157
#line 158
#line 158
typeattribute dumpstate halclientdomain;
#line 158
typeattribute dumpstate hal_camera_client;
#line 158
#line 158
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 158
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 158
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 158
#line 158
typeattribute dumpstate hal_camera;
#line 158
# Find passthrough HAL implementations
#line 158
allow hal_camera system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 158
allow hal_camera vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 158
allow hal_camera vendor_file:file { read open getattr execute map };
#line 158
#line 158
;
#line 158
allow hal_camera_server dumpstate:fifo_file write;
#line 158
allow hal_camera_server dumpstate:fd use;
#line 158
#line 159
#line 159
typeattribute dumpstate halclientdomain;
#line 159
typeattribute dumpstate hal_codec2_client;
#line 159
#line 159
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 159
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 159
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 159
#line 159
typeattribute dumpstate hal_codec2;
#line 159
# Find passthrough HAL implementations
#line 159
allow hal_codec2 system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 159
allow hal_codec2 vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 159
allow hal_codec2 vendor_file:file { read open getattr execute map };
#line 159
#line 159
;
#line 159
allow hal_codec2_server dumpstate:fifo_file write;
#line 159
allow hal_codec2_server dumpstate:fd use;
#line 159
#line 160
#line 160
typeattribute dumpstate halclientdomain;
#line 160
typeattribute dumpstate hal_contexthub_client;
#line 160
#line 160
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 160
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 160
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 160
#line 160
typeattribute dumpstate hal_contexthub;
#line 160
# Find passthrough HAL implementations
#line 160
allow hal_contexthub system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 160
allow hal_contexthub vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 160
allow hal_contexthub vendor_file:file { read open getattr execute map };
#line 160
#line 160
;
#line 160
allow hal_contexthub_server dumpstate:fifo_file write;
#line 160
allow hal_contexthub_server dumpstate:fd use;
#line 160
#line 161
#line 161
typeattribute dumpstate halclientdomain;
#line 161
typeattribute dumpstate hal_drm_client;
#line 161
#line 161
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 161
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 161
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 161
#line 161
typeattribute dumpstate hal_drm;
#line 161
# Find passthrough HAL implementations
#line 161
allow hal_drm system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 161
allow hal_drm vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 161
allow hal_drm vendor_file:file { read open getattr execute map };
#line 161
#line 161
;
#line 161
allow hal_drm_server dumpstate:fifo_file write;
#line 161
allow hal_drm_server dumpstate:fd use;
#line 161
#line 162
#line 162
typeattribute dumpstate halclientdomain;
#line 162
typeattribute dumpstate hal_dumpstate_client;
#line 162
#line 162
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 162
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 162
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 162
#line 162
typeattribute dumpstate hal_dumpstate;
#line 162
# Find passthrough HAL implementations
#line 162
allow hal_dumpstate system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 162
allow hal_dumpstate vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 162
allow hal_dumpstate vendor_file:file { read open getattr execute map };
#line 162
#line 162
;
#line 162
allow hal_dumpstate_server dumpstate:fifo_file write;
#line 162
allow hal_dumpstate_server dumpstate:fd use;
#line 162
#line 163
#line 163
typeattribute dumpstate halclientdomain;
#line 163
typeattribute dumpstate hal_evs_client;
#line 163
#line 163
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 163
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 163
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 163
#line 163
typeattribute dumpstate hal_evs;
#line 163
# Find passthrough HAL implementations
#line 163
allow hal_evs system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 163
allow hal_evs vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 163
allow hal_evs vendor_file:file { read open getattr execute map };
#line 163
#line 163
;
#line 163
allow hal_evs_server dumpstate:fifo_file write;
#line 163
allow hal_evs_server dumpstate:fd use;
#line 163
#line 164
#line 164
typeattribute dumpstate halclientdomain;
#line 164
typeattribute dumpstate hal_face_client;
#line 164
#line 164
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 164
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 164
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 164
#line 164
typeattribute dumpstate hal_face;
#line 164
# Find passthrough HAL implementations
#line 164
allow hal_face system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 164
allow hal_face vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 164
allow hal_face vendor_file:file { read open getattr execute map };
#line 164
#line 164
;
#line 164
allow hal_face_server dumpstate:fifo_file write;
#line 164
allow hal_face_server dumpstate:fd use;
#line 164
#line 165
#line 165
typeattribute dumpstate halclientdomain;
#line 165
typeattribute dumpstate hal_fingerprint_client;
#line 165
#line 165
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 165
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 165
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 165
#line 165
typeattribute dumpstate hal_fingerprint;
#line 165
# Find passthrough HAL implementations
#line 165
allow hal_fingerprint system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 165
allow hal_fingerprint vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 165
allow hal_fingerprint vendor_file:file { read open getattr execute map };
#line 165
#line 165
;
#line 165
allow hal_fingerprint_server dumpstate:fifo_file write;
#line 165
allow hal_fingerprint_server dumpstate:fd use;
#line 165
#line 166
#line 166
typeattribute dumpstate halclientdomain;
#line 166
typeattribute dumpstate hal_gnss_client;
#line 166
#line 166
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 166
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 166
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 166
#line 166
typeattribute dumpstate hal_gnss;
#line 166
# Find passthrough HAL implementations
#line 166
allow hal_gnss system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 166
allow hal_gnss vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 166
allow hal_gnss vendor_file:file { read open getattr execute map };
#line 166
#line 166
;
#line 166
allow hal_gnss_server dumpstate:fifo_file write;
#line 166
allow hal_gnss_server dumpstate:fd use;
#line 166
#line 167
#line 167
typeattribute dumpstate halclientdomain;
#line 167
typeattribute dumpstate hal_graphics_allocator_client;
#line 167
#line 167
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 167
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 167
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 167
#line 167
typeattribute dumpstate hal_graphics_allocator;
#line 167
# Find passthrough HAL implementations
#line 167
allow hal_graphics_allocator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 167
allow hal_graphics_allocator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 167
allow hal_graphics_allocator vendor_file:file { read open getattr execute map };
#line 167
#line 167
;
#line 167
allow hal_graphics_allocator_server dumpstate:fifo_file write;
#line 167
allow hal_graphics_allocator_server dumpstate:fd use;
#line 167
#line 168
#line 168
typeattribute dumpstate halclientdomain;
#line 168
typeattribute dumpstate hal_graphics_composer_client;
#line 168
#line 168
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 168
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 168
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 168
#line 168
typeattribute dumpstate hal_graphics_composer;
#line 168
# Find passthrough HAL implementations
#line 168
allow hal_graphics_composer system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 168
allow hal_graphics_composer vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 168
allow hal_graphics_composer vendor_file:file { read open getattr execute map };
#line 168
#line 168
;
#line 168
allow hal_graphics_composer_server dumpstate:fifo_file write;
#line 168
allow hal_graphics_composer_server dumpstate:fd use;
#line 168
#line 169
#line 169
typeattribute dumpstate halclientdomain;
#line 169
typeattribute dumpstate hal_health_client;
#line 169
#line 169
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 169
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 169
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 169
#line 169
typeattribute dumpstate hal_health;
#line 169
# Find passthrough HAL implementations
#line 169
allow hal_health system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 169
allow hal_health vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 169
allow hal_health vendor_file:file { read open getattr execute map };
#line 169
#line 169
;
#line 169
allow hal_health_server dumpstate:fifo_file write;
#line 169
allow hal_health_server dumpstate:fd use;
#line 169
#line 170
#line 170
typeattribute dumpstate halclientdomain;
#line 170
typeattribute dumpstate hal_identity_client;
#line 170
#line 170
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 170
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 170
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 170
#line 170
typeattribute dumpstate hal_identity;
#line 170
# Find passthrough HAL implementations
#line 170
allow hal_identity system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 170
allow hal_identity vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 170
allow hal_identity vendor_file:file { read open getattr execute map };
#line 170
#line 170
;
#line 170
allow hal_identity_server dumpstate:fifo_file write;
#line 170
allow hal_identity_server dumpstate:fd use;
#line 170
#line 171
#line 171
typeattribute dumpstate halclientdomain;
#line 171
typeattribute dumpstate hal_input_processor_client;
#line 171
#line 171
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 171
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 171
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 171
#line 171
typeattribute dumpstate hal_input_processor;
#line 171
# Find passthrough HAL implementations
#line 171
allow hal_input_processor system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 171
allow hal_input_processor vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 171
allow hal_input_processor vendor_file:file { read open getattr execute map };
#line 171
#line 171
;
#line 171
allow hal_input_processor_server dumpstate:fifo_file write;
#line 171
allow hal_input_processor_server dumpstate:fd use;
#line 171
#line 172
#line 172
typeattribute dumpstate halclientdomain;
#line 172
typeattribute dumpstate hal_keymint_client;
#line 172
#line 172
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 172
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 172
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 172
#line 172
typeattribute dumpstate hal_keymint;
#line 172
# Find passthrough HAL implementations
#line 172
allow hal_keymint system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 172
allow hal_keymint vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 172
allow hal_keymint vendor_file:file { read open getattr execute map };
#line 172
#line 172
;
#line 172
allow hal_keymint_server dumpstate:fifo_file write;
#line 172
allow hal_keymint_server dumpstate:fd use;
#line 172
#line 173
#line 173
typeattribute dumpstate halclientdomain;
#line 173
typeattribute dumpstate hal_light_client;
#line 173
#line 173
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 173
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 173
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 173
#line 173
typeattribute dumpstate hal_light;
#line 173
# Find passthrough HAL implementations
#line 173
allow hal_light system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 173
allow hal_light vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 173
allow hal_light vendor_file:file { read open getattr execute map };
#line 173
#line 173
;
#line 173
allow hal_light_server dumpstate:fifo_file write;
#line 173
allow hal_light_server dumpstate:fd use;
#line 173
#line 174
#line 174
typeattribute dumpstate halclientdomain;
#line 174
typeattribute dumpstate hal_memtrack_client;
#line 174
#line 174
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 174
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 174
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 174
#line 174
typeattribute dumpstate hal_memtrack;
#line 174
# Find passthrough HAL implementations
#line 174
allow hal_memtrack system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 174
allow hal_memtrack vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 174
allow hal_memtrack vendor_file:file { read open getattr execute map };
#line 174
#line 174
;
#line 174
allow hal_memtrack_server dumpstate:fifo_file write;
#line 174
allow hal_memtrack_server dumpstate:fd use;
#line 174
#line 175
#line 175
typeattribute dumpstate halclientdomain;
#line 175
typeattribute dumpstate hal_neuralnetworks_client;
#line 175
#line 175
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 175
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 175
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 175
#line 175
typeattribute dumpstate hal_neuralnetworks;
#line 175
# Find passthrough HAL implementations
#line 175
allow hal_neuralnetworks system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 175
allow hal_neuralnetworks vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 175
allow hal_neuralnetworks vendor_file:file { read open getattr execute map };
#line 175
#line 175
;
#line 175
allow hal_neuralnetworks_server dumpstate:fifo_file write;
#line 175
allow hal_neuralnetworks_server dumpstate:fd use;
#line 175
#line 176
#line 176
typeattribute dumpstate halclientdomain;
#line 176
typeattribute dumpstate hal_nfc_client;
#line 176
#line 176
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 176
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 176
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 176
#line 176
typeattribute dumpstate hal_nfc;
#line 176
# Find passthrough HAL implementations
#line 176
allow hal_nfc system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 176
allow hal_nfc vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 176
allow hal_nfc vendor_file:file { read open getattr execute map };
#line 176
#line 176
;
#line 176
allow hal_nfc_server dumpstate:fifo_file write;
#line 176
allow hal_nfc_server dumpstate:fd use;
#line 176
#line 177
#line 177
typeattribute dumpstate halclientdomain;
#line 177
typeattribute dumpstate hal_oemlock_client;
#line 177
#line 177
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 177
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 177
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 177
#line 177
typeattribute dumpstate hal_oemlock;
#line 177
# Find passthrough HAL implementations
#line 177
allow hal_oemlock system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 177
allow hal_oemlock vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 177
allow hal_oemlock vendor_file:file { read open getattr execute map };
#line 177
#line 177
;
#line 177
allow hal_oemlock_server dumpstate:fifo_file write;
#line 177
allow hal_oemlock_server dumpstate:fd use;
#line 177
#line 178
#line 178
typeattribute dumpstate halclientdomain;
#line 178
typeattribute dumpstate hal_power_client;
#line 178
#line 178
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 178
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 178
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 178
#line 178
typeattribute dumpstate hal_power;
#line 178
# Find passthrough HAL implementations
#line 178
allow hal_power system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 178
allow hal_power vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 178
allow hal_power vendor_file:file { read open getattr execute map };
#line 178
#line 178
;
#line 178
allow hal_power_server dumpstate:fifo_file write;
#line 178
allow hal_power_server dumpstate:fd use;
#line 178
#line 179
#line 179
typeattribute dumpstate halclientdomain;
#line 179
typeattribute dumpstate hal_power_stats_client;
#line 179
#line 179
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 179
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 179
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 179
#line 179
typeattribute dumpstate hal_power_stats;
#line 179
# Find passthrough HAL implementations
#line 179
allow hal_power_stats system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 179
allow hal_power_stats vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 179
allow hal_power_stats vendor_file:file { read open getattr execute map };
#line 179
#line 179
;
#line 179
allow hal_power_stats_server dumpstate:fifo_file write;
#line 179
allow hal_power_stats_server dumpstate:fd use;
#line 179
#line 180
#line 180
typeattribute dumpstate halclientdomain;
#line 180
typeattribute dumpstate hal_rebootescrow_client;
#line 180
#line 180
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 180
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 180
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 180
#line 180
typeattribute dumpstate hal_rebootescrow;
#line 180
# Find passthrough HAL implementations
#line 180
allow hal_rebootescrow system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 180
allow hal_rebootescrow vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 180
allow hal_rebootescrow vendor_file:file { read open getattr execute map };
#line 180
#line 180
;
#line 180
allow hal_rebootescrow_server dumpstate:fifo_file write;
#line 180
allow hal_rebootescrow_server dumpstate:fd use;
#line 180
#line 181
#line 181
typeattribute dumpstate halclientdomain;
#line 181
typeattribute dumpstate hal_secretkeeper_client;
#line 181
#line 181
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 181
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 181
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 181
#line 181
typeattribute dumpstate hal_secretkeeper;
#line 181
# Find passthrough HAL implementations
#line 181
allow hal_secretkeeper system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 181
allow hal_secretkeeper vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 181
allow hal_secretkeeper vendor_file:file { read open getattr execute map };
#line 181
#line 181
;
#line 181
allow hal_secretkeeper_server dumpstate:fifo_file write;
#line 181
allow hal_secretkeeper_server dumpstate:fd use;
#line 181
#line 182
#line 182
typeattribute dumpstate halclientdomain;
#line 182
typeattribute dumpstate hal_sensors_client;
#line 182
#line 182
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 182
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 182
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 182
#line 182
typeattribute dumpstate hal_sensors;
#line 182
# Find passthrough HAL implementations
#line 182
allow hal_sensors system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 182
allow hal_sensors vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 182
allow hal_sensors vendor_file:file { read open getattr execute map };
#line 182
#line 182
;
#line 182
allow hal_sensors_server dumpstate:fifo_file write;
#line 182
allow hal_sensors_server dumpstate:fd use;
#line 182
#line 183
#line 183
typeattribute dumpstate halclientdomain;
#line 183
typeattribute dumpstate hal_thermal_client;
#line 183
#line 183
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 183
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 183
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 183
#line 183
typeattribute dumpstate hal_thermal;
#line 183
# Find passthrough HAL implementations
#line 183
allow hal_thermal system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 183
allow hal_thermal vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 183
allow hal_thermal vendor_file:file { read open getattr execute map };
#line 183
#line 183
;
#line 183
allow hal_thermal_server dumpstate:fifo_file write;
#line 183
allow hal_thermal_server dumpstate:fd use;
#line 183
#line 184
#line 184
typeattribute dumpstate halclientdomain;
#line 184
typeattribute dumpstate hal_vehicle_client;
#line 184
#line 184
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 184
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 184
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 184
#line 184
typeattribute dumpstate hal_vehicle;
#line 184
# Find passthrough HAL implementations
#line 184
allow hal_vehicle system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 184
allow hal_vehicle vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 184
allow hal_vehicle vendor_file:file { read open getattr execute map };
#line 184
#line 184
;
#line 184
allow hal_vehicle_server dumpstate:fifo_file write;
#line 184
allow hal_vehicle_server dumpstate:fd use;
#line 184
#line 185
#line 185
typeattribute dumpstate halclientdomain;
#line 185
typeattribute dumpstate hal_weaver_client;
#line 185
#line 185
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 185
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 185
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 185
#line 185
typeattribute dumpstate hal_weaver;
#line 185
# Find passthrough HAL implementations
#line 185
allow hal_weaver system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 185
allow hal_weaver vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 185
allow hal_weaver vendor_file:file { read open getattr execute map };
#line 185
#line 185
;
#line 185
allow hal_weaver_server dumpstate:fifo_file write;
#line 185
allow hal_weaver_server dumpstate:fd use;
#line 185
#line 186
#line 186
typeattribute dumpstate halclientdomain;
#line 186
typeattribute dumpstate hal_wifi_client;
#line 186
#line 186
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 186
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 186
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 186
#line 186
typeattribute dumpstate hal_wifi;
#line 186
# Find passthrough HAL implementations
#line 186
allow hal_wifi system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 186
allow hal_wifi vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 186
allow hal_wifi vendor_file:file { read open getattr execute map };
#line 186
#line 186
;
#line 186
allow hal_wifi_server dumpstate:fifo_file write;
#line 186
allow hal_wifi_server dumpstate:fd use;
#line 186
# Vibrate the device after we are done collecting the bugreport
#line 189
typeattribute dumpstate halclientdomain;
#line 189
typeattribute dumpstate hal_vibrator_client;
#line 189
#line 189
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 189
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 189
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 189
#line 189
typeattribute dumpstate hal_vibrator;
#line 189
# Find passthrough HAL implementations
#line 189
allow hal_vibrator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 189
allow hal_vibrator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 189
allow hal_vibrator vendor_file:file { read open getattr execute map };
#line 189
#line 189
# Reading /proc/PID/maps of other processes
allow dumpstate self:{ capability cap_userns } sys_ptrace;
# Allow the bugreport service to create a file in
# /data/data/com.android.shell/files/bugreports/bugreport
allow dumpstate shell_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow dumpstate shell_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Run a shell.
allow dumpstate shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# For running am and similar framework commands.
# Run /system/bin/app_process.
allow dumpstate zygote_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# For Bluetooth
allow dumpstate bluetooth_data_file:dir search;
allow dumpstate bluetooth_logs_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow dumpstate bluetooth_logs_data_file:file { getattr open read ioctl lock map watch watch_reads };
# For Nfc
allow dumpstate nfc_logs_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow dumpstate nfc_logs_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Dumpstate calls screencap, which grabs a screenshot. Needs gpu access
allow dumpstate gpu_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow dumpstate gpu_device:dir { open getattr read search ioctl lock watch watch_reads };
# logd access
#line 220
allow dumpstate logcat_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
#line 220
#line 220
allow dumpstate logdr_socket:sock_file write;
#line 220
allow dumpstate logd:unix_stream_socket connectto;
#line 220
#line 220
#line 221
# Group AID_LOG checked by filesystem & logd
#line 221
# to permit control commands
#line 221
#line 221
allow dumpstate logd_socket:sock_file write;
#line 221
allow dumpstate logd:unix_stream_socket connectto;
#line 221
#line 221
#line 222
allow dumpstate runtime_event_log_tags_file:file { getattr open read ioctl lock map watch watch_reads };
#line 222
# Read files in /proc
allow dumpstate {
proc_bootconfig
proc_buddyinfo
proc_cmdline
proc_meminfo
proc_modules
proc_net_type
proc_pipe_conf
proc_pagetypeinfo
proc_qtaguid_ctrl
proc_qtaguid_stat
proc_slabinfo
proc_version
proc_vmallocinfo
proc_vmstat
}:file { getattr open read ioctl lock map watch watch_reads };
# Read network state info files.
allow dumpstate net_data_file:dir search;
allow dumpstate net_data_file:file { getattr open read ioctl lock map watch watch_reads };
# List sockets via ss.
allow dumpstate self:netlink_tcpdiag_socket { { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } } nlmsg_read };
# Access /data/tombstones.
allow dumpstate tombstone_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow dumpstate tombstone_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Access /cache/recovery
allow dumpstate cache_recovery_file:dir { open getattr read search ioctl lock watch watch_reads };
allow dumpstate cache_recovery_file:file { getattr open read ioctl lock map watch watch_reads };
# Access /data/misc/recovery
allow dumpstate recovery_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow dumpstate recovery_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Access /data/misc/update_engine & /data/misc/update_engine_log
allow dumpstate { update_engine_data_file update_engine_log_data_file }:dir { open getattr read search ioctl lock watch watch_reads };
allow dumpstate { update_engine_data_file update_engine_log_data_file }:file { getattr open read ioctl lock map watch watch_reads };
# Access /data/misc/snapuserd_log
allow dumpstate snapuserd_log_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow dumpstate snapuserd_log_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Access /data/misc/profiles/{cur,ref}/
#line 272
# Access /data/misc/logd
allow dumpstate misc_logd_file:dir { open getattr read search ioctl lock watch watch_reads };
allow dumpstate misc_logd_file:file { getattr open read ioctl lock map watch watch_reads };
# Access /data/misc/prereboot
allow dumpstate prereboot_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow dumpstate prereboot_data_file:file { getattr open read ioctl lock map watch watch_reads };
allow dumpstate app_fuse_file:dir { open getattr read search ioctl lock watch watch_reads };
allow dumpstate overlayfs_file:dir { open getattr read search ioctl lock watch watch_reads };
allow dumpstate {
service_manager_type
-apex_service
-dumpstate_service
-gatekeeper_service
-hal_service_type
-virtual_touchpad_service
-vold_service
-default_android_service
}:service_manager find;
# suppress denials for services dumpstate should not be accessing.
dontaudit dumpstate {
apex_service
dumpstate_service
gatekeeper_service
hal_service_type
virtual_touchpad_service
vold_service
}:service_manager find;
# Most of these are neverallowed.
dontaudit dumpstate hwservice_manager_type:hwservice_manager find;
allow dumpstate servicemanager:service_manager list;
allow dumpstate hwservicemanager:hwservice_manager list;
allow dumpstate devpts:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Read any system properties
#line 314
allow dumpstate property_type:file { getattr open read map };
#line 314
# Access to /data/media.
# This should be removed if sdcardfs is modified to alter the secontext for its
# accesses to the underlying FS.
allow dumpstate media_rw_data_file:dir getattr;
allow dumpstate proc_interrupts:file { getattr open read ioctl lock map watch watch_reads };
allow dumpstate proc_zoneinfo:file { getattr open read ioctl lock map watch watch_reads };
# Create a service for talking back to system_server
#line 324
allow dumpstate dumpstate_service:service_manager { add find };
#line 324
neverallow { domain -dumpstate } dumpstate_service:service_manager add;
#line 324
#line 324
# On debug builds with root, allow binder services to use binder over TCP.
#line 324
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 324
#line 324
# use /dev/ion for screen capture
allow dumpstate ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
# Allow dumpstate to run top
allow dumpstate proc_stat:file { getattr open read ioctl lock map watch watch_reads };
allow dumpstate proc_pressure_cpu:file { getattr open read ioctl lock map watch watch_reads };
allow dumpstate proc_pressure_mem:file { getattr open read ioctl lock map watch watch_reads };
allow dumpstate proc_pressure_io:file { getattr open read ioctl lock map watch watch_reads };
# Allow dumpstate to run ps
allow dumpstate proc_pid_max:file { getattr open read ioctl lock map watch watch_reads };
# Allow dumpstate to talk to installd over binder
#line 340
# Call the server domain and optionally transfer references to it.
#line 340
allow dumpstate installd:binder { call transfer };
#line 340
# Allow the serverdomain to transfer references to the client on the reply.
#line 340
allow installd dumpstate:binder transfer;
#line 340
# Receive and use open files from the server.
#line 340
allow dumpstate installd:fd use;
#line 340
;
# Allow dumpstate to run ip xfrm policy
allow dumpstate self:netlink_xfrm_socket { { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } } nlmsg_read };
# Allow dumpstate to run iotop
allow dumpstate self:netlink_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# newer kernels (e.g. 4.4) have a new class for sockets
allow dumpstate self:netlink_generic_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# Allow dumpstate to run ss
allow dumpstate { domain pdx_channel_socket_type pdx_endpoint_socket_type }:{ socket tcp_socket udp_socket rawip_socket netlink_socket packet_socket key_socket unix_stream_socket unix_dgram_socket appletalk_socket netlink_route_socket netlink_tcpdiag_socket netlink_nflog_socket netlink_xfrm_socket netlink_selinux_socket netlink_audit_socket netlink_dnrt_socket netlink_kobject_uevent_socket tun_socket netlink_iscsi_socket netlink_fib_lookup_socket netlink_connector_socket netlink_netfilter_socket netlink_generic_socket netlink_scsitransport_socket netlink_rdma_socket netlink_crypto_socket sctp_socket icmp_socket ax25_socket ipx_socket netrom_socket atmpvc_socket x25_socket rose_socket decnet_socket atmsvc_socket rds_socket irda_socket pppox_socket llc_socket can_socket tipc_socket bluetooth_socket iucv_socket rxrpc_socket isdn_socket phonet_socket ieee802154_socket caif_socket alg_socket nfc_socket vsock_socket kcm_socket qipcrtr_socket smc_socket xdp_socket } getattr;
# Allow dumpstate to read linkerconfig directory
allow dumpstate linkerconfig_file:dir { read open };
# For when dumpstate runs df
dontaudit dumpstate {
mnt_vendor_file
mirror_data_file
mnt_user_file
mnt_product_file
}:dir search;
dontaudit dumpstate {
apex_mnt_dir
linkerconfig_file
mirror_data_file
mnt_user_file
}:dir getattr;
# Allow dumpstate to talk to bufferhubd over binder
#line 371
# Call the server domain and optionally transfer references to it.
#line 371
allow dumpstate bufferhubd:binder { call transfer };
#line 371
# Allow the serverdomain to transfer references to the client on the reply.
#line 371
allow bufferhubd dumpstate:binder transfer;
#line 371
# Receive and use open files from the server.
#line 371
allow dumpstate bufferhubd:fd use;
#line 371
;
# Allow dumpstate to talk to mediaswcodec over binder
#line 374
# Call the server domain and optionally transfer references to it.
#line 374
allow dumpstate mediaswcodec:binder { call transfer };
#line 374
# Allow the serverdomain to transfer references to the client on the reply.
#line 374
allow mediaswcodec dumpstate:binder transfer;
#line 374
# Receive and use open files from the server.
#line 374
allow dumpstate mediaswcodec:fd use;
#line 374
;
#Access /data/misc/snapshotctl_log
allow dumpstate snapshotctl_log_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow dumpstate snapshotctl_log_data_file:file { getattr open read ioctl lock map watch watch_reads };
#Allow access to /dev/binderfs/binder_logs
allow dumpstate binderfs_logs:dir { open getattr read search ioctl lock watch watch_reads };
allow dumpstate binderfs_logs:file { getattr open read ioctl lock map watch watch_reads };
allow dumpstate binderfs_logs_proc:file { getattr open read ioctl lock map watch watch_reads };
allow dumpstate binderfs_logs_stats:file { getattr open read ioctl lock map watch watch_reads };
#line 386
allow dumpstate apex_mnt_dir:dir { open getattr read search ioctl lock watch watch_reads };
#line 386
allow dumpstate apex_info_file:file { getattr open read ioctl lock map watch watch_reads };
#line 386
#line 386
allow dumpstate vendor_apex_metadata_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 386
allow dumpstate vendor_apex_metadata_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 386
#line 386
# Allow reading files under /data/system/shutdown-checkpoints/
allow dumpstate shutdown_checkpoints_system_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow dumpstate shutdown_checkpoints_system_data_file:file { getattr open read ioctl lock map watch watch_reads };
###
### neverallow rules
###
# dumpstate has capability sys_ptrace, but should only use that capability for
# accessing sensitive /proc/PID files, never for using ptrace attach.
neverallow dumpstate *:process ptrace;
# only system_server, dumpstate, traceur_app and shell can find the dumpstate service
neverallow {
domain
-system_server
-shell
-traceur_app
-dumpstate
} dumpstate_service:service_manager find;
#line 1 "system/sepolicy/public/e2fs.te"
type e2fs, domain, coredomain;
type e2fs_exec, system_file_type, exec_type, file_type;
allow e2fs devpts:chr_file { read write getattr ioctl };
allow e2fs dev_type:blk_file getattr;
allow e2fs block_device:dir search;
allow e2fs userdata_block_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow e2fs metadata_block_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow e2fs dm_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow e2fs zoned_block_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Vold needs to capture mkfs.ext4's output
allow e2fs vold:fd use;
# Need to be able to format a partition
allow e2fs sysfs_dm:dir { open getattr read search ioctl lock watch watch_reads };
allow e2fs sysfs_dm:file { getattr open read ioctl lock map watch watch_reads };
allowxperm e2fs { userdata_block_device metadata_block_device dm_device zoned_block_device }:blk_file ioctl {
0x0000127d 0x00001277 0x0000127b 0x0000127c 0x0000125e 0xc0101282 0x40101283
};
allow e2fs {
proc_filesystems
proc_mounts
proc_swaps
}:file { getattr open read ioctl lock map watch watch_reads };
# access /sys/fs/ext4/features
allow e2fs sysfs_fs_ext4_features:dir search;
allow e2fs sysfs_fs_ext4_features:file { getattr open read ioctl lock map watch watch_reads };
# access SELinux context files
allow e2fs file_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
#line 1 "system/sepolicy/public/ephemeral_app.te"
###
### Ephemeral apps.
###
### This file defines the security policy for apps with the ephemeral
### feature.
###
### The ephemeral_app domain is a reduced permissions sandbox allowing
### ephemeral applications to be safely installed and run. Non ephemeral
### applications may also opt-in to ephemeral to take advantage of the
### additional security features.
###
### PackageManager flags an app as ephemeral at install time.
type ephemeral_app, domain;
#line 1 "system/sepolicy/public/evsmanagerd.te"
# evsmanager daemon
type evsmanagerd, domain;
#line 1 "system/sepolicy/public/extra_free_kbytes.te"
# The extra_free_kbytes.sh script run by init.
type extra_free_kbytes, domain;
type extra_free_kbytes_exec, system_file_type, exec_type, file_type;
# required permissions to run the script from init
allow extra_free_kbytes shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow extra_free_kbytes system_file:file { getattr execute execute_no_trans map };
allow extra_free_kbytes toolbox_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# files used by the script
allow extra_free_kbytes proc_extra_free_kbytes:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow extra_free_kbytes proc_watermark_scale_factor:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow extra_free_kbytes proc_zoneinfo:file { getattr open read ioctl lock map watch watch_reads };
#line 1 "system/sepolicy/public/fastbootd.te"
# fastbootd (used in recovery init.rc for /sbin/fastbootd)
# Declare the domain unconditionally so we can always reference it
# in neverallow rules.
type fastbootd, domain;
# But the allow rules are only included in the recovery policy.
# Otherwise fastbootd is only allowed the domain rules.
#line 119
###
### neverallow rules
###
# Write permission is required to wipe userdata
# until recovery supports vold.
neverallow fastbootd {
data_file_type
}:file { { execute execute_no_trans } };
#line 1 "system/sepolicy/public/file.te"
# Filesystem types
type labeledfs, fs_type;
type pipefs, fs_type;
type sockfs, fs_type;
type rootfs, fs_type;
type proc, fs_type, proc_type;
type binderfs, fs_type;
type binderfs_logs, fs_type;
type binderfs_logs_proc, fs_type;
type binderfs_logs_stats, fs_type;
type binderfs_features, fs_type;
# Security-sensitive proc nodes that should not be writable to most.
type proc_security, fs_type, proc_type;
type proc_drop_caches, fs_type, proc_type;
type proc_overcommit_memory, fs_type, proc_type;
type proc_min_free_order_shift, fs_type, proc_type;
type proc_kpageflags, fs_type, proc_type;
type proc_watermark_boost_factor, fs_type, proc_type;
type proc_percpu_pagelist_high_fraction, fs_type, proc_type;
# proc, sysfs, or other nodes that permit configuration of kernel usermodehelpers.
type usermodehelper, fs_type, proc_type;
type sysfs_usermodehelper, fs_type, sysfs_type;
type proc_qtaguid_ctrl, fs_type, mlstrustedobject, proc_type;
type proc_qtaguid_stat, fs_type, mlstrustedobject, proc_type;
type proc_bluetooth_writable, fs_type, proc_type;
type proc_abi, fs_type, proc_type;
type proc_asound, fs_type, proc_type;
type proc_bootconfig, fs_type, proc_type;
type proc_bpf, fs_type, proc_type;
type proc_buddyinfo, fs_type, proc_type;
type proc_cmdline, fs_type, proc_type;
type proc_cpu_alignment, fs_type, proc_type;
type proc_cpuinfo, fs_type, proc_type;
type proc_dirty, fs_type, proc_type;
type proc_diskstats, fs_type, proc_type;
type proc_extra_free_kbytes, fs_type, proc_type;
type proc_filesystems, fs_type, proc_type;
type proc_fs_verity, fs_type, proc_type;
type proc_hostname, fs_type, proc_type;
type proc_hung_task, fs_type, proc_type;
type proc_interrupts, fs_type, proc_type;
type proc_iomem, fs_type, proc_type;
type proc_kallsyms, fs_type, proc_type;
type proc_keys, fs_type, proc_type;
type proc_kmsg, fs_type, proc_type;
type proc_loadavg, fs_type, proc_type;
type proc_locks, fs_type, proc_type;
type proc_lowmemorykiller, fs_type, proc_type;
type proc_max_map_count, fs_type, proc_type;
type proc_meminfo, fs_type, proc_type;
type proc_misc, fs_type, proc_type;
type proc_modules, fs_type, proc_type;
type proc_mounts, fs_type, proc_type;
type proc_net, fs_type, proc_type, proc_net_type;
type proc_net_tcp_udp, fs_type, proc_type;
type proc_page_cluster, fs_type, proc_type;
type proc_pagetypeinfo, fs_type, proc_type;
type proc_panic, fs_type, proc_type;
type proc_perf, fs_type, proc_type;
type proc_pid_max, fs_type, proc_type;
type proc_pipe_conf, fs_type, proc_type;
type proc_pressure_cpu, fs_type, proc_type;
type proc_pressure_io, fs_type, proc_type;
type proc_pressure_mem, fs_type, proc_type;
type proc_random, fs_type, proc_type;
type proc_sched, fs_type, proc_type;
type proc_slabinfo, fs_type, proc_type;
type proc_stat, fs_type, proc_type;
type proc_swaps, fs_type, proc_type;
type proc_sysrq, fs_type, proc_type;
type proc_timer, fs_type, proc_type;
type proc_tty_drivers, fs_type, proc_type;
type proc_uid_cputime_showstat, fs_type, proc_type;
type proc_uid_cputime_removeuid, fs_type, proc_type;
type proc_uid_io_stats, fs_type, proc_type;
type proc_uid_procstat_set, fs_type, proc_type;
type proc_uid_time_in_state, fs_type, proc_type;
type proc_uid_concurrent_active_time, fs_type, proc_type;
type proc_uid_concurrent_policy_time, fs_type, proc_type;
type proc_uid_cpupower, fs_type, proc_type;
type proc_uptime, fs_type, proc_type;
type proc_version, fs_type, proc_type;
type proc_vmallocinfo, fs_type, proc_type;
type proc_vmstat, fs_type, proc_type;
type proc_watermark_scale_factor, fs_type, proc_type;
type proc_zoneinfo, fs_type, proc_type;
type proc_vendor_sched, proc_type, fs_type;
type selinuxfs, fs_type, mlstrustedobject;
type fusectlfs, fs_type;
type cgroup, fs_type, mlstrustedobject;
type cgroup_v2, fs_type;
type sysfs, fs_type, sysfs_type, mlstrustedobject;
type sysfs_android_usb, fs_type, sysfs_type;
type sysfs_uio, sysfs_type, fs_type;
type sysfs_batteryinfo, fs_type, sysfs_type;
type sysfs_bluetooth_writable, fs_type, sysfs_type, mlstrustedobject;
type sysfs_devfreq_cur, fs_type, sysfs_type;
type sysfs_devfreq_dir, fs_type, sysfs_type;
type sysfs_devices_block, fs_type, sysfs_type;
type sysfs_dm, fs_type, sysfs_type;
type sysfs_dm_verity, fs_type, sysfs_type;
type sysfs_dma_heap, fs_type, sysfs_type;
type sysfs_dmabuf_stats, fs_type, sysfs_type;
type sysfs_dt_firmware_android, fs_type, sysfs_type;
type sysfs_extcon, fs_type, sysfs_type;
type sysfs_ion, fs_type, sysfs_type;
type sysfs_ipv4, fs_type, sysfs_type;
type sysfs_kernel_notes, fs_type, sysfs_type, mlstrustedobject;
type sysfs_leds, fs_type, sysfs_type;
type sysfs_loop, fs_type, sysfs_type;
type sysfs_gpu, fs_type, sysfs_type;
type sysfs_hwrandom, fs_type, sysfs_type;
type sysfs_nfc_power_writable, fs_type, sysfs_type, mlstrustedobject;
type sysfs_wake_lock, fs_type, sysfs_type;
type sysfs_net, fs_type, sysfs_type;
type sysfs_power, fs_type, sysfs_type;
type sysfs_rtc, fs_type, sysfs_type;
type sysfs_suspend_stats, fs_type, sysfs_type;
type sysfs_switch, fs_type, sysfs_type;
type sysfs_sync_on_suspend, fs_type, sysfs_type;
type sysfs_transparent_hugepage, fs_type, sysfs_type;
type sysfs_lru_gen_enabled, fs_type, sysfs_type;
type sysfs_usb, fs_type, sysfs_type;
type sysfs_wakeup, fs_type, sysfs_type;
type sysfs_wakeup_reasons, fs_type, sysfs_type;
type sysfs_fs_ext4_features, sysfs_type, fs_type;
type sysfs_fs_f2fs, sysfs_type, fs_type;
type sysfs_fs_fuse_bpf, sysfs_type, fs_type;
type sysfs_fs_fuse_features, sysfs_type, fs_type;
type sysfs_fs_incfs_features, sysfs_type, fs_type;
type sysfs_fs_incfs_metrics, sysfs_type, fs_type;
type sysfs_vendor_sched, sysfs_type, fs_type;
#line 135
type fs_bpf, fs_type, bpffs_type;
# TODO: S+ fs_bpf_tethering (used by mainline) should be private
type fs_bpf_tethering, fs_type, bpffs_type;
type fs_bpf_vendor, fs_type, bpffs_type;
type configfs, fs_type;
# /sys/devices/cs_etm
type sysfs_devices_cs_etm, fs_type, sysfs_type;
# /sys/devices/system/cpu
type sysfs_devices_system_cpu, fs_type, sysfs_type;
# /sys/module/lowmemorykiller
type sysfs_lowmemorykiller, fs_type, sysfs_type;
# /sys/module/wlan/parameters/fwpath
type sysfs_wlan_fwpath, fs_type, sysfs_type;
type sysfs_vibrator, fs_type, sysfs_type;
type sysfs_uhid, fs_type, sysfs_type;
type sysfs_thermal, sysfs_type, fs_type;
type sysfs_zram, fs_type, sysfs_type;
type sysfs_zram_uevent, fs_type, sysfs_type;
type inotify, fs_type, mlstrustedobject;
type devpts, fs_type, mlstrustedobject;
type tmpfs, fs_type;
type shm, fs_type;
type mqueue, fs_type;
type fuse, fusefs_type, fs_type, mlstrustedobject;
type fuseblk, sdcard_type, fusefs_type, fs_type, mlstrustedobject;
type sdcardfs, sdcard_type, fs_type, mlstrustedobject;
type vfat, sdcard_type, fs_type, mlstrustedobject;
type exfat, sdcard_type, fs_type, mlstrustedobject;
type debugfs, fs_type, debugfs_type;
type debugfs_kprobes, fs_type, debugfs_type;
type debugfs_mmc, fs_type, debugfs_type;
type debugfs_mm_events_tracing, fs_type, debugfs_type, tracefs_type;
type debugfs_trace_marker, fs_type, debugfs_type, mlstrustedobject, tracefs_type;
type debugfs_tracing, fs_type, debugfs_type, mlstrustedobject, tracefs_type;
type debugfs_tracing_debug, fs_type, debugfs_type, mlstrustedobject, tracefs_type;
type debugfs_tracing_instances, fs_type, debugfs_type, tracefs_type;
type debugfs_tracing_printk_formats, fs_type, debugfs_type, tracefs_type;
type debugfs_wakeup_sources, fs_type, debugfs_type;
type debugfs_wifi_tracing, fs_type, debugfs_type, tracefs_type;
type securityfs, fs_type;
type pstorefs, fs_type;
type functionfs, fs_type, mlstrustedobject;
type oemfs, fs_type, contextmount_type;
type usbfs, fs_type;
type binfmt_miscfs, fs_type;
type app_fusefs, fs_type, fusefs_type, contextmount_type;
# File types
type unlabeled, file_type;
# Default type for anything under /system.
type system_file, system_file_type, file_type;
# Default type for /system/asan.options
type system_asan_options_file, system_file_type, file_type;
# Type for /system/etc/event-log-tags (liblog implementation detail)
type system_event_log_tags_file, system_file_type, file_type;
# Default type for anything under /system/lib[64].
type system_lib_file, system_file_type, file_type;
# system libraries that are available only to bootstrap processes
type system_bootstrap_lib_file, system_file_type, file_type;
# Default type for the group file /system/etc/group.
type system_group_file, system_file_type, file_type;
# Default type for linker executable /system/bin/linker[64].
type system_linker_exec, system_file_type, file_type;
# Default type for linker config /system/etc/ld.config.*.
type system_linker_config_file, system_file_type, file_type;
# Default type for the passwd file /system/etc/passwd.
type system_passwd_file, system_file_type, file_type;
# Default type for linker config /system/etc/seccomp_policy/*.
type system_seccomp_policy_file, system_file_type, file_type;
# Default type for cacerts in /system/etc/security/cacerts/*.
type system_security_cacerts_file, system_file_type, file_type;
# Default type for /system/bin/tcpdump.
type tcpdump_exec, system_file_type, exec_type, file_type;
# Default type for zoneinfo files in /system/usr/share/zoneinfo/*.
type system_zoneinfo_file, system_file_type, file_type;
# Cgroups description file under /system/etc/cgroups.json
type cgroup_desc_file, system_file_type, file_type;
# Cgroups description file under /system/etc/task_profiles/cgroups_*.json
type cgroup_desc_api_file, system_file_type, file_type;
# Vendor cgroups description file under /vendor/etc/cgroups.json
type vendor_cgroup_desc_file, vendor_file_type, file_type;
# Task profiles file under /system/etc/task_profiles.json
type task_profiles_file, system_file_type, file_type;
# Task profiles file under /system/etc/task_profiles/task_profiles_*.json
type task_profiles_api_file, system_file_type, file_type;
# Vendor task profiles file under /vendor/etc/task_profiles.json
type vendor_task_profiles_file, vendor_file_type, file_type;
# Type for /system/apex/com.android.art
type art_apex_dir, system_file_type, file_type;
# /linkerconfig(/.*)?
type linkerconfig_file, file_type;
# Control files under /data/incremental
type incremental_control_file, file_type, data_file_type, core_data_file_type;
# /oem/media/bootanimation.zip|shutdownanimation.zip|userspace-reboot.zip
type bootanim_oem_file, file_type, system_file_type;
# Default type for directories search for
# HAL implementations
type vendor_hal_file, vendor_file_type, file_type;
# Default type for under /vendor or /system/vendor
type vendor_file, vendor_file_type, file_type;
# Default type for everything in /vendor/app
type vendor_app_file, vendor_file_type, file_type;
# Default type for everything under /vendor/etc/
type vendor_configs_file, vendor_file_type, file_type;
# Default type for all *same process* HALs and their lib/bin dependencies.
# e.g. libEGL_xxx.so, android.hardware.graphics.mapper@2.0-impl.so
type same_process_hal_file, vendor_file_type, file_type;
# Default type for vndk-sp libs. /vendor/lib/vndk-sp
type vndk_sp_file, vendor_file_type, file_type;
# Default type for everything in /vendor/framework
type vendor_framework_file, vendor_file_type, file_type;
# Default type for everything in /vendor/overlay
type vendor_overlay_file, vendor_file_type, file_type;
# Type for all vendor public libraries. These libs should only be exposed to
# apps. ABI stability of these libs is vendor's responsibility.
type vendor_public_lib_file, vendor_file_type, file_type;
# Type for all vendor public libraries for system. These libs should only be exposed to
# system. ABI stability of these libs is vendor's responsibility.
type vendor_public_framework_file, vendor_file_type, file_type;
# Type for all microdroid related files in the vendor partition.
# Files having this type should be read-only.
type vendor_microdroid_file, vendor_file_type, file_type;
# Input configuration
type vendor_keylayout_file, vendor_file_type, file_type;
type vendor_keychars_file, vendor_file_type, file_type;
type vendor_idc_file, vendor_file_type, file_type;
# Type for vendor uuid mapping config file
type vendor_uuid_mapping_config_file, vendor_file_type, file_type;
# SoC-specific virtual machine disk files
type vendor_vm_file, vendor_file_type, file_type;
# SoC-specific virtual machine disk files that are mutable
type vendor_vm_data_file, vendor_file_type, file_type;
# /metadata partition itself
type metadata_file, file_type;
# Vold files within /metadata
type vold_metadata_file, file_type;
# GSI files within /metadata
type gsi_metadata_file, gsi_metadata_file_type, file_type;
# DSU (GSI) files within /metadata that are globally readable.
type gsi_public_metadata_file, gsi_metadata_file_type, file_type;
# system_server shares Weaver slot information in /metadata
type password_slot_metadata_file, file_type;
# APEX files within /metadata
type apex_metadata_file, file_type;
# libsnapshot files within /metadata
type ota_metadata_file, file_type;
# property files within /metadata/bootstat
type metadata_bootstat_file, file_type;
# userspace reboot files within /metadata/userspacereboot
type userspace_reboot_metadata_file, file_type;
# Staged install files within /metadata/staged-install
type staged_install_file, file_type;
# Metadata information within /metadata/watchdog
type watchdog_metadata_file, file_type;
# Repair mode files within /metadata/repair-mode
type repair_mode_metadata_file, file_type;
# Aconfig storage file
type aconfig_storage_metadata_file, file_type;
# Aconfig storage flag value persistent copy
type aconfig_storage_flags_metadata_file, file_type;
# Type for /dev/cpu_variant:.*.
type dev_cpu_variant, file_type;
# Speedup access for trusted applications to the runtime event tags
type runtime_event_log_tags_file, file_type;
# Type for /system/bin/logcat.
type logcat_exec, system_file_type, exec_type, file_type;
# Speedup access to cgroup map file
type cgroup_rc_file, file_type;
# /cores for coredumps on userdebug / eng builds
type coredump_file, file_type;
# Type of /data itself
type system_data_root_file, file_type, data_file_type, core_data_file_type;
# Default type for anything under /data.
type system_data_file, file_type, data_file_type, core_data_file_type;
# Default type for directories containing per-user encrypted directories, such
# as /data/user and /data/user_de.
type system_userdir_file, file_type, data_file_type, core_data_file_type;
# Type for /data/system/packages.list.
# TODO(b/129332765): Narrow down permissions to this.
# Find out users of system_data_file that should be granted only this.
type packages_list_file, file_type, data_file_type, core_data_file_type;
type game_mode_intervention_list_file, file_type, data_file_type, core_data_file_type;
# Default type for anything inside /data/vendor_{ce,de}.
type vendor_data_file, file_type, data_file_type;
# Type for /data/vendor_{ce,de} themselves. This has core_data_file_type
# because these directories themselves are platform-managed; only the files
# *inside* them are vendor data. (Somewhat similar to system_data_root_file.)
type vendor_userdir_file, file_type, data_file_type, core_data_file_type;
# Unencrypted data
type unencrypted_data_file, file_type, data_file_type, core_data_file_type;
# installd-create files in /data/misc/installd such as layout_version
type install_data_file, file_type, data_file_type, core_data_file_type;
# /data/drm - DRM plugin data
type drm_data_file, file_type, data_file_type, core_data_file_type;
# /data/adb - adb debugging files
type adb_data_file, file_type, data_file_type, core_data_file_type;
# /data/anr - ANR traces
type anr_data_file, file_type, data_file_type, core_data_file_type, mlstrustedobject;
# /data/tombstones - core dumps
type tombstone_data_file, file_type, data_file_type, core_data_file_type, mlstrustedobject;
# /data/vendor/tombstones/wifi - vendor wifi dumps
type tombstone_wifi_data_file, file_type, data_file_type;
# /data/apex - APEX data files
type apex_data_file, file_type, data_file_type, core_data_file_type;
# /data/app - user-installed apps
type apk_data_file, file_type, data_file_type, core_data_file_type;
type apk_tmp_file, file_type, data_file_type, core_data_file_type, mlstrustedobject;
# /data/app-private - forward-locked apps
type apk_private_data_file, file_type, data_file_type, core_data_file_type;
type apk_private_tmp_file, file_type, data_file_type, core_data_file_type, mlstrustedobject;
# /data/dalvik-cache
type dalvikcache_data_file, file_type, data_file_type, core_data_file_type;
# /data/ota
type ota_data_file, file_type, data_file_type, core_data_file_type;
# /data/ota_package
type ota_package_file, file_type, data_file_type, core_data_file_type, mlstrustedobject;
# /data/misc/profiles
type user_profile_root_file, file_type, data_file_type, core_data_file_type;
type user_profile_data_file, file_type, data_file_type, core_data_file_type, mlstrustedobject;
# /data/misc/profman
type profman_dump_data_file, file_type, data_file_type, core_data_file_type;
# /data/misc/prereboot
type prereboot_data_file, file_type, data_file_type, core_data_file_type;
# /data/resource-cache
type resourcecache_data_file, file_type, data_file_type, core_data_file_type;
# /data/local - writable by shell
type shell_data_file, file_type, data_file_type, core_data_file_type, app_data_file_type, mlstrustedobject;
# /data/property
type property_data_file, file_type, data_file_type, core_data_file_type;
# /data/bootchart
type bootchart_data_file, file_type, data_file_type, core_data_file_type;
# /data/system/dropbox
type dropbox_data_file, file_type, data_file_type, core_data_file_type;
# /data/system/heapdump
type heapdump_data_file, file_type, data_file_type, core_data_file_type, mlstrustedobject;
# /data/nativetest
type nativetest_data_file, file_type, data_file_type, core_data_file_type;
# /data/local/tests
type shell_test_data_file, file_type, data_file_type, core_data_file_type;
# /data/system_de/0/ringtones
type ringtone_file, file_type, data_file_type, core_data_file_type, mlstrustedobject;
# /data/preloads
type preloads_data_file, file_type, data_file_type, core_data_file_type;
# /data/preloads/media
type preloads_media_file, file_type, data_file_type, core_data_file_type;
# /data/misc/dhcp and /data/misc/dhcp-6.8.2
type dhcp_data_file, file_type, data_file_type, core_data_file_type;
# /data/server_configurable_flags
type server_configurable_flags_data_file, file_type, data_file_type, core_data_file_type;
# /data/app-staging
type staging_data_file, file_type, data_file_type, core_data_file_type;
# /vendor/apex
type vendor_apex_file, vendor_file_type, file_type;
# apex_manifest.pb in vendor apex
type vendor_apex_metadata_file, vendor_file_type, file_type;
# /data/system/shutdown-checkpoints
type shutdown_checkpoints_system_data_file, file_type, data_file_type, core_data_file_type;
# Mount locations managed by vold
type mnt_media_rw_file, file_type;
type mnt_user_file, file_type;
type mnt_pass_through_file, file_type;
type mnt_expand_file, file_type;
type mnt_sdcard_file, file_type;
type storage_file, file_type;
# Label for storage dirs which are just mount stubs
type mnt_media_rw_stub_file, file_type;
type storage_stub_file, file_type;
# Mount location for read-write vendor partitions.
type mnt_vendor_file, file_type;
# Mount location for read-write product partitions.
type mnt_product_file, file_type;
# Mount point used for APEX images
type apex_mnt_dir, file_type;
# /apex/apex-info-list.xml created by apexd
type apex_info_file, file_type;
# /postinstall: Mount point used by update_engine to run postinstall.
type postinstall_mnt_dir, file_type;
# Files inside the /postinstall mountpoint are all labeled as postinstall_file.
type postinstall_file, file_type;
# /postinstall/apex: Mount point used for APEX images within /postinstall.
type postinstall_apex_mnt_dir, file_type;
# /data_mirror: Contains mirror directory for storing all apps data.
type mirror_data_file, file_type, core_data_file_type;
# /data/misc subdirectories
type adb_keys_file, file_type, data_file_type, core_data_file_type;
type apex_system_server_data_file, file_type, data_file_type, core_data_file_type, apex_data_file_type;
type apex_module_data_file, file_type, data_file_type, core_data_file_type;
type apex_ota_reserved_file, file_type, data_file_type, core_data_file_type;
type apex_rollback_data_file, file_type, data_file_type, core_data_file_type;
type appcompat_data_file, file_type, data_file_type, core_data_file_type;
type audio_data_file, file_type, data_file_type, core_data_file_type;
type audioserver_data_file, file_type, data_file_type, core_data_file_type;
type bluetooth_data_file, file_type, data_file_type, core_data_file_type, app_data_file_type;
type bluetooth_logs_data_file, file_type, data_file_type, core_data_file_type;
type bootstat_data_file, file_type, data_file_type, core_data_file_type;
type boottrace_data_file, file_type, data_file_type, core_data_file_type;
type camera_data_file, file_type, data_file_type, core_data_file_type;
type credstore_data_file, file_type, data_file_type, core_data_file_type;
type gatekeeper_data_file, file_type, data_file_type, core_data_file_type;
type incident_data_file, file_type, data_file_type, core_data_file_type;
type keychain_data_file, file_type, data_file_type, core_data_file_type;
type keystore_data_file, file_type, data_file_type, core_data_file_type;
type media_data_file, file_type, data_file_type, core_data_file_type;
type media_rw_data_file, file_type, data_file_type, core_data_file_type, mlstrustedobject;
type media_userdir_file, file_type, data_file_type, core_data_file_type;
type misc_user_data_file, file_type, data_file_type, core_data_file_type;
type net_data_file, file_type, data_file_type, core_data_file_type;
type network_watchlist_data_file, file_type, data_file_type, core_data_file_type;
type nfc_data_file, file_type, data_file_type, core_data_file_type, app_data_file_type;
type nfc_logs_data_file, file_type, data_file_type, core_data_file_type;
type radio_data_file, file_type, data_file_type, core_data_file_type, app_data_file_type, mlstrustedobject;
type recovery_data_file, file_type, data_file_type, core_data_file_type;
type shared_relro_file, file_type, data_file_type, core_data_file_type, mlstrustedobject;
type snapshotctl_log_data_file, file_type, data_file_type, core_data_file_type;
type stats_config_data_file, file_type, data_file_type, core_data_file_type;
type stats_data_file, file_type, data_file_type, core_data_file_type;
type systemkeys_data_file, file_type, data_file_type, core_data_file_type;
type textclassifier_data_file, file_type, data_file_type, core_data_file_type;
type trace_data_file, file_type, data_file_type, core_data_file_type, mlstrustedobject;
type vpn_data_file, file_type, data_file_type, core_data_file_type;
type wifi_data_file, file_type, data_file_type, core_data_file_type;
type vold_data_file, file_type, data_file_type, core_data_file_type;
type tee_data_file, file_type, data_file_type;
type update_engine_data_file, file_type, data_file_type, core_data_file_type;
type update_engine_log_data_file, file_type, data_file_type, core_data_file_type;
type snapuserd_log_data_file, file_type, data_file_type, core_data_file_type;
# /data/misc/trace for method traces on userdebug / eng builds
type method_trace_data_file, file_type, data_file_type, core_data_file_type, mlstrustedobject;
type gsi_data_file, file_type, data_file_type, core_data_file_type;
type radio_core_data_file, file_type, data_file_type, core_data_file_type;
# /data/data subdirectories - app sandboxes
type app_data_file, file_type, data_file_type, core_data_file_type, app_data_file_type;
# /data/data subdirectories - priv-app sandboxes
type privapp_data_file, file_type, data_file_type, core_data_file_type, app_data_file_type;
# /data/data subdirectory for system UID apps.
type system_app_data_file, file_type, data_file_type, core_data_file_type, app_data_file_type, mlstrustedobject;
# Compatibility with type name used in Android 4.3 and 4.4.
# Default type for anything under /cache
type cache_file, file_type, data_file_type, core_data_file_type, mlstrustedobject;
# Type for /cache/overlay /mnt/scratch/overlay
type overlayfs_file, file_type, data_file_type, core_data_file_type;
# Type for /cache/backup_stage/* (fd interchange with apps)
type cache_backup_file, file_type, data_file_type, core_data_file_type, mlstrustedobject;
# type for anything under /cache/backup (local transport storage)
type cache_private_backup_file, file_type, data_file_type, core_data_file_type;
# Type for anything under /cache/recovery
type cache_recovery_file, file_type, data_file_type, core_data_file_type, mlstrustedobject;
# Default type for anything under /efs
type efs_file, file_type;
# Type for wallpaper file.
type wallpaper_file, file_type, data_file_type, core_data_file_type, mlstrustedobject;
# Type for shortcut manager icon file.
type shortcut_manager_icons, file_type, data_file_type, core_data_file_type, mlstrustedobject;
# Type for user icon file.
type icon_file, file_type, data_file_type, core_data_file_type;
# /mnt/asec
type asec_apk_file, file_type, data_file_type, core_data_file_type, mlstrustedobject;
# Elements of asec files (/mnt/asec) that are world readable
type asec_public_file, file_type, data_file_type, core_data_file_type;
# /data/app-asec
type asec_image_file, file_type, data_file_type, core_data_file_type;
# /data/backup and /data/secure/backup
type backup_data_file, file_type, data_file_type, core_data_file_type, mlstrustedobject;
# All devices have bluetooth efs files. But they
# vary per device, so this type is used in per
# device policy
type bluetooth_efs_file, file_type;
# Type for fingerprint template file
type fingerprintd_data_file, file_type, data_file_type, core_data_file_type;
# Type for _new_ fingerprint template file
type fingerprint_vendor_data_file, file_type, data_file_type;
# Type for appfuse file.
type app_fuse_file, file_type, data_file_type, core_data_file_type, mlstrustedobject;
# Type for face template file
type face_vendor_data_file, file_type, data_file_type;
# Type for iris template file
type iris_vendor_data_file, file_type, data_file_type;
# Socket types
type adbd_socket, file_type, coredomain_socket;
type bluetooth_socket, file_type, data_file_type, core_data_file_type, coredomain_socket;
type dnsproxyd_socket, file_type, coredomain_socket, mlstrustedobject;
type dumpstate_socket, file_type, coredomain_socket;
type fwmarkd_socket, file_type, coredomain_socket, mlstrustedobject;
type lmkd_socket, file_type, coredomain_socket;
type logd_socket, file_type, coredomain_socket, mlstrustedobject;
type logdr_socket, file_type, coredomain_socket, mlstrustedobject;
type logdw_socket, file_type, coredomain_socket, mlstrustedobject;
type mdns_socket, file_type, coredomain_socket;
type mdnsd_socket, file_type, coredomain_socket, mlstrustedobject;
type misc_logd_file, coredomain_socket, file_type, data_file_type, core_data_file_type;
type mtpd_socket, file_type, coredomain_socket;
type ot_daemon_socket, file_type, coredomain_socket;
type property_socket, file_type, coredomain_socket, mlstrustedobject;
type racoon_socket, file_type, coredomain_socket;
type recovery_socket, file_type, coredomain_socket;
type rild_socket, file_type;
type rild_debug_socket, file_type;
type snapuserd_socket, file_type, coredomain_socket;
type snapuserd_proxy_socket, file_type, coredomain_socket;
type statsdw_socket, file_type, coredomain_socket, mlstrustedobject;
type system_wpa_socket, file_type, data_file_type, core_data_file_type, coredomain_socket;
type system_ndebug_socket, file_type, data_file_type, core_data_file_type, coredomain_socket, mlstrustedobject;
type system_unsolzygote_socket, file_type, data_file_type, core_data_file_type, coredomain_socket, mlstrustedobject;
type tombstoned_crash_socket, file_type, coredomain_socket, mlstrustedobject;
type tombstoned_java_trace_socket, file_type, mlstrustedobject;
type tombstoned_intercept_socket, file_type, coredomain_socket;
type traced_consumer_socket, file_type, coredomain_socket, mlstrustedobject;
type traced_perf_socket, file_type, coredomain_socket, mlstrustedobject;
type traced_producer_socket, file_type, coredomain_socket, mlstrustedobject;
type uncrypt_socket, file_type, coredomain_socket;
type wpa_socket, file_type, data_file_type, core_data_file_type;
type zygote_socket, file_type, coredomain_socket;
type heapprofd_socket, file_type, coredomain_socket, mlstrustedobject;
# UART (for GPS) control proc file
type gps_control, file_type;
# PDX endpoint types
type pdx_display_dir, pdx_endpoint_dir_type, file_type;
type pdx_performance_dir, pdx_endpoint_dir_type, file_type;
type pdx_bufferhub_dir, pdx_endpoint_dir_type, file_type;
#line 577
typeattribute pdx_display_dir pdx_display_client_endpoint_dir_type;
#line 577
type pdx_display_client_endpoint_socket, pdx_display_client_endpoint_socket_type, pdx_endpoint_socket_type, file_type, coredomain_socket, mlstrustedobject, mlstrustedsubject;
#line 577
type pdx_display_client_channel_socket, pdx_display_client_channel_socket_type, pdx_channel_socket_type, coredomain_socket;
#line 577
#line 577
#line 578
typeattribute pdx_display_dir pdx_display_manager_endpoint_dir_type;
#line 578
type pdx_display_manager_endpoint_socket, pdx_display_manager_endpoint_socket_type, pdx_endpoint_socket_type, file_type, coredomain_socket, mlstrustedobject, mlstrustedsubject;
#line 578
type pdx_display_manager_channel_socket, pdx_display_manager_channel_socket_type, pdx_channel_socket_type, coredomain_socket;
#line 578
#line 578
#line 579
typeattribute pdx_display_dir pdx_display_screenshot_endpoint_dir_type;
#line 579
type pdx_display_screenshot_endpoint_socket, pdx_display_screenshot_endpoint_socket_type, pdx_endpoint_socket_type, file_type, coredomain_socket, mlstrustedobject, mlstrustedsubject;
#line 579
type pdx_display_screenshot_channel_socket, pdx_display_screenshot_channel_socket_type, pdx_channel_socket_type, coredomain_socket;
#line 579
#line 579
#line 580
typeattribute pdx_display_dir pdx_display_vsync_endpoint_dir_type;
#line 580
type pdx_display_vsync_endpoint_socket, pdx_display_vsync_endpoint_socket_type, pdx_endpoint_socket_type, file_type, coredomain_socket, mlstrustedobject, mlstrustedsubject;
#line 580
type pdx_display_vsync_channel_socket, pdx_display_vsync_channel_socket_type, pdx_channel_socket_type, coredomain_socket;
#line 580
#line 580
#line 581
typeattribute pdx_performance_dir pdx_performance_client_endpoint_dir_type;
#line 581
type pdx_performance_client_endpoint_socket, pdx_performance_client_endpoint_socket_type, pdx_endpoint_socket_type, file_type, coredomain_socket, mlstrustedobject, mlstrustedsubject;
#line 581
type pdx_performance_client_channel_socket, pdx_performance_client_channel_socket_type, pdx_channel_socket_type, coredomain_socket;
#line 581
#line 581
#line 582
typeattribute pdx_bufferhub_dir pdx_bufferhub_client_endpoint_dir_type;
#line 582
type pdx_bufferhub_client_endpoint_socket, pdx_bufferhub_client_endpoint_socket_type, pdx_endpoint_socket_type, file_type, coredomain_socket, mlstrustedobject, mlstrustedsubject;
#line 582
type pdx_bufferhub_client_channel_socket, pdx_bufferhub_client_channel_socket_type, pdx_channel_socket_type, coredomain_socket;
#line 582
#line 582
# file_contexts files
type file_contexts_file, system_file_type, file_type;
# mac_permissions file
type mac_perms_file, system_file_type, file_type;
# property_contexts file
type property_contexts_file, system_file_type, file_type;
# seapp_contexts file
type seapp_contexts_file, system_file_type, file_type;
# sepolicy files binary and others
type sepolicy_file, system_file_type, file_type;
# service_contexts file
type service_contexts_file, system_file_type, file_type;
# keystore2_key_contexts_file
type keystore2_key_contexts_file, system_file_type, file_type;
# vendor service_contexts file
type vendor_service_contexts_file, vendor_file_type, file_type;
# hwservice_contexts file
type hwservice_contexts_file, system_file_type, file_type;
# vndservice_contexts file
type vndservice_contexts_file, file_type;
# /sys/kernel/tracing/instances/bootreceiver for monitoring kernel memory corruptions.
type debugfs_bootreceiver_tracing, fs_type, debugfs_type, tracefs_type;
# kernel modules
type vendor_kernel_modules, vendor_file_type, file_type;
# system_dlkm
type system_dlkm_file, system_dlkm_file_type, file_type;
# Allow files to be created in their appropriate filesystems.
allow fs_type self:filesystem associate;
allow cgroup tmpfs:filesystem associate;
allow cgroup_v2 tmpfs:filesystem associate;
allow cgroup_rc_file tmpfs:filesystem associate;
allow sysfs_type sysfs:filesystem associate;
allow debugfs_type { debugfs debugfs_tracing debugfs_tracing_debug }:filesystem associate;
allow file_type labeledfs:filesystem associate;
allow file_type tmpfs:filesystem associate;
allow file_type rootfs:filesystem associate;
allow dev_type tmpfs:filesystem associate;
allow app_fuse_file app_fusefs:filesystem associate;
allow postinstall_file self:filesystem associate;
allow proc_net proc:filesystem associate;
# asanwrapper (run a sanitized app_process, to be used with wrap properties)
# Deprecated in SDK version 28
type audiohal_data_file, file_type, data_file_type, core_data_file_type;
# It's a bug to assign the file_type attribute and fs_type attribute
# to any type. Do not allow it.
#
# For example, the following is a bug:
# type apk_data_file, file_type, data_file_type, fs_type;
# Should be:
# type apk_data_file, file_type, data_file_type;
neverallow fs_type file_type:filesystem associate;
#line 1 "system/sepolicy/public/fingerprintd.te"
type fingerprintd, domain;
type fingerprintd_exec, system_file_type, exec_type, file_type;
#line 4
# Call the servicemanager and transfer references to it.
#line 4
allow fingerprintd servicemanager:binder { call transfer };
#line 4
# Allow servicemanager to send out callbacks
#line 4
allow servicemanager fingerprintd:binder { call transfer };
#line 4
# servicemanager performs getpidcon on clients.
#line 4
allow servicemanager fingerprintd:dir search;
#line 4
allow servicemanager fingerprintd:file { read open };
#line 4
allow servicemanager fingerprintd:process getattr;
#line 4
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 4
# all domains in domain.te.
#line 4
# Scan through /system/lib64/hw looking for installed HALs
allow fingerprintd system_file:dir { open getattr read search ioctl lock watch watch_reads };
# need to find KeyStore and add self
#line 10
allow fingerprintd fingerprintd_service:service_manager { add find };
#line 10
neverallow { domain -fingerprintd } fingerprintd_service:service_manager add;
#line 10
#line 10
# On debug builds with root, allow binder services to use binder over TCP.
#line 10
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 10
#line 10
# allow HAL module to read dir contents
allow fingerprintd fingerprintd_data_file:file { { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } } };
# allow HAL module to read/write/unlink contents of this dir
allow fingerprintd fingerprintd_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
# Need to add auth tokens to KeyStore
#line 19
allow keystore fingerprintd:dir search;
#line 19
allow keystore fingerprintd:file { read open };
#line 19
allow keystore fingerprintd:process getattr;
#line 19
allow fingerprintd apc_service:service_manager find;
#line 19
allow fingerprintd keystore_service:service_manager find;
#line 19
allow fingerprintd legacykeystore_service:service_manager find;
#line 19
#line 19
# Call the server domain and optionally transfer references to it.
#line 19
allow fingerprintd keystore:binder { call transfer };
#line 19
# Allow the serverdomain to transfer references to the client on the reply.
#line 19
allow keystore fingerprintd:binder transfer;
#line 19
# Receive and use open files from the server.
#line 19
allow fingerprintd keystore:fd use;
#line 19
#line 19
#line 19
# Call the server domain and optionally transfer references to it.
#line 19
allow keystore fingerprintd:binder { call transfer };
#line 19
# Allow the serverdomain to transfer references to the client on the reply.
#line 19
allow fingerprintd keystore:binder transfer;
#line 19
# Receive and use open files from the server.
#line 19
allow keystore fingerprintd:fd use;
#line 19
#line 19
allow fingerprintd keystore:keystore2 { add_auth };
# For permissions checking
#line 23
# Call the server domain and optionally transfer references to it.
#line 23
allow fingerprintd system_server:binder { call transfer };
#line 23
# Allow the serverdomain to transfer references to the client on the reply.
#line 23
allow system_server fingerprintd:binder transfer;
#line 23
# Receive and use open files from the server.
#line 23
allow fingerprintd system_server:fd use;
#line 23
;
allow fingerprintd permission_service:service_manager find;
allow fingerprintd ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
#line 1 "system/sepolicy/public/flags_health_check.te"
# The flags_health_check command run by init.
type flags_health_check, domain, coredomain;
type flags_health_check_exec, system_file_type, exec_type, file_type;
allow flags_health_check server_configurable_flags_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow flags_health_check server_configurable_flags_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# server_configurable_flags_data_file is used for storing whether server configurable flags which
# have been reset during current booting. Mistakenly modified by unrelated components can
# cause bad server configurable flags synced back to device.
neverallow { domain -init -flags_health_check } server_configurable_flags_data_file:file { append create link unlink relabelfrom rename setattr write };
#line 1 "system/sepolicy/public/fsck.te"
# Any fsck program run by init
type fsck, domain;
type fsck_exec, system_file_type, exec_type, file_type;
# /dev/__null__ created by init prior to policy load,
# open fd inherited by fsck.
allow fsck tmpfs:chr_file { read write ioctl };
# Inherit and use pty created by android_fork_execvp_ext().
allow fsck devpts:chr_file { read write ioctl getattr };
# Allow stdin/out back to vold
allow fsck vold:fd use;
allow fsck vold:fifo_file { read write getattr };
# Run fsck on certain block devices
allow fsck userdata_block_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow fsck cache_block_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow fsck dm_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow fsck zoned_block_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 23
# e2fsck performs a comprehensive search of /proc/mounts to check whether the
# checked filesystem is currently mounted.
allow fsck metadata_file:dir getattr;
allow fsck block_device:dir search;
allow fsck mirror_data_file:dir search;
# For the block devices where we have ioctl access,
# allow at a minimum the following common fsck ioctls.
allowxperm fsck dev_type:blk_file ioctl {
0x0000127c
0x0000125e
0xc0101282
};
# To determine if it is safe to run fsck on a filesystem, e2fsck
# must first determine if the filesystem is mounted. To do that,
# e2fsck scans through /proc/mounts and collects all the mounted
# block devices. With that information, it runs stat() on each block
# device, comparing the major and minor numbers to the filesystem
# passed in on the command line. If there is a match, then the filesystem
# is currently mounted and running fsck is dangerous.
# Allow stat access to all block devices so that fsck can compare
# major/minor values.
allow fsck dev_type:blk_file getattr;
allow fsck {
proc_mounts
proc_swaps
sysfs_dm
}:file { getattr open read ioctl lock map watch watch_reads };
allow fsck rootfs:dir { open getattr read search ioctl lock watch watch_reads };
allow fsck sysfs_dm:dir { open getattr read search ioctl lock watch watch_reads };
###
### neverallow rules
###
# fsck should never be run on these block devices
neverallow fsck {
boot_block_device
frp_block_device
recovery_block_device
root_block_device
swap_block_device
system_block_device
vold_device
}:blk_file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Only allow entry from init or vold via fsck binaries
neverallow { domain -init -vold } fsck:process transition;
neverallow * fsck:process dyntransition;
neverallow fsck { file_type fs_type -fsck_exec }:file entrypoint;
#line 1 "system/sepolicy/public/fsck_untrusted.te"
# Any fsck program run on untrusted block devices
type fsck_untrusted, domain;
# Inherit and use pty created by android_fork_execvp_ext().
allow fsck_untrusted devpts:chr_file { read write ioctl getattr };
# Allow stdin/out back to vold
allow fsck_untrusted vold:fd use;
allow fsck_untrusted vold:fifo_file { read write getattr };
# Run fsck on vold block devices
allow fsck_untrusted block_device:dir search;
allow fsck_untrusted vold_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow fsck_untrusted proc_mounts:file { getattr open read ioctl lock map watch watch_reads };
# To determine if it is safe to run fsck on a filesystem, e2fsck
# must first determine if the filesystem is mounted. To do that,
# e2fsck scans through /proc/mounts and collects all the mounted
# block devices. With that information, it runs stat() on each block
# device, comparing the major and minor numbers to the filesystem
# passed in on the command line. If there is a match, then the filesystem
# is currently mounted and running fsck is dangerous.
# Allow stat access to all block devices so that fsck can compare
# major/minor values.
allow fsck_untrusted dev_type:blk_file getattr;
###
### neverallow rules
###
# Untrusted fsck should never be run on block devices holding sensitive data
neverallow fsck_untrusted {
boot_block_device
frp_block_device
metadata_block_device
recovery_block_device
root_block_device
swap_block_device
system_block_device
userdata_block_device
cache_block_device
dm_device
}:blk_file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Only allow entry from vold via fsck binaries
neverallow { domain -vold } fsck_untrusted:process transition;
neverallow * fsck_untrusted:process dyntransition;
neverallow fsck_untrusted { file_type fs_type -fsck_exec }:file entrypoint;
# fsck_untrusted should never have sys_admin permissions. If it requires sys_admin
# permissions, that is a code mistake that needs to be fixed, not a permission that
# should be granted. Same with setgid and setuid.
neverallow fsck_untrusted self:{ capability cap_userns } { setgid setuid sys_admin };
###
### dontaudit rules
###
# Ignores attempts to access sysfs. fsck binaries seem to like trying to go
# here, but nothing bad happens if they can't, and they shouldn't be allowed.
dontaudit fsck_untrusted sysfs:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
dontaudit fsck_untrusted sysfs_dm:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
dontaudit fsck_untrusted sysfs_dm:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
# Ignore attempts to access tmpfs. fsck don't need to do this.
dontaudit fsck_untrusted tmpfs:lnk_file read;
#line 1 "system/sepolicy/public/gatekeeperd.te"
type gatekeeperd, domain;
type gatekeeperd_exec, system_file_type, exec_type, file_type;
# gatekeeperd
#line 5
typeattribute gatekeeperd binderservicedomain;
#line 5
#line 6
# Call the servicemanager and transfer references to it.
#line 6
allow gatekeeperd servicemanager:binder { call transfer };
#line 6
# Allow servicemanager to send out callbacks
#line 6
allow servicemanager gatekeeperd:binder { call transfer };
#line 6
# servicemanager performs getpidcon on clients.
#line 6
allow servicemanager gatekeeperd:dir search;
#line 6
allow servicemanager gatekeeperd:file { read open };
#line 6
allow servicemanager gatekeeperd:process getattr;
#line 6
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 6
# all domains in domain.te.
#line 6
### Rules needed when Gatekeeper HAL runs inside gatekeeperd process.
### These rules should eventually be granted only when needed.
allow gatekeeperd ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
# Load HAL implementation
allow gatekeeperd system_file:dir { open getattr read search ioctl lock watch watch_reads };
###
### Rules needed when Gatekeeper HAL runs outside of gatekeeperd process.
### These rules should eventually be granted only when needed.
#line 17
typeattribute gatekeeperd halclientdomain;
#line 17
typeattribute gatekeeperd hal_gatekeeper_client;
#line 17
#line 17
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 17
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 17
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 17
#line 17
typeattribute gatekeeperd hal_gatekeeper;
#line 17
# Find passthrough HAL implementations
#line 17
allow hal_gatekeeper system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 17
allow hal_gatekeeper vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 17
allow hal_gatekeeper vendor_file:file { read open getattr execute map };
#line 17
#line 17
###
# need to find KeyStore and add self
#line 21
allow gatekeeperd gatekeeper_service:service_manager { add find };
#line 21
neverallow { domain -gatekeeperd } gatekeeper_service:service_manager add;
#line 21
#line 21
# On debug builds with root, allow binder services to use binder over TCP.
#line 21
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 21
#line 21
# Need to add auth tokens to KeyStore
#line 24
allow keystore gatekeeperd:dir search;
#line 24
allow keystore gatekeeperd:file { read open };
#line 24
allow keystore gatekeeperd:process getattr;
#line 24
allow gatekeeperd apc_service:service_manager find;
#line 24
allow gatekeeperd keystore_service:service_manager find;
#line 24
allow gatekeeperd legacykeystore_service:service_manager find;
#line 24
#line 24
# Call the server domain and optionally transfer references to it.
#line 24
allow gatekeeperd keystore:binder { call transfer };
#line 24
# Allow the serverdomain to transfer references to the client on the reply.
#line 24
allow keystore gatekeeperd:binder transfer;
#line 24
# Receive and use open files from the server.
#line 24
allow gatekeeperd keystore:fd use;
#line 24
#line 24
#line 24
# Call the server domain and optionally transfer references to it.
#line 24
allow keystore gatekeeperd:binder { call transfer };
#line 24
# Allow the serverdomain to transfer references to the client on the reply.
#line 24
allow gatekeeperd keystore:binder transfer;
#line 24
# Receive and use open files from the server.
#line 24
allow keystore gatekeeperd:fd use;
#line 24
#line 24
allow gatekeeperd keystore:keystore2 { add_auth };
allow gatekeeperd authorization_service:service_manager find;
# For permissions checking
allow gatekeeperd system_server:binder call;
allow gatekeeperd permission_service:service_manager find;
# for SID file access
allow gatekeeperd gatekeeper_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow gatekeeperd gatekeeper_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# For hardware properties retrieval
allow gatekeeperd hardware_properties_service:service_manager find;
#line 40
allow gatekeeperd cgroup:dir { open getattr read search ioctl lock watch watch_reads };
#line 40
allow gatekeeperd cgroup:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 40
#line 41
allow gatekeeperd cgroup_v2:dir { open getattr read search ioctl lock watch watch_reads };
#line 41
allow gatekeeperd cgroup_v2:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 41
#line 1 "system/sepolicy/public/gmscore_app.te"
###
### A domain for further sandboxing the PrebuiltGMSCore app.
###
type gmscore_app, domain;
#line 1 "system/sepolicy/public/gpuservice.te"
# gpuservice - server for gpu stats and other gpu related services
type gpuservice, domain;
#line 1 "system/sepolicy/public/hal_allocator.te"
# HwBinder IPC from client to server
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_allocator_client hal_allocator_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_allocator_server hal_allocator_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_allocator_client hal_allocator_server:fd use;
#line 2
#line 4
allow hal_allocator_client hidl_allocator_hwservice:hwservice_manager find;
#line 4
#line 4
allow hal_allocator_server hidl_allocator_hwservice:hwservice_manager { add find };
#line 4
allow hal_allocator_server hidl_base_hwservice:hwservice_manager add;
#line 4
neverallow { domain -hal_allocator_server } hidl_allocator_hwservice:hwservice_manager add;
#line 4
#line 4
#line 4
#line 4
allow hal_allocator_client hidl_memory_hwservice:hwservice_manager find;
allow hal_allocator_client same_process_hal_file:file { execute read open getattr map };
#line 1 "system/sepolicy/public/hal_atrace.te"
# HwBinder IPC from client to server
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_atrace_client hal_atrace_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_atrace_server hal_atrace_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_atrace_client hal_atrace_server:fd use;
#line 2
#line 4
allow hal_atrace_client hal_atrace_hwservice:hwservice_manager find;
#line 4
#line 4
allow hal_atrace_server hal_atrace_hwservice:hwservice_manager { add find };
#line 4
allow hal_atrace_server hidl_base_hwservice:hwservice_manager add;
#line 4
neverallow { domain -hal_atrace_server } hal_atrace_hwservice:hwservice_manager add;
#line 4
#line 4
#line 4
#line 4
#line 1 "system/sepolicy/public/hal_audio.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_audio_client hal_audio_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_audio_server hal_audio_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_audio_client hal_audio_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_audio_server hal_audio_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_audio_client hal_audio_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_audio_server hal_audio_client:fd use;
#line 3
#line 5
allow hal_audio_client hal_audio_hwservice:hwservice_manager find;
#line 5
#line 5
allow hal_audio_server hal_audio_hwservice:hwservice_manager { add find };
#line 5
allow hal_audio_server hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hal_audio_server } hal_audio_hwservice:hwservice_manager add;
#line 5
#line 5
#line 5
#line 5
#line 6
allow hal_audio_client hal_audio_service:service_manager find;
#line 6
#line 6
allow hal_audio_server hal_audio_service:service_manager { add find };
#line 6
neverallow { domain -hal_audio_server } hal_audio_service:service_manager add;
#line 6
#line 6
# On debug builds with root, allow binder services to use binder over TCP.
#line 6
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 6
#line 6
#line 6
#line 6
#line 6
allow hal_audio ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
#line 10
# Call the server domain and optionally transfer references to it.
#line 10
allow hal_audio_server servicemanager:binder { call transfer };
#line 10
# Allow the serverdomain to transfer references to the client on the reply.
#line 10
allow servicemanager hal_audio_server:binder transfer;
#line 10
# Receive and use open files from the server.
#line 10
allow hal_audio_server servicemanager:fd use;
#line 10
#line 12
allow hal_audio proc:dir { open getattr read search ioctl lock watch watch_reads };
#line 12
allow hal_audio proc:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 12
#line 13
allow hal_audio proc_asound:dir { open getattr read search ioctl lock watch watch_reads };
#line 13
allow hal_audio proc_asound:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 13
allow hal_audio_server audio_device:dir { open getattr read search ioctl lock watch watch_reads };
allow hal_audio_server audio_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Needed to provide debug dump output via dumpsys' pipes.
allow hal_audio shell:fd use;
allow hal_audio shell:fifo_file write;
allow hal_audio dumpstate:fd use;
allow hal_audio dumpstate:fifo_file write;
# Needed to allow sound trigger hal to access shared memory from apps.
allow hal_audio_server appdomain:fd use;
# Allow sound trigger hal to access shared memory from system server.
allow hal_audio_server system_server_tmpfs:file { getattr map read };
# allow self to set scheduler (and allows Binder RT PI)
allow hal_audio_server self:{ capability cap_userns } sys_nice;
# allow hal audio to use vnbinder
#line 32
# Talk to the vndbinder device node
#line 32
allow hal_audio vndbinder_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 32
# Call the vndservicemanager and transfer references to it.
#line 32
allow hal_audio vndservicemanager:binder { call transfer };
#line 32
# vndservicemanager performs getpidcon on clients.
#line 32
allow vndservicemanager hal_audio:dir search;
#line 32
allow vndservicemanager hal_audio:file { read open map };
#line 32
allow vndservicemanager hal_audio:process getattr;
#line 32
###
### neverallow rules
###
# Should never execute any executable without a domain transition
neverallow hal_audio_server { file_type fs_type }:file execute_no_trans;
# Only audio HAL may directly access the audio hardware
neverallow { halserverdomain -hal_audio_server -hal_omx_server } audio_device:chr_file *;
#line 44
allow hal_audio audio_config_prop:file { getattr open read map };
#line 44
#line 45
allow hal_audio bluetooth_a2dp_offload_prop:file { getattr open read map };
#line 45
#line 46
allow hal_audio bluetooth_audio_hal_prop:file { getattr open read map };
#line 46
#line 1 "system/sepolicy/public/hal_audiocontrol.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_audiocontrol_client hal_audiocontrol_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_audiocontrol_server hal_audiocontrol_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_audiocontrol_client hal_audiocontrol_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_audiocontrol_server hal_audiocontrol_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_audiocontrol_client hal_audiocontrol_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_audiocontrol_server hal_audiocontrol_client:fd use;
#line 3
#line 5
allow hal_audiocontrol_client hal_audiocontrol_hwservice:hwservice_manager find;
#line 5
#line 5
allow hal_audiocontrol_server hal_audiocontrol_hwservice:hwservice_manager { add find };
#line 5
allow hal_audiocontrol_server hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hal_audiocontrol_server } hal_audiocontrol_hwservice:hwservice_manager add;
#line 5
#line 5
#line 5
#line 5
#line 6
allow hal_audiocontrol_client hal_audiocontrol_service:service_manager find;
#line 6
#line 6
allow hal_audiocontrol_server hal_audiocontrol_service:service_manager { add find };
#line 6
neverallow { domain -hal_audiocontrol_server } hal_audiocontrol_service:service_manager add;
#line 6
#line 6
# On debug builds with root, allow binder services to use binder over TCP.
#line 6
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 6
#line 6
#line 6
#line 6
#line 6
#line 8
# Call the server domain and optionally transfer references to it.
#line 8
allow hal_audiocontrol_server servicemanager:binder { call transfer };
#line 8
# Allow the serverdomain to transfer references to the client on the reply.
#line 8
allow servicemanager hal_audiocontrol_server:binder transfer;
#line 8
# Receive and use open files from the server.
#line 8
allow hal_audiocontrol_server servicemanager:fd use;
#line 8
#line 1 "system/sepolicy/public/hal_authgraph.te"
#line 1
# Call the server domain and optionally transfer references to it.
#line 1
allow hal_authgraph_client hal_authgraph_server:binder { call transfer };
#line 1
# Allow the serverdomain to transfer references to the client on the reply.
#line 1
allow hal_authgraph_server hal_authgraph_client:binder transfer;
#line 1
# Receive and use open files from the server.
#line 1
allow hal_authgraph_client hal_authgraph_server:fd use;
#line 1
#line 3
allow hal_authgraph_client hal_authgraph_service:service_manager find;
#line 3
#line 3
allow hal_authgraph_server hal_authgraph_service:service_manager { add find };
#line 3
neverallow { domain -hal_authgraph_server } hal_authgraph_service:service_manager add;
#line 3
#line 3
# On debug builds with root, allow binder services to use binder over TCP.
#line 3
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 3
#line 3
#line 3
#line 3
#line 3
#line 4
# Call the server domain and optionally transfer references to it.
#line 4
allow hal_authgraph_server servicemanager:binder { call transfer };
#line 4
# Allow the serverdomain to transfer references to the client on the reply.
#line 4
allow servicemanager hal_authgraph_server:binder transfer;
#line 4
# Receive and use open files from the server.
#line 4
allow hal_authgraph_server servicemanager:fd use;
#line 4
allow hal_authgraph_server tee_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow hal_authgraph_server ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
#line 1 "system/sepolicy/public/hal_authsecret.te"
# HwBinder IPC from client to server
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_authsecret_client hal_authsecret_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_authsecret_server hal_authsecret_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_authsecret_client hal_authsecret_server:fd use;
#line 2
#line 4
allow hal_authsecret_client hal_authsecret_hwservice:hwservice_manager find;
#line 4
#line 4
allow hal_authsecret_server hal_authsecret_hwservice:hwservice_manager { add find };
#line 4
allow hal_authsecret_server hidl_base_hwservice:hwservice_manager add;
#line 4
neverallow { domain -hal_authsecret_server } hal_authsecret_hwservice:hwservice_manager add;
#line 4
#line 4
#line 4
#line 4
#line 5
allow hal_authsecret_client hal_authsecret_service:service_manager find;
#line 5
#line 5
allow hal_authsecret_server hal_authsecret_service:service_manager { add find };
#line 5
neverallow { domain -hal_authsecret_server } hal_authsecret_service:service_manager add;
#line 5
#line 5
# On debug builds with root, allow binder services to use binder over TCP.
#line 5
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 5
#line 5
#line 5
#line 5
#line 5
#line 7
# Call the server domain and optionally transfer references to it.
#line 7
allow hal_authsecret_server servicemanager:binder { call transfer };
#line 7
# Allow the serverdomain to transfer references to the client on the reply.
#line 7
allow servicemanager hal_authsecret_server:binder transfer;
#line 7
# Receive and use open files from the server.
#line 7
allow hal_authsecret_server servicemanager:fd use;
#line 7
#line 1 "system/sepolicy/public/hal_bluetooth.te"
# HwBinder IPC from clients into server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_bluetooth_client hal_bluetooth_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_bluetooth_server hal_bluetooth_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_bluetooth_client hal_bluetooth_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_bluetooth_server hal_bluetooth_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_bluetooth_client hal_bluetooth_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_bluetooth_server hal_bluetooth_client:fd use;
#line 3
#line 4
# Call the server domain and optionally transfer references to it.
#line 4
allow hal_bluetooth_server servicemanager:binder { call transfer };
#line 4
# Allow the serverdomain to transfer references to the client on the reply.
#line 4
allow servicemanager hal_bluetooth_server:binder transfer;
#line 4
# Receive and use open files from the server.
#line 4
allow hal_bluetooth_server servicemanager:fd use;
#line 4
#line 6
allow hal_bluetooth_client hal_bluetooth_hwservice:hwservice_manager find;
#line 6
#line 6
allow hal_bluetooth_server hal_bluetooth_hwservice:hwservice_manager { add find };
#line 6
allow hal_bluetooth_server hidl_base_hwservice:hwservice_manager add;
#line 6
neverallow { domain -hal_bluetooth_server } hal_bluetooth_hwservice:hwservice_manager add;
#line 6
#line 6
#line 6
#line 6
#line 7
allow hal_bluetooth_client hal_bluetooth_service:service_manager find;
#line 7
#line 7
allow hal_bluetooth_server hal_bluetooth_service:service_manager { add find };
#line 7
neverallow { domain -hal_bluetooth_server } hal_bluetooth_service:service_manager add;
#line 7
#line 7
# On debug builds with root, allow binder services to use binder over TCP.
#line 7
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 7
#line 7
#line 7
#line 7
#line 7
#line 9
# TODO(b/115946999): Remove /sys/power/* permissions once CONFIG_PM_WAKELOCKS is
#line 9
# deprecated.
#line 9
# Access /sys/power/wake_lock and /sys/power/wake_unlock
#line 9
allow hal_bluetooth sysfs_wake_lock:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 9
# Accessing these files requires CAP_BLOCK_SUSPEND
#line 9
allow hal_bluetooth self:{ capability2 cap2_userns } block_suspend;
#line 9
# system_suspend permissions
#line 9
#line 9
# Call the server domain and optionally transfer references to it.
#line 9
allow hal_bluetooth system_suspend_server:binder { call transfer };
#line 9
# Allow the serverdomain to transfer references to the client on the reply.
#line 9
allow system_suspend_server hal_bluetooth:binder transfer;
#line 9
# Receive and use open files from the server.
#line 9
allow hal_bluetooth system_suspend_server:fd use;
#line 9
#line 9
allow hal_bluetooth system_suspend_hwservice:hwservice_manager find;
#line 9
# halclientdomain permissions
#line 9
#line 9
# Call the hwservicemanager and transfer references to it.
#line 9
allow hal_bluetooth hwservicemanager:binder { call transfer };
#line 9
# Allow hwservicemanager to send out callbacks
#line 9
allow hwservicemanager hal_bluetooth:binder { call transfer };
#line 9
# hwservicemanager performs getpidcon on clients.
#line 9
allow hwservicemanager hal_bluetooth:dir search;
#line 9
allow hwservicemanager hal_bluetooth:file { read open map };
#line 9
allow hwservicemanager hal_bluetooth:process getattr;
#line 9
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 9
# all domains in domain.te.
#line 9
#line 9
#line 9
allow hal_bluetooth hwservicemanager_prop:file { getattr open read map };
#line 9
#line 9
allow hal_bluetooth hidl_manager_hwservice:hwservice_manager find;
#line 9
# AIDL suspend hal permissions
#line 9
allow hal_bluetooth hal_system_suspend_service:service_manager find;
#line 9
#line 9
# Call the servicemanager and transfer references to it.
#line 9
allow hal_bluetooth servicemanager:binder { call transfer };
#line 9
# Allow servicemanager to send out callbacks
#line 9
allow servicemanager hal_bluetooth:binder { call transfer };
#line 9
# servicemanager performs getpidcon on clients.
#line 9
allow servicemanager hal_bluetooth:dir search;
#line 9
allow servicemanager hal_bluetooth:file { read open };
#line 9
allow servicemanager hal_bluetooth:process getattr;
#line 9
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 9
# all domains in domain.te.
#line 9
#line 9
;
# The HAL toggles rfkill to power the chip off/on.
allow hal_bluetooth self:{ capability cap_userns } net_admin;
# bluetooth factory file accesses.
#line 15
allow hal_bluetooth bluetooth_efs_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 15
allow hal_bluetooth bluetooth_efs_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 15
allow hal_bluetooth { uhid_device hci_attach_dev }:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# sysfs access.
#line 20
allow hal_bluetooth sysfs_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 20
allow hal_bluetooth sysfs_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 20
allow hal_bluetooth sysfs_bluetooth_writable:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow hal_bluetooth self:{ capability2 cap2_userns } wake_alarm;
# Allow write access to bluetooth-specific properties
#line 25
#line 25
allow hal_bluetooth property_socket:sock_file write;
#line 25
allow hal_bluetooth init:unix_stream_socket connectto;
#line 25
#line 25
allow hal_bluetooth bluetooth_a2dp_offload_prop:property_service set;
#line 25
#line 25
allow hal_bluetooth bluetooth_a2dp_offload_prop:file { getattr open read map };
#line 25
#line 25
#line 26
#line 26
allow hal_bluetooth property_socket:sock_file write;
#line 26
allow hal_bluetooth init:unix_stream_socket connectto;
#line 26
#line 26
allow hal_bluetooth bluetooth_audio_hal_prop:property_service set;
#line 26
#line 26
allow hal_bluetooth bluetooth_audio_hal_prop:file { getattr open read map };
#line 26
#line 26
#line 27
#line 27
allow hal_bluetooth property_socket:sock_file write;
#line 27
allow hal_bluetooth init:unix_stream_socket connectto;
#line 27
#line 27
allow hal_bluetooth bluetooth_prop:property_service set;
#line 27
#line 27
allow hal_bluetooth bluetooth_prop:file { getattr open read map };
#line 27
#line 27
#line 28
#line 28
allow hal_bluetooth property_socket:sock_file write;
#line 28
allow hal_bluetooth init:unix_stream_socket connectto;
#line 28
#line 28
allow hal_bluetooth exported_bluetooth_prop:property_service set;
#line 28
#line 28
allow hal_bluetooth exported_bluetooth_prop:file { getattr open read map };
#line 28
#line 28
# /proc access (bluesleep etc.).
allow hal_bluetooth proc_bluetooth_writable:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# allow to run with real-time scheduling policy
allow hal_bluetooth self:{ capability cap_userns } sys_nice;
#line 1 "system/sepolicy/public/hal_bootctl.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_bootctl_client hal_bootctl_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_bootctl_server hal_bootctl_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_bootctl_client hal_bootctl_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_bootctl_server hal_bootctl_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_bootctl_client hal_bootctl_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_bootctl_server hal_bootctl_client:fd use;
#line 3
#line 4
# Call the servicemanager and transfer references to it.
#line 4
allow hal_bootctl_server servicemanager:binder { call transfer };
#line 4
# Allow servicemanager to send out callbacks
#line 4
allow servicemanager hal_bootctl_server:binder { call transfer };
#line 4
# servicemanager performs getpidcon on clients.
#line 4
allow servicemanager hal_bootctl_server:dir search;
#line 4
allow servicemanager hal_bootctl_server:file { read open };
#line 4
allow servicemanager hal_bootctl_server:process getattr;
#line 4
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 4
# all domains in domain.te.
#line 4
#line 6
allow hal_bootctl_client hal_bootctl_hwservice:hwservice_manager find;
#line 6
#line 6
allow hal_bootctl_server hal_bootctl_hwservice:hwservice_manager { add find };
#line 6
allow hal_bootctl_server hidl_base_hwservice:hwservice_manager add;
#line 6
neverallow { domain -hal_bootctl_server } hal_bootctl_hwservice:hwservice_manager add;
#line 6
#line 6
#line 6
#line 6
allow hal_bootctl_server proc_bootconfig:file { getattr open read ioctl lock map watch watch_reads };
# Needed to wait for AIDL hal services
#line 10
allow hal_bootctl_client hal_bootctl_service:service_manager find;
#line 10
#line 10
allow hal_bootctl_server hal_bootctl_service:service_manager { add find };
#line 10
neverallow { domain -hal_bootctl_server } hal_bootctl_service:service_manager add;
#line 10
#line 10
# On debug builds with root, allow binder services to use binder over TCP.
#line 10
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 10
#line 10
#line 10
#line 10
#line 10
;
#line 1 "system/sepolicy/public/hal_broadcastradio.te"
#line 1
# Call the server domain and optionally transfer references to it.
#line 1
allow hal_broadcastradio_client hal_broadcastradio_server:binder { call transfer };
#line 1
# Allow the serverdomain to transfer references to the client on the reply.
#line 1
allow hal_broadcastradio_server hal_broadcastradio_client:binder transfer;
#line 1
# Receive and use open files from the server.
#line 1
allow hal_broadcastradio_client hal_broadcastradio_server:fd use;
#line 1
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_broadcastradio_server hal_broadcastradio_client:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_broadcastradio_client hal_broadcastradio_server:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_broadcastradio_server hal_broadcastradio_client:fd use;
#line 2
#line 4
allow hal_broadcastradio_client hal_broadcastradio_hwservice:hwservice_manager find;
#line 4
#line 4
allow hal_broadcastradio_server hal_broadcastradio_hwservice:hwservice_manager { add find };
#line 4
allow hal_broadcastradio_server hidl_base_hwservice:hwservice_manager add;
#line 4
neverallow { domain -hal_broadcastradio_server } hal_broadcastradio_hwservice:hwservice_manager add;
#line 4
#line 4
#line 4
#line 4
#line 5
allow hal_broadcastradio_client hal_broadcastradio_service:service_manager find;
#line 5
#line 5
allow hal_broadcastradio_server hal_broadcastradio_service:service_manager { add find };
#line 5
neverallow { domain -hal_broadcastradio_server } hal_broadcastradio_service:service_manager add;
#line 5
#line 5
# On debug builds with root, allow binder services to use binder over TCP.
#line 5
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 5
#line 5
#line 5
#line 5
#line 5
#line 7
# Call the server domain and optionally transfer references to it.
#line 7
allow hal_broadcastradio_server servicemanager:binder { call transfer };
#line 7
# Allow the serverdomain to transfer references to the client on the reply.
#line 7
allow servicemanager hal_broadcastradio_server:binder transfer;
#line 7
# Receive and use open files from the server.
#line 7
allow hal_broadcastradio_server servicemanager:fd use;
#line 7
#line 1 "system/sepolicy/public/hal_camera.te"
# HwBinder IPC from clients to server and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_camera_client hal_camera_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_camera_server hal_camera_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_camera_client hal_camera_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_camera_server hal_camera_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_camera_client hal_camera_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_camera_server hal_camera_client:fd use;
#line 3
#binder IPC from client to service manager and callbacks
#line 6
# Call the servicemanager and transfer references to it.
#line 6
allow hal_camera_server servicemanager:binder { call transfer };
#line 6
# Allow servicemanager to send out callbacks
#line 6
allow servicemanager hal_camera_server:binder { call transfer };
#line 6
# servicemanager performs getpidcon on clients.
#line 6
allow servicemanager hal_camera_server:dir search;
#line 6
allow servicemanager hal_camera_server:file { read open };
#line 6
allow servicemanager hal_camera_server:process getattr;
#line 6
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 6
# all domains in domain.te.
#line 6
#line 8
allow hal_camera_client hal_camera_hwservice:hwservice_manager find;
#line 8
#line 8
allow hal_camera_server hal_camera_hwservice:hwservice_manager { add find };
#line 8
allow hal_camera_server hidl_base_hwservice:hwservice_manager add;
#line 8
neverallow { domain -hal_camera_server } hal_camera_hwservice:hwservice_manager add;
#line 8
#line 8
#line 8
#line 8
#line 9
allow hal_camera_client hal_camera_service:service_manager find;
#line 9
#line 9
allow hal_camera_server hal_camera_service:service_manager { add find };
#line 9
neverallow { domain -hal_camera_server } hal_camera_service:service_manager add;
#line 9
#line 9
# On debug builds with root, allow binder services to use binder over TCP.
#line 9
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 9
#line 9
#line 9
#line 9
#line 9
allow hal_camera device:dir { open getattr read search ioctl lock watch watch_reads };
allow hal_camera video_device:dir { open getattr read search ioctl lock watch watch_reads };
allow hal_camera video_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow hal_camera camera_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow hal_camera ion_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow hal_camera dmabuf_system_heap_device:chr_file { getattr open read ioctl lock map watch watch_reads };
# Both the client and the server need to use the graphics allocator
allow { hal_camera_client hal_camera_server } hal_graphics_allocator:fd use;
# Allow hal_camera to use fd from app,gralloc,and ashmem HAL
allow hal_camera { appdomain -isolated_app }:fd use;
allow hal_camera surfaceflinger:fd use;
allow hal_camera hal_allocator_server:fd use;
# Needed to provide debug dump output via dumpsys' pipes.
allow hal_camera shell:fd use;
allow hal_camera shell:fifo_file write;
###
### neverallow rules
###
# hal_camera should never execute any executable without a
# domain transition
neverallow hal_camera_server { file_type fs_type }:file execute_no_trans;
# hal_camera should never need network access. Disallow network sockets.
neverallow hal_camera_server { domain }:{ tcp_socket udp_socket rawip_socket } *;
# Only camera HAL may directly access the camera hardware
neverallow { halserverdomain -hal_camera_server } camera_device:chr_file *;
#line 1 "system/sepolicy/public/hal_can.te"
# CAN controller
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_can_controller_client hal_can_controller_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_can_controller_server hal_can_controller_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_can_controller_client hal_can_controller_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_can_controller_server hal_can_controller_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_can_controller_client hal_can_controller_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_can_controller_server hal_can_controller_client:fd use;
#line 3
#line 4
allow hal_can_controller_client hal_can_controller_hwservice:hwservice_manager find;
#line 4
#line 4
allow hal_can_controller_server hal_can_controller_hwservice:hwservice_manager { add find };
#line 4
allow hal_can_controller_server hidl_base_hwservice:hwservice_manager add;
#line 4
neverallow { domain -hal_can_controller_server } hal_can_controller_hwservice:hwservice_manager add;
#line 4
#line 4
#line 4
#line 4
# CAN bus
#line 7
# Call the server domain and optionally transfer references to it.
#line 7
allow hal_can_bus_client hal_can_bus_server:binder { call transfer };
#line 7
# Allow the serverdomain to transfer references to the client on the reply.
#line 7
allow hal_can_bus_server hal_can_bus_client:binder transfer;
#line 7
# Receive and use open files from the server.
#line 7
allow hal_can_bus_client hal_can_bus_server:fd use;
#line 7
#line 8
# Call the server domain and optionally transfer references to it.
#line 8
allow hal_can_bus_server hal_can_bus_client:binder { call transfer };
#line 8
# Allow the serverdomain to transfer references to the client on the reply.
#line 8
allow hal_can_bus_client hal_can_bus_server:binder transfer;
#line 8
# Receive and use open files from the server.
#line 8
allow hal_can_bus_server hal_can_bus_client:fd use;
#line 8
#line 9
allow hal_can_bus_client hal_can_bus_hwservice:hwservice_manager find;
#line 9
#line 9
allow hal_can_bus_server hal_can_bus_hwservice:hwservice_manager { add find };
#line 9
allow hal_can_bus_server hidl_base_hwservice:hwservice_manager add;
#line 9
neverallow { domain -hal_can_bus_server } hal_can_bus_hwservice:hwservice_manager add;
#line 9
#line 9
#line 9
#line 9
# AIDL HAL for CAN buses (ICanController)
#line 12
allow hal_can_controller_client hal_can_controller_service:service_manager find;
#line 12
#line 12
allow hal_can_controller_server hal_can_controller_service:service_manager { add find };
#line 12
neverallow { domain -hal_can_controller_server } hal_can_controller_service:service_manager add;
#line 12
#line 12
# On debug builds with root, allow binder services to use binder over TCP.
#line 12
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 12
#line 12
#line 12
#line 12
#line 12
#line 13
# Call the servicemanager and transfer references to it.
#line 13
allow hal_can_controller servicemanager:binder { call transfer };
#line 13
# Allow servicemanager to send out callbacks
#line 13
allow servicemanager hal_can_controller:binder { call transfer };
#line 13
# servicemanager performs getpidcon on clients.
#line 13
allow servicemanager hal_can_controller:dir search;
#line 13
allow servicemanager hal_can_controller:file { read open };
#line 13
allow servicemanager hal_can_controller:process getattr;
#line 13
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 13
# all domains in domain.te.
#line 13
#line 1 "system/sepolicy/public/hal_cas.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_cas_client hal_cas_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_cas_server hal_cas_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_cas_client hal_cas_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_cas_server hal_cas_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_cas_client hal_cas_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_cas_server hal_cas_client:fd use;
#line 3
#line 5
allow hal_cas_client hal_cas_hwservice:hwservice_manager find;
#line 5
#line 5
allow hal_cas_server hal_cas_hwservice:hwservice_manager { add find };
#line 5
allow hal_cas_server hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hal_cas_server } hal_cas_hwservice:hwservice_manager add;
#line 5
#line 5
#line 5
#line 5
allow hal_cas_server hidl_memory_hwservice:hwservice_manager find;
#line 8
allow hal_cas_client hal_cas_service:service_manager find;
#line 8
#line 8
allow hal_cas_server hal_cas_service:service_manager { add find };
#line 8
neverallow { domain -hal_cas_server } hal_cas_service:service_manager add;
#line 8
#line 8
# On debug builds with root, allow binder services to use binder over TCP.
#line 8
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 8
#line 8
#line 8
#line 8
#line 8
#line 10
# Call the server domain and optionally transfer references to it.
#line 10
allow hal_cas_server servicemanager:binder { call transfer };
#line 10
# Allow the serverdomain to transfer references to the client on the reply.
#line 10
allow servicemanager hal_cas_server:binder transfer;
#line 10
# Receive and use open files from the server.
#line 10
allow hal_cas_server servicemanager:fd use;
#line 10
#line 11
# Call the server domain and optionally transfer references to it.
#line 11
allow hal_cas_client servicemanager:binder { call transfer };
#line 11
# Allow the serverdomain to transfer references to the client on the reply.
#line 11
allow servicemanager hal_cas_client:binder transfer;
#line 11
# Receive and use open files from the server.
#line 11
allow hal_cas_client servicemanager:fd use;
#line 11
# Permit reading device's serial number from system properties
#line 14
allow hal_cas_server serialno_prop:file { getattr open read map };
#line 14
# Read files already opened under /data
allow hal_cas system_data_file:file { getattr read };
# Read access to pseudo filesystems
#line 20
allow hal_cas cgroup:dir { open getattr read search ioctl lock watch watch_reads };
#line 20
allow hal_cas cgroup:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 20
allow hal_cas cgroup:dir { search write };
allow hal_cas cgroup:file { open append write lock map };
#line 24
allow hal_cas cgroup_v2:dir { open getattr read search ioctl lock watch watch_reads };
#line 24
allow hal_cas cgroup_v2:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 24
allow hal_cas cgroup_v2:dir { search write };
allow hal_cas cgroup_v2:file { open append write lock map };
# Allow access to ion memory allocation device
allow hal_cas ion_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow hal_cas hal_graphics_allocator:fd use;
allow hal_cas tee_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
###
### neverallow rules
###
# hal_cas should never execute any executable without a
# domain transition
neverallow hal_cas_server { file_type fs_type }:file execute_no_trans;
# do not allow privileged socket ioctl commands
neverallowxperm hal_cas_server domain:{ rawip_socket tcp_socket udp_socket } ioctl
#line 43
{
#line 43
# qualcomm rmnet ioctls
#line 43
0x00006900 0x00006902
#line 43
# socket ioctls
#line 43
0x0000890b 0x0000890c 0x0000890d 0x00008911 0x00008914 0x00008916
#line 43
0x00008918 0x0000891a 0x0000891c 0x0000891d 0x0000891e 0x0000891f
#line 43
0x00008920 0x00008922 0x00008923 0x00008924 0x00008925 0x00008926
#line 43
0x00008927 0x00008929 0x00008930 0x00008931 0x00008932
#line 43
0x00008934 0x00008935 0x00008936 0x00008937 0x00008939 0x00008940 0x00008941
#line 43
0x00008943 0x00008946 0x00008947 0x00008948 0x00008949 0x0000894a
#line 43
0x0000894b 0x00008953 0x00008954 0x00008955 0x00008960 0x00008961 0x00008962 0x00008970
#line 43
0x00008971 0x00008980 0x00008981 0x00008982 0x00008983 0x00008990
#line 43
0x00008991 0x00008992 0x00008993 0x00008994
#line 43
0x00008995 0x000089a0 0x000089a1 0x000089a2 0x000089a3 0x000089b0
#line 43
# device and protocol specific ioctls
#line 43
0x000089f0-0x000089ff
#line 43
0x000089e0-0x000089ef
#line 43
# Wireless extension ioctls
#line 43
0x00008b00 0x00008b02 0x00008b04 0x00008b06 0x00008b08 0x00008b0a
#line 43
0x00008b0c 0x00008b0e 0x00008b10 0x00008b14 0x00008b15 0x00008b16 0x00008b17
#line 43
0x00008b18 0x00008b19 0x00008b1a 0x00008b1b 0x00008b1c 0x00008b1d
#line 43
0x00008b20 0x00008b22 0x00008b24 0x00008b26 0x00008b28 0x00008b2a
#line 43
0x00008b2b 0x00008b2c 0x00008b30 0x00008b31 0x00008b32 0x00008b33
#line 43
0x00008b34 0x00008b35 0x00008b36
#line 43
# Dev private ioctl i.e. hardware specific ioctls
#line 43
0x00008be0-0x00008bff
#line 43
};
#line 1 "system/sepolicy/public/hal_codec2.te"
#line 1
allow hal_codec2_client media_variant_prop:file { getattr open read map };
#line 1
#line 2
allow hal_codec2_server media_variant_prop:file { getattr open read map };
#line 2
#line 3
allow hal_codec2_client codec2_config_prop:file { getattr open read map };
#line 3
#line 4
allow hal_codec2_server codec2_config_prop:file { getattr open read map };
#line 4
#line 6
# Call the server domain and optionally transfer references to it.
#line 6
allow hal_codec2_client hal_codec2_server:binder { call transfer };
#line 6
# Allow the serverdomain to transfer references to the client on the reply.
#line 6
allow hal_codec2_server hal_codec2_client:binder transfer;
#line 6
# Receive and use open files from the server.
#line 6
allow hal_codec2_client hal_codec2_server:fd use;
#line 6
#line 7
# Call the server domain and optionally transfer references to it.
#line 7
allow hal_codec2_server hal_codec2_client:binder { call transfer };
#line 7
# Allow the serverdomain to transfer references to the client on the reply.
#line 7
allow hal_codec2_client hal_codec2_server:binder transfer;
#line 7
# Receive and use open files from the server.
#line 7
allow hal_codec2_server hal_codec2_client:fd use;
#line 7
#line 9
allow hal_codec2_client hal_codec2_hwservice:hwservice_manager find;
#line 9
#line 9
allow hal_codec2_server hal_codec2_hwservice:hwservice_manager { add find };
#line 9
allow hal_codec2_server hidl_base_hwservice:hwservice_manager add;
#line 9
neverallow { domain -hal_codec2_server } hal_codec2_hwservice:hwservice_manager add;
#line 9
#line 9
#line 9
#line 9
#line 10
allow hal_codec2_client hal_codec2_service:service_manager find;
#line 10
#line 10
allow hal_codec2_server hal_codec2_service:service_manager { add find };
#line 10
neverallow { domain -hal_codec2_server } hal_codec2_service:service_manager add;
#line 10
#line 10
# On debug builds with root, allow binder services to use binder over TCP.
#line 10
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 10
#line 10
#line 10
#line 10
#line 10
# The following permissions are added to hal_codec2_server because vendor and
# vndk libraries provided for Codec2 implementation need them.
# Allow server access to composer sync fences
allow hal_codec2_server hal_graphics_composer:fd use;
# Allow both server and client access to ion
allow hal_codec2_server ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
# Allow server access to camera HAL's fences
allow hal_codec2_server hal_camera:fd use;
# Receive gralloc buffer FDs from bufferhubd.
allow hal_codec2_server bufferhubd:fd use;
allow hal_codec2_client ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
# codec2 aidl graphic buffer allocation waitable object
allow hal_codec2_server su:fifo_file read;
allow hal_codec2_server mediaserver:fifo_file read;
allow hal_codec2_server { appdomain -isolated_app_all }:fifo_file read;
#line 1 "system/sepolicy/public/hal_configstore.te"
# HwBinder IPC from client to server
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_configstore_client hal_configstore_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_configstore_server hal_configstore_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_configstore_client hal_configstore_server:fd use;
#line 2
#line 4
allow hal_configstore_client hal_configstore_ISurfaceFlingerConfigs:hwservice_manager find;
#line 4
#line 4
allow hal_configstore_server hal_configstore_ISurfaceFlingerConfigs:hwservice_manager { add find };
#line 4
allow hal_configstore_server hidl_base_hwservice:hwservice_manager add;
#line 4
neverallow { domain -hal_configstore_server } hal_configstore_ISurfaceFlingerConfigs:hwservice_manager add;
#line 4
#line 4
#line 4
#line 4
# hal_configstore runs with a strict seccomp filter. Use crash_dump's
# fallback path to collect crash data.
#line 8
#line 8
allow hal_configstore_server anr_data_file:file append;
#line 8
allow hal_configstore_server dumpstate:fd use;
#line 8
allow hal_configstore_server incidentd:fd use;
#line 8
# TODO: Figure out why write is needed.
#line 8
allow hal_configstore_server dumpstate:fifo_file { append write };
#line 8
allow hal_configstore_server incidentd:fifo_file { append write };
#line 8
allow hal_configstore_server system_server:fifo_file { append write };
#line 8
allow hal_configstore_server tombstoned:unix_stream_socket connectto;
#line 8
allow hal_configstore_server tombstoned:fd use;
#line 8
allow hal_configstore_server tombstoned_crash_socket:sock_file write;
#line 8
allow hal_configstore_server tombstone_data_file:file append;
#line 8
###
### neverallow rules
###
# Should never execute an executable without a domain transition
neverallow hal_configstore_server { file_type fs_type }:file execute_no_trans;
# Should never need network access. Disallow sockets except for
# for unix stream/dgram sockets used for logging/debugging.
neverallow hal_configstore_server domain:{
rawip_socket tcp_socket udp_socket
netlink_route_socket netlink_selinux_socket
socket netlink_socket packet_socket key_socket appletalk_socket
netlink_tcpdiag_socket netlink_nflog_socket
netlink_xfrm_socket netlink_audit_socket
netlink_dnrt_socket netlink_kobject_uevent_socket tun_socket
netlink_iscsi_socket netlink_fib_lookup_socket netlink_connector_socket
netlink_netfilter_socket netlink_generic_socket netlink_scsitransport_socket
netlink_rdma_socket netlink_crypto_socket
} *;
neverallow hal_configstore_server {
domain
-hal_configstore_server
-logd
-prng_seeder
-tombstoned
}:{ unix_dgram_socket unix_stream_socket } *;
# Should never need access to anything on /data
neverallow hal_configstore_server {
data_file_type
-anr_data_file # for crash dump collection
-tombstone_data_file # for crash dump collection
}:{ file fifo_file sock_file } *;
# Should never need sdcard access
neverallow hal_configstore_server {
sdcard_type
fuse sdcardfs vfat exfat fuseblk # manual expansion for completeness
}:dir ~getattr;
neverallow hal_configstore_server {
sdcard_type
fuse sdcardfs vfat exfat fuseblk # manual expansion for completeness
}:file *;
# Do not permit access to service_manager and vndservice_manager
neverallow hal_configstore_server *:service_manager *;
# No privileged capabilities
neverallow hal_configstore_server self:{ capability capability2 cap_userns cap2_userns } *;
# No ptracing other processes
neverallow hal_configstore_server *:process ptrace;
# no relabeling
neverallow hal_configstore_server *:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } { relabelfrom relabelto };
#line 1 "system/sepolicy/public/hal_confirmationui.te"
# HwBinder IPC from client to server
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_confirmationui_client hal_confirmationui_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_confirmationui_server hal_confirmationui_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_confirmationui_client hal_confirmationui_server:fd use;
#line 2
#line 4
allow hal_confirmationui_client hal_confirmationui_hwservice:hwservice_manager find;
#line 4
#line 4
allow hal_confirmationui_server hal_confirmationui_hwservice:hwservice_manager { add find };
#line 4
allow hal_confirmationui_server hidl_base_hwservice:hwservice_manager add;
#line 4
neverallow { domain -hal_confirmationui_server } hal_confirmationui_hwservice:hwservice_manager add;
#line 4
#line 4
#line 4
#line 4
#line 5
allow hal_confirmationui_client hal_confirmationui_service:service_manager find;
#line 5
#line 5
allow hal_confirmationui_server hal_confirmationui_service:service_manager { add find };
#line 5
neverallow { domain -hal_confirmationui_server } hal_confirmationui_service:service_manager add;
#line 5
#line 5
# On debug builds with root, allow binder services to use binder over TCP.
#line 5
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 5
#line 5
#line 5
#line 5
#line 5
#line 6
# Call the server domain and optionally transfer references to it.
#line 6
allow hal_confirmationui_server servicemanager:binder { call transfer };
#line 6
# Allow the serverdomain to transfer references to the client on the reply.
#line 6
allow servicemanager hal_confirmationui_server:binder transfer;
#line 6
# Receive and use open files from the server.
#line 6
allow hal_confirmationui_server servicemanager:fd use;
#line 6
#line 1 "system/sepolicy/public/hal_contexthub.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_contexthub_client hal_contexthub_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_contexthub_server hal_contexthub_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_contexthub_client hal_contexthub_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_contexthub_server hal_contexthub_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_contexthub_client hal_contexthub_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_contexthub_server hal_contexthub_client:fd use;
#line 3
#line 5
allow hal_contexthub_server hal_contexthub_service:service_manager { add find };
#line 5
neverallow { domain -hal_contexthub_server } hal_contexthub_service:service_manager add;
#line 5
#line 5
# On debug builds with root, allow binder services to use binder over TCP.
#line 5
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 5
#line 5
#line 6
# Call the server domain and optionally transfer references to it.
#line 6
allow hal_contexthub_server servicemanager:binder { call transfer };
#line 6
# Allow the serverdomain to transfer references to the client on the reply.
#line 6
allow servicemanager hal_contexthub_server:binder transfer;
#line 6
# Receive and use open files from the server.
#line 6
allow hal_contexthub_server servicemanager:fd use;
#line 6
allow hal_contexthub_client hal_contexthub_service:service_manager find;
#line 10
allow hal_contexthub_client hal_contexthub_hwservice:hwservice_manager find;
#line 10
#line 10
allow hal_contexthub_server hal_contexthub_hwservice:hwservice_manager { add find };
#line 10
allow hal_contexthub_server hidl_base_hwservice:hwservice_manager add;
#line 10
neverallow { domain -hal_contexthub_server } hal_contexthub_hwservice:hwservice_manager add;
#line 10
#line 10
#line 10
#line 10
#line 1 "system/sepolicy/public/hal_drm.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the servicemanager and transfer references to it.
#line 2
allow hal_drm_server servicemanager:binder { call transfer };
#line 2
# Allow servicemanager to send out callbacks
#line 2
allow servicemanager hal_drm_server:binder { call transfer };
#line 2
# servicemanager performs getpidcon on clients.
#line 2
allow servicemanager hal_drm_server:dir search;
#line 2
allow servicemanager hal_drm_server:file { read open };
#line 2
allow servicemanager hal_drm_server:process getattr;
#line 2
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 2
# all domains in domain.te.
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_drm_client hal_drm_server:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_drm_server hal_drm_client:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_drm_client hal_drm_server:fd use;
#line 3
#line 4
# Call the server domain and optionally transfer references to it.
#line 4
allow hal_drm_server hal_drm_client:binder { call transfer };
#line 4
# Allow the serverdomain to transfer references to the client on the reply.
#line 4
allow hal_drm_client hal_drm_server:binder transfer;
#line 4
# Receive and use open files from the server.
#line 4
allow hal_drm_server hal_drm_client:fd use;
#line 4
#line 6
allow hal_drm_client hal_drm_hwservice:hwservice_manager find;
#line 6
#line 6
allow hal_drm_server hal_drm_hwservice:hwservice_manager { add find };
#line 6
allow hal_drm_server hidl_base_hwservice:hwservice_manager add;
#line 6
neverallow { domain -hal_drm_server } hal_drm_hwservice:hwservice_manager add;
#line 6
#line 6
#line 6
#line 6
#line 7
allow hal_drm_client hal_drm_service:service_manager find;
#line 7
#line 7
allow hal_drm_server hal_drm_service:service_manager { add find };
#line 7
neverallow { domain -hal_drm_server } hal_drm_service:service_manager add;
#line 7
#line 7
# On debug builds with root, allow binder services to use binder over TCP.
#line 7
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 7
#line 7
#line 7
#line 7
#line 7
allow hal_drm hidl_memory_hwservice:hwservice_manager find;
# Required by Widevine DRM (b/22990512)
allow hal_drm self:process execmem;
# Permit reading device's serial number from system properties
#line 15
allow hal_drm_server serialno_prop:file { getattr open read map };
#line 15
# Permit reading force L3 system property
#line 17
allow hal_drm_server drm_forcel3_prop:file { getattr open read map };
#line 17
# Read files already opened under /data
allow hal_drm system_data_file:file { getattr read };
# Read access to pseudo filesystems
#line 23
allow hal_drm cgroup:dir { open getattr read search ioctl lock watch watch_reads };
#line 23
allow hal_drm cgroup:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 23
allow hal_drm cgroup:dir { search write };
allow hal_drm cgroup:file { open append write lock map };
#line 27
allow hal_drm cgroup_v2:dir { open getattr read search ioctl lock watch watch_reads };
#line 27
allow hal_drm cgroup_v2:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 27
allow hal_drm cgroup_v2:dir { search write };
allow hal_drm cgroup_v2:file { open append write lock map };
# Allow dumpsys Widevine without root
#line 35
# Allow access to ion memory allocation device
allow hal_drm ion_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow hal_drm hal_graphics_allocator:fd use;
# Allow access to hidl_memory allocation service
allow hal_drm hal_allocator_server:fd use;
# Allow access to fds allocated by mediaserver
allow hal_drm mediaserver:fd use;
allow hal_drm sysfs:file { getattr open read ioctl lock map watch watch_reads };
allow hal_drm tee_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow hal_drm_server { appdomain -isolated_app }:fd use;
# only allow unprivileged socket ioctl commands
allowxperm hal_drm self:{ rawip_socket tcp_socket udp_socket }
ioctl {
#line 55
{
#line 55
# Socket ioctls for gathering information about the interface
#line 55
0x00008906 0x00008907
#line 55
0x00008910 0x00008912 0x00008913 0x00008915 0x00008917 0x00008919
#line 55
0x0000891b 0x00008921 0x00008933 0x00008938 0x00008942
#line 55
# Wireless extension ioctls. Primarily get functions.
#line 55
0x00008b01 0x00008b05 0x00008b07 0x00008b09 0x00008b0b 0x00008b0d
#line 55
0x00008b0f 0x00008b11 0x00008b12 0x00008b13 0x00008b21 0x00008b23
#line 55
0x00008b25 0x00008b27 0x00008b29 0x00008b2d
#line 55
} {
#line 55
0x00005411 0x00005451 0x00005450 0x00005401 0x00005402 0x00005403 0x00005404 0x00005413 0x00005414
#line 55
0x0000540e 0x0000540b 0x00005410 0x0000540f
#line 55
} };
###
### neverallow rules
###
# hal_drm should never execute any executable without a
# domain transition
neverallow hal_drm_server { file_type fs_type }:file execute_no_trans;
# do not allow privileged socket ioctl commands
neverallowxperm hal_drm_server domain:{ rawip_socket tcp_socket udp_socket } ioctl
#line 66
{
#line 66
# qualcomm rmnet ioctls
#line 66
0x00006900 0x00006902
#line 66
# socket ioctls
#line 66
0x0000890b 0x0000890c 0x0000890d 0x00008911 0x00008914 0x00008916
#line 66
0x00008918 0x0000891a 0x0000891c 0x0000891d 0x0000891e 0x0000891f
#line 66
0x00008920 0x00008922 0x00008923 0x00008924 0x00008925 0x00008926
#line 66
0x00008927 0x00008929 0x00008930 0x00008931 0x00008932
#line 66
0x00008934 0x00008935 0x00008936 0x00008937 0x00008939 0x00008940 0x00008941
#line 66
0x00008943 0x00008946 0x00008947 0x00008948 0x00008949 0x0000894a
#line 66
0x0000894b 0x00008953 0x00008954 0x00008955 0x00008960 0x00008961 0x00008962 0x00008970
#line 66
0x00008971 0x00008980 0x00008981 0x00008982 0x00008983 0x00008990
#line 66
0x00008991 0x00008992 0x00008993 0x00008994
#line 66
0x00008995 0x000089a0 0x000089a1 0x000089a2 0x000089a3 0x000089b0
#line 66
# device and protocol specific ioctls
#line 66
0x000089f0-0x000089ff
#line 66
0x000089e0-0x000089ef
#line 66
# Wireless extension ioctls
#line 66
0x00008b00 0x00008b02 0x00008b04 0x00008b06 0x00008b08 0x00008b0a
#line 66
0x00008b0c 0x00008b0e 0x00008b10 0x00008b14 0x00008b15 0x00008b16 0x00008b17
#line 66
0x00008b18 0x00008b19 0x00008b1a 0x00008b1b 0x00008b1c 0x00008b1d
#line 66
0x00008b20 0x00008b22 0x00008b24 0x00008b26 0x00008b28 0x00008b2a
#line 66
0x00008b2b 0x00008b2c 0x00008b30 0x00008b31 0x00008b32 0x00008b33
#line 66
0x00008b34 0x00008b35 0x00008b36
#line 66
# Dev private ioctl i.e. hardware specific ioctls
#line 66
0x00008be0-0x00008bff
#line 66
};
#line 1 "system/sepolicy/public/hal_dumpstate.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_dumpstate_client hal_dumpstate_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_dumpstate_server hal_dumpstate_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_dumpstate_client hal_dumpstate_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_dumpstate_server hal_dumpstate_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_dumpstate_client hal_dumpstate_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_dumpstate_server hal_dumpstate_client:fd use;
#line 3
#line 5
#line 5
allow hal_dumpstate_server property_socket:sock_file write;
#line 5
allow hal_dumpstate_server init:unix_stream_socket connectto;
#line 5
#line 5
allow hal_dumpstate_server hal_dumpstate_config_prop:property_service set;
#line 5
#line 5
allow hal_dumpstate_server hal_dumpstate_config_prop:file { getattr open read map };
#line 5
#line 5
#line 7
allow hal_dumpstate_client hal_dumpstate_hwservice:hwservice_manager find;
#line 7
#line 7
allow hal_dumpstate_server hal_dumpstate_hwservice:hwservice_manager { add find };
#line 7
allow hal_dumpstate_server hidl_base_hwservice:hwservice_manager add;
#line 7
neverallow { domain -hal_dumpstate_server } hal_dumpstate_hwservice:hwservice_manager add;
#line 7
#line 7
#line 7
#line 7
#line 8
allow hal_dumpstate_client hal_dumpstate_service:service_manager find;
#line 8
#line 8
allow hal_dumpstate_server hal_dumpstate_service:service_manager { add find };
#line 8
neverallow { domain -hal_dumpstate_server } hal_dumpstate_service:service_manager add;
#line 8
#line 8
# On debug builds with root, allow binder services to use binder over TCP.
#line 8
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 8
#line 8
#line 8
#line 8
#line 8
#line 10
# Call the server domain and optionally transfer references to it.
#line 10
allow hal_dumpstate_server servicemanager:binder { call transfer };
#line 10
# Allow the serverdomain to transfer references to the client on the reply.
#line 10
allow servicemanager hal_dumpstate_server:binder transfer;
#line 10
# Receive and use open files from the server.
#line 10
allow hal_dumpstate_server servicemanager:fd use;
#line 10
#line 12
# Call the servicemanager and transfer references to it.
#line 12
allow hal_dumpstate_server servicemanager:binder { call transfer };
#line 12
# Allow servicemanager to send out callbacks
#line 12
allow servicemanager hal_dumpstate_server:binder { call transfer };
#line 12
# servicemanager performs getpidcon on clients.
#line 12
allow servicemanager hal_dumpstate_server:dir search;
#line 12
allow servicemanager hal_dumpstate_server:file { read open };
#line 12
allow servicemanager hal_dumpstate_server:process getattr;
#line 12
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 12
# all domains in domain.te.
#line 12
# write bug reports in /data/data/com.android.shell/files/bugreports/bugreport
allow hal_dumpstate shell_data_file:file write;
# allow reading /proc/interrupts for all hal impls
allow hal_dumpstate proc_interrupts:file { getattr open read ioctl lock map watch watch_reads };
# Log fsck results
#line 20
allow hal_dumpstate fscklogs:dir { open getattr read search ioctl lock watch watch_reads };
#line 20
allow hal_dumpstate fscklogs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 20
#line 1 "system/sepolicy/public/hal_evs.te"
#line 1
# Call the hwservicemanager and transfer references to it.
#line 1
allow hal_evs_client hwservicemanager:binder { call transfer };
#line 1
# Allow hwservicemanager to send out callbacks
#line 1
allow hwservicemanager hal_evs_client:binder { call transfer };
#line 1
# hwservicemanager performs getpidcon on clients.
#line 1
allow hwservicemanager hal_evs_client:dir search;
#line 1
allow hwservicemanager hal_evs_client:file { read open map };
#line 1
allow hwservicemanager hal_evs_client:process getattr;
#line 1
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 1
# all domains in domain.te.
#line 1
#line 2
# Call the hwservicemanager and transfer references to it.
#line 2
allow hal_evs_server hwservicemanager:binder { call transfer };
#line 2
# Allow hwservicemanager to send out callbacks
#line 2
allow hwservicemanager hal_evs_server:binder { call transfer };
#line 2
# hwservicemanager performs getpidcon on clients.
#line 2
allow hwservicemanager hal_evs_server:dir search;
#line 2
allow hwservicemanager hal_evs_server:file { read open map };
#line 2
allow hwservicemanager hal_evs_server:process getattr;
#line 2
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 2
# all domains in domain.te.
#line 2
#line 4
# Call the server domain and optionally transfer references to it.
#line 4
allow hal_evs_client hal_evs_server:binder { call transfer };
#line 4
# Allow the serverdomain to transfer references to the client on the reply.
#line 4
allow hal_evs_server hal_evs_client:binder transfer;
#line 4
# Receive and use open files from the server.
#line 4
allow hal_evs_client hal_evs_server:fd use;
#line 4
#line 5
# Call the server domain and optionally transfer references to it.
#line 5
allow hal_evs_server hal_evs_client:binder { call transfer };
#line 5
# Allow the serverdomain to transfer references to the client on the reply.
#line 5
allow hal_evs_client hal_evs_server:binder transfer;
#line 5
# Receive and use open files from the server.
#line 5
allow hal_evs_server hal_evs_client:fd use;
#line 5
# Below lines are equivalent to hal_attribute_hwservice(hal_evs, hal_evs_hwservice)
# except it allows evsmanagerd to add hal_evs_hwservice.
allow hal_evs_client hal_evs_hwservice:hwservice_manager find;
allow hal_evs_server hal_evs_hwservice:hwservice_manager { add find };
allow hal_evs_server hidl_base_hwservice:hwservice_manager add;
neverallow { domain -hal_evs_server -evsmanagerd } hal_evs_hwservice:hwservice_manager add;
# Allows to add a service
#line 15
allow hal_evs_client hal_evs_service:service_manager find;
#line 15
#line 15
allow hal_evs_server hal_evs_service:service_manager { add find };
#line 15
neverallow { domain -hal_evs_server } hal_evs_service:service_manager add;
#line 15
#line 15
# On debug builds with root, allow binder services to use binder over TCP.
#line 15
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 15
#line 15
#line 15
#line 15
#line 15
#line 1 "system/sepolicy/public/hal_face.te"
# Allow HwBinder IPC from client to server, and vice versa for callbacks.
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_face_client hal_face_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_face_server hal_face_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_face_client hal_face_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_face_server hal_face_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_face_client hal_face_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_face_server hal_face_client:fd use;
#line 3
#line 5
allow hal_face_client hal_face_hwservice:hwservice_manager find;
#line 5
#line 5
allow hal_face_server hal_face_hwservice:hwservice_manager { add find };
#line 5
allow hal_face_server hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hal_face_server } hal_face_hwservice:hwservice_manager add;
#line 5
#line 5
#line 5
#line 5
#line 6
allow hal_face_client hal_face_service:service_manager find;
#line 6
#line 6
allow hal_face_server hal_face_service:service_manager { add find };
#line 6
neverallow { domain -hal_face_server } hal_face_service:service_manager add;
#line 6
#line 6
# On debug builds with root, allow binder services to use binder over TCP.
#line 6
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 6
#line 6
#line 6
#line 6
#line 6
#line 8
# Call the servicemanager and transfer references to it.
#line 8
allow hal_face_server servicemanager:binder { call transfer };
#line 8
# Allow servicemanager to send out callbacks
#line 8
allow servicemanager hal_face_server:binder { call transfer };
#line 8
# servicemanager performs getpidcon on clients.
#line 8
allow servicemanager hal_face_server:dir search;
#line 8
allow servicemanager hal_face_server:file { read open };
#line 8
allow servicemanager hal_face_server:process getattr;
#line 8
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 8
# all domains in domain.te.
#line 8
# Allow access to the ion memory allocation device.
allow hal_face ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
# Allow read/write access to the face template directory.
allow hal_face face_vendor_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow hal_face face_vendor_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
#line 1 "system/sepolicy/public/hal_fastboot.te"
# allow binder connection from client to server
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_fastboot_client hal_fastboot_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_fastboot_server hal_fastboot_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_fastboot_client hal_fastboot_server:fd use;
#line 2
# allow client to find the service, allow server to register the service
#line 4
allow hal_fastboot_client hal_fastboot_service:service_manager find;
#line 4
#line 4
allow hal_fastboot_server hal_fastboot_service:service_manager { add find };
#line 4
neverallow { domain -hal_fastboot_server } hal_fastboot_service:service_manager add;
#line 4
#line 4
# On debug builds with root, allow binder services to use binder over TCP.
#line 4
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 4
#line 4
#line 4
#line 4
#line 4
# allow binder communication from server to service_manager
#line 6
# Call the server domain and optionally transfer references to it.
#line 6
allow hal_fastboot_server servicemanager:binder { call transfer };
#line 6
# Allow the serverdomain to transfer references to the client on the reply.
#line 6
allow servicemanager hal_fastboot_server:binder transfer;
#line 6
# Receive and use open files from the server.
#line 6
allow hal_fastboot_server servicemanager:fd use;
#line 6
#line 1 "system/sepolicy/public/hal_fingerprint.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_fingerprint_client hal_fingerprint_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_fingerprint_server hal_fingerprint_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_fingerprint_client hal_fingerprint_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_fingerprint_server hal_fingerprint_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_fingerprint_client hal_fingerprint_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_fingerprint_server hal_fingerprint_client:fd use;
#line 3
#line 5
allow hal_fingerprint_client hal_fingerprint_hwservice:hwservice_manager find;
#line 5
#line 5
allow hal_fingerprint_server hal_fingerprint_hwservice:hwservice_manager { add find };
#line 5
allow hal_fingerprint_server hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hal_fingerprint_server } hal_fingerprint_hwservice:hwservice_manager add;
#line 5
#line 5
#line 5
#line 5
#line 6
allow hal_fingerprint_client hal_fingerprint_service:service_manager find;
#line 6
#line 6
allow hal_fingerprint_server hal_fingerprint_service:service_manager { add find };
#line 6
neverallow { domain -hal_fingerprint_server } hal_fingerprint_service:service_manager add;
#line 6
#line 6
# On debug builds with root, allow binder services to use binder over TCP.
#line 6
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 6
#line 6
#line 6
#line 6
#line 6
#line 8
# Call the servicemanager and transfer references to it.
#line 8
allow hal_fingerprint_server servicemanager:binder { call transfer };
#line 8
# Allow servicemanager to send out callbacks
#line 8
allow servicemanager hal_fingerprint_server:binder { call transfer };
#line 8
# servicemanager performs getpidcon on clients.
#line 8
allow servicemanager hal_fingerprint_server:dir search;
#line 8
allow servicemanager hal_fingerprint_server:file { read open };
#line 8
allow servicemanager hal_fingerprint_server:process getattr;
#line 8
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 8
# all domains in domain.te.
#line 8
# For memory allocation
allow hal_fingerprint ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
allow hal_fingerprint fingerprint_vendor_data_file:file { { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } } };
allow hal_fingerprint fingerprint_vendor_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
#line 16
allow hal_fingerprint cgroup:dir { open getattr read search ioctl lock watch watch_reads };
#line 16
allow hal_fingerprint cgroup:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 16
#line 17
allow hal_fingerprint cgroup_v2:dir { open getattr read search ioctl lock watch watch_reads };
#line 17
allow hal_fingerprint cgroup_v2:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 17
#line 18
allow hal_fingerprint sysfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 18
allow hal_fingerprint sysfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 18
#line 1 "system/sepolicy/public/hal_gatekeeper.te"
#line 1
# Call the server domain and optionally transfer references to it.
#line 1
allow hal_gatekeeper_client hal_gatekeeper_server:binder { call transfer };
#line 1
# Allow the serverdomain to transfer references to the client on the reply.
#line 1
allow hal_gatekeeper_server hal_gatekeeper_client:binder transfer;
#line 1
# Receive and use open files from the server.
#line 1
allow hal_gatekeeper_client hal_gatekeeper_server:fd use;
#line 1
#line 3
allow hal_gatekeeper_client hal_gatekeeper_hwservice:hwservice_manager find;
#line 3
#line 3
allow hal_gatekeeper_server hal_gatekeeper_hwservice:hwservice_manager { add find };
#line 3
allow hal_gatekeeper_server hidl_base_hwservice:hwservice_manager add;
#line 3
neverallow { domain -hal_gatekeeper_server } hal_gatekeeper_hwservice:hwservice_manager add;
#line 3
#line 3
#line 3
#line 3
#line 4
allow hal_gatekeeper_client hal_gatekeeper_service:service_manager find;
#line 4
#line 4
allow hal_gatekeeper_server hal_gatekeeper_service:service_manager { add find };
#line 4
neverallow { domain -hal_gatekeeper_server } hal_gatekeeper_service:service_manager add;
#line 4
#line 4
# On debug builds with root, allow binder services to use binder over TCP.
#line 4
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 4
#line 4
#line 4
#line 4
#line 4
#line 5
# Call the server domain and optionally transfer references to it.
#line 5
allow hal_gatekeeper_server servicemanager:binder { call transfer };
#line 5
# Allow the serverdomain to transfer references to the client on the reply.
#line 5
allow servicemanager hal_gatekeeper_server:binder transfer;
#line 5
# Receive and use open files from the server.
#line 5
allow hal_gatekeeper_server servicemanager:fd use;
#line 5
# TEE access.
allow hal_gatekeeper tee_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow hal_gatekeeper ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
#line 1 "system/sepolicy/public/hal_gnss.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_gnss_client hal_gnss_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_gnss_server hal_gnss_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_gnss_client hal_gnss_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_gnss_server hal_gnss_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_gnss_client hal_gnss_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_gnss_server hal_gnss_client:fd use;
#line 3
#line 5
allow hal_gnss_client hal_gnss_hwservice:hwservice_manager find;
#line 5
#line 5
allow hal_gnss_server hal_gnss_hwservice:hwservice_manager { add find };
#line 5
allow hal_gnss_server hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hal_gnss_server } hal_gnss_hwservice:hwservice_manager add;
#line 5
#line 5
#line 5
#line 5
#line 6
allow hal_gnss_client hal_gnss_service:service_manager find;
#line 6
#line 6
allow hal_gnss_server hal_gnss_service:service_manager { add find };
#line 6
neverallow { domain -hal_gnss_server } hal_gnss_service:service_manager add;
#line 6
#line 6
# On debug builds with root, allow binder services to use binder over TCP.
#line 6
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 6
#line 6
#line 6
#line 6
#line 6
#line 7
# Call the servicemanager and transfer references to it.
#line 7
allow hal_gnss_server servicemanager:binder { call transfer };
#line 7
# Allow servicemanager to send out callbacks
#line 7
allow servicemanager hal_gnss_server:binder { call transfer };
#line 7
# servicemanager performs getpidcon on clients.
#line 7
allow servicemanager hal_gnss_server:dir search;
#line 7
allow servicemanager hal_gnss_server:file { read open };
#line 7
allow servicemanager hal_gnss_server:process getattr;
#line 7
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 7
# all domains in domain.te.
#line 7
#line 8
# Call the servicemanager and transfer references to it.
#line 8
allow hal_gnss_client servicemanager:binder { call transfer };
#line 8
# Allow servicemanager to send out callbacks
#line 8
allow servicemanager hal_gnss_client:binder { call transfer };
#line 8
# servicemanager performs getpidcon on clients.
#line 8
allow servicemanager hal_gnss_client:dir search;
#line 8
allow servicemanager hal_gnss_client:file { read open };
#line 8
allow servicemanager hal_gnss_client:process getattr;
#line 8
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 8
# all domains in domain.te.
#line 8
#line 1 "system/sepolicy/public/hal_graphics_allocator.te"
# HwBinder IPC from client to server
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_graphics_allocator_client hal_graphics_allocator_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_graphics_allocator_server hal_graphics_allocator_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_graphics_allocator_client hal_graphics_allocator_server:fd use;
#line 2
#line 4
allow hal_graphics_allocator_client hal_graphics_allocator_hwservice:hwservice_manager find;
#line 4
#line 4
allow hal_graphics_allocator_server hal_graphics_allocator_hwservice:hwservice_manager { add find };
#line 4
allow hal_graphics_allocator_server hidl_base_hwservice:hwservice_manager add;
#line 4
neverallow { domain -hal_graphics_allocator_server } hal_graphics_allocator_hwservice:hwservice_manager add;
#line 4
#line 4
#line 4
#line 4
allow hal_graphics_allocator_client hal_graphics_mapper_hwservice:hwservice_manager find;
allow hal_graphics_allocator_client hal_graphics_mapper_service:service_manager find;
allow hal_graphics_allocator_client same_process_hal_file:file { execute read open getattr map };
# GPU device access
allow hal_graphics_allocator gpu_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow hal_graphics_allocator gpu_device:dir { open getattr read search ioctl lock watch watch_reads };
allow hal_graphics_allocator ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
allow hal_graphics_allocator dmabuf_system_heap_device:chr_file { getattr open read ioctl lock map watch watch_reads };
# Access the secure heap
allow hal_graphics_allocator dmabuf_system_secure_heap_device:chr_file { getattr open read ioctl lock map watch watch_reads };
# allow to run with real-time scheduling policy
allow hal_graphics_allocator self:{ capability cap_userns } sys_nice;
# IAllocator stable-aidl
#line 22
allow hal_graphics_allocator_client hal_graphics_allocator_service:service_manager find;
#line 22
#line 22
allow hal_graphics_allocator_server hal_graphics_allocator_service:service_manager { add find };
#line 22
neverallow { domain -hal_graphics_allocator_server } hal_graphics_allocator_service:service_manager add;
#line 22
#line 22
# On debug builds with root, allow binder services to use binder over TCP.
#line 22
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 22
#line 22
#line 22
#line 22
#line 22
#line 23
# Call the server domain and optionally transfer references to it.
#line 23
allow hal_graphics_allocator_server servicemanager:binder { call transfer };
#line 23
# Allow the serverdomain to transfer references to the client on the reply.
#line 23
allow servicemanager hal_graphics_allocator_server:binder transfer;
#line 23
# Receive and use open files from the server.
#line 23
allow hal_graphics_allocator_server servicemanager:fd use;
#line 23
#line 24
# Call the server domain and optionally transfer references to it.
#line 24
allow hal_graphics_allocator_client servicemanager:binder { call transfer };
#line 24
# Allow the serverdomain to transfer references to the client on the reply.
#line 24
allow servicemanager hal_graphics_allocator_client:binder transfer;
#line 24
# Receive and use open files from the server.
#line 24
allow hal_graphics_allocator_client servicemanager:fd use;
#line 24
#line 1 "system/sepolicy/public/hal_graphics_composer.te"
type hal_graphics_composer_server_tmpfs, file_type;
attribute hal_graphics_composer_client_tmpfs;
expandattribute hal_graphics_composer_client_tmpfs true;
# HwBinder IPC from client to server, and callbacks
#line 6
# Call the server domain and optionally transfer references to it.
#line 6
allow hal_graphics_composer_client hal_graphics_composer_server:binder { call transfer };
#line 6
# Allow the serverdomain to transfer references to the client on the reply.
#line 6
allow hal_graphics_composer_server hal_graphics_composer_client:binder transfer;
#line 6
# Receive and use open files from the server.
#line 6
allow hal_graphics_composer_client hal_graphics_composer_server:fd use;
#line 6
#line 7
# Call the server domain and optionally transfer references to it.
#line 7
allow hal_graphics_composer_server hal_graphics_composer_client:binder { call transfer };
#line 7
# Allow the serverdomain to transfer references to the client on the reply.
#line 7
allow hal_graphics_composer_client hal_graphics_composer_server:binder transfer;
#line 7
# Receive and use open files from the server.
#line 7
allow hal_graphics_composer_server hal_graphics_composer_client:fd use;
#line 7
allow hal_graphics_composer_client hal_graphics_composer_server_tmpfs:file { getattr map read write };
allow hal_graphics_composer_server hal_graphics_composer_client_tmpfs:file { getattr map read write };
#line 11
allow hal_graphics_composer_client hal_graphics_composer_hwservice:hwservice_manager find;
#line 11
#line 11
allow hal_graphics_composer_server hal_graphics_composer_hwservice:hwservice_manager { add find };
#line 11
allow hal_graphics_composer_server hidl_base_hwservice:hwservice_manager add;
#line 11
neverallow { domain -hal_graphics_composer_server } hal_graphics_composer_hwservice:hwservice_manager add;
#line 11
#line 11
#line 11
#line 11
# Coordinate with hal_graphics_mapper
allow hal_graphics_composer_server hal_graphics_mapper_hwservice:hwservice_manager find;
# GPU device access
allow hal_graphics_composer gpu_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow hal_graphics_composer gpu_device:dir { open getattr read search ioctl lock watch watch_reads };
allow hal_graphics_composer ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
allow hal_graphics_composer dmabuf_system_heap_device:chr_file { getattr open read ioctl lock map watch watch_reads };
allow hal_graphics_composer hal_graphics_allocator:fd use;
# Access /dev/graphics/fb0.
allow hal_graphics_composer graphics_device:dir search;
allow hal_graphics_composer graphics_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Fences
allow hal_graphics_composer system_server:fd use;
allow hal_graphics_composer bootanim:fd use;
allow hal_graphics_composer appdomain:fd use;
# allow self to set SCHED_FIFO
allow hal_graphics_composer self:{ capability cap_userns } sys_nice;
# allow surfaceflinger to use a pipe for dumpsys output
allow hal_graphics_composer_server hal_graphics_composer_client:fifo_file write;
#line 39
# Call the server domain and optionally transfer references to it.
#line 39
allow hal_graphics_composer_client servicemanager:binder { call transfer };
#line 39
# Allow the serverdomain to transfer references to the client on the reply.
#line 39
allow servicemanager hal_graphics_composer_client:binder transfer;
#line 39
# Receive and use open files from the server.
#line 39
allow hal_graphics_composer_client servicemanager:fd use;
#line 39
#line 40
# Call the server domain and optionally transfer references to it.
#line 40
allow hal_graphics_composer_server servicemanager:binder { call transfer };
#line 40
# Allow the serverdomain to transfer references to the client on the reply.
#line 40
allow servicemanager hal_graphics_composer_server:binder transfer;
#line 40
# Receive and use open files from the server.
#line 40
allow hal_graphics_composer_server servicemanager:fd use;
#line 40
#line 42
allow hal_graphics_composer_client hal_graphics_composer_service:service_manager find;
#line 42
#line 42
allow hal_graphics_composer_server hal_graphics_composer_service:service_manager { add find };
#line 42
neverallow { domain -hal_graphics_composer_server } hal_graphics_composer_service:service_manager add;
#line 42
#line 42
# On debug builds with root, allow binder services to use binder over TCP.
#line 42
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 42
#line 42
#line 42
#line 42
#line 42
#line 1 "system/sepolicy/public/hal_health.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_health_client hal_health_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_health_server hal_health_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_health_client hal_health_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_health_server hal_health_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_health_client hal_health_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_health_server hal_health_client:fd use;
#line 3
#line 5
allow hal_health_client hal_health_hwservice:hwservice_manager find;
#line 5
#line 5
allow hal_health_server hal_health_hwservice:hwservice_manager { add find };
#line 5
allow hal_health_server hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hal_health_server } hal_health_hwservice:hwservice_manager add;
#line 5
#line 5
#line 5
#line 5
#line 6
allow hal_health_client hal_health_service:service_manager find;
#line 6
#line 6
allow hal_health_server hal_health_service:service_manager { add find };
#line 6
neverallow { domain -hal_health_server } hal_health_service:service_manager add;
#line 6
#line 6
# On debug builds with root, allow binder services to use binder over TCP.
#line 6
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 6
#line 6
#line 6
#line 6
#line 6
# Common rules for a health service.
# Allow to listen to uevents for updates
allow hal_health_server self:netlink_kobject_uevent_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# Allow to read /sys/class/power_supply directory
allow hal_health_server sysfs:dir { open getattr read search ioctl lock watch watch_reads };
# Allow to read files under /sys/class/power_supply. Implementations typically have symlinks
# to vendor specific files. Vendors should mark sysfs_batteryinfo on all files read by health
# HAL service.
#line 19
allow hal_health_server sysfs_batteryinfo:dir { open getattr read search ioctl lock watch watch_reads };
#line 19
allow hal_health_server sysfs_batteryinfo:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 19
# Allow to wake up to send periodic events
#line 22
# TODO(b/115946999): Remove /sys/power/* permissions once CONFIG_PM_WAKELOCKS is
#line 22
# deprecated.
#line 22
# Access /sys/power/wake_lock and /sys/power/wake_unlock
#line 22
allow hal_health_server sysfs_wake_lock:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 22
# Accessing these files requires CAP_BLOCK_SUSPEND
#line 22
allow hal_health_server self:{ capability2 cap2_userns } block_suspend;
#line 22
# system_suspend permissions
#line 22
#line 22
# Call the server domain and optionally transfer references to it.
#line 22
allow hal_health_server system_suspend_server:binder { call transfer };
#line 22
# Allow the serverdomain to transfer references to the client on the reply.
#line 22
allow system_suspend_server hal_health_server:binder transfer;
#line 22
# Receive and use open files from the server.
#line 22
allow hal_health_server system_suspend_server:fd use;
#line 22
#line 22
allow hal_health_server system_suspend_hwservice:hwservice_manager find;
#line 22
# halclientdomain permissions
#line 22
#line 22
# Call the hwservicemanager and transfer references to it.
#line 22
allow hal_health_server hwservicemanager:binder { call transfer };
#line 22
# Allow hwservicemanager to send out callbacks
#line 22
allow hwservicemanager hal_health_server:binder { call transfer };
#line 22
# hwservicemanager performs getpidcon on clients.
#line 22
allow hwservicemanager hal_health_server:dir search;
#line 22
allow hwservicemanager hal_health_server:file { read open map };
#line 22
allow hwservicemanager hal_health_server:process getattr;
#line 22
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 22
# all domains in domain.te.
#line 22
#line 22
#line 22
allow hal_health_server hwservicemanager_prop:file { getattr open read map };
#line 22
#line 22
allow hal_health_server hidl_manager_hwservice:hwservice_manager find;
#line 22
# AIDL suspend hal permissions
#line 22
allow hal_health_server hal_system_suspend_service:service_manager find;
#line 22
#line 22
# Call the servicemanager and transfer references to it.
#line 22
allow hal_health_server servicemanager:binder { call transfer };
#line 22
# Allow servicemanager to send out callbacks
#line 22
allow servicemanager hal_health_server:binder { call transfer };
#line 22
# servicemanager performs getpidcon on clients.
#line 22
allow servicemanager hal_health_server:dir search;
#line 22
allow servicemanager hal_health_server:file { read open };
#line 22
allow servicemanager hal_health_server:process getattr;
#line 22
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 22
# all domains in domain.te.
#line 22
#line 22
# Write to /dev/kmsg
allow hal_health_server kmsg_device:chr_file { getattr { open append write lock map } };
# Allow to use timerfd to wake itself up periodically to send health info.
allow hal_health_server self:capability2 wake_alarm;
# Use bpf programs
allow hal_health_server fs_bpf_vendor:dir search;
allow hal_health_server fs_bpf_vendor:file read;
allow hal_health_server bpfloader:bpf prog_run;
#line 1 "system/sepolicy/public/hal_health_storage.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_health_storage_client hal_health_storage_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_health_storage_server hal_health_storage_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_health_storage_client hal_health_storage_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_health_storage_server hal_health_storage_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_health_storage_client hal_health_storage_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_health_storage_server hal_health_storage_client:fd use;
#line 3
#line 5
# Call the servicemanager and transfer references to it.
#line 5
allow hal_health_storage_server servicemanager:binder { call transfer };
#line 5
# Allow servicemanager to send out callbacks
#line 5
allow servicemanager hal_health_storage_server:binder { call transfer };
#line 5
# servicemanager performs getpidcon on clients.
#line 5
allow servicemanager hal_health_storage_server:dir search;
#line 5
allow servicemanager hal_health_storage_server:file { read open };
#line 5
allow servicemanager hal_health_storage_server:process getattr;
#line 5
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 5
# all domains in domain.te.
#line 5
#line 7
allow hal_health_storage_client hal_health_storage_hwservice:hwservice_manager find;
#line 7
#line 7
allow hal_health_storage_server hal_health_storage_hwservice:hwservice_manager { add find };
#line 7
allow hal_health_storage_server hidl_base_hwservice:hwservice_manager add;
#line 7
neverallow { domain -hal_health_storage_server } hal_health_storage_hwservice:hwservice_manager add;
#line 7
#line 7
#line 7
#line 7
#line 8
allow hal_health_storage_client hal_health_storage_service:service_manager find;
#line 8
#line 8
allow hal_health_storage_server hal_health_storage_service:service_manager { add find };
#line 8
neverallow { domain -hal_health_storage_server } hal_health_storage_service:service_manager add;
#line 8
#line 8
# On debug builds with root, allow binder services to use binder over TCP.
#line 8
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 8
#line 8
#line 8
#line 8
#line 8
# Allow ReadDefaultFstab().
#line 11
allow hal_health_storage_server { metadata_file gsi_metadata_file_type }:dir search;
#line 11
allow hal_health_storage_server gsi_public_metadata_file:file { getattr open read ioctl lock map watch watch_reads };
#line 11
allow hal_health_storage_server { proc_bootconfig proc_cmdline }:file { getattr open read ioctl lock map watch watch_reads };
#line 11
#line 1 "system/sepolicy/public/hal_identity.te"
# HwBinder IPC from client to server
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_identity_client hal_identity_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_identity_server hal_identity_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_identity_client hal_identity_server:fd use;
#line 2
#line 4
allow hal_identity_client hal_identity_service:service_manager find;
#line 4
#line 4
allow hal_identity_server hal_identity_service:service_manager { add find };
#line 4
neverallow { domain -hal_identity_server } hal_identity_service:service_manager add;
#line 4
#line 4
# On debug builds with root, allow binder services to use binder over TCP.
#line 4
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 4
#line 4
#line 4
#line 4
#line 4
#line 6
# Call the server domain and optionally transfer references to it.
#line 6
allow hal_identity_server servicemanager:binder { call transfer };
#line 6
# Allow the serverdomain to transfer references to the client on the reply.
#line 6
allow servicemanager hal_identity_server:binder transfer;
#line 6
# Receive and use open files from the server.
#line 6
allow hal_identity_server servicemanager:fd use;
#line 6
#line 1 "system/sepolicy/public/hal_input_classifier.te"
# HwBinder IPC from client to server
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_input_classifier_client hal_input_classifier_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_input_classifier_server hal_input_classifier_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_input_classifier_client hal_input_classifier_server:fd use;
#line 2
#line 4
allow hal_input_classifier_client hal_input_classifier_hwservice:hwservice_manager find;
#line 4
#line 4
allow hal_input_classifier_server hal_input_classifier_hwservice:hwservice_manager { add find };
#line 4
allow hal_input_classifier_server hidl_base_hwservice:hwservice_manager add;
#line 4
neverallow { domain -hal_input_classifier_server } hal_input_classifier_hwservice:hwservice_manager add;
#line 4
#line 4
#line 4
#line 4
#line 1 "system/sepolicy/public/hal_input_processor.te"
# HwBinder IPC from client to server
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_input_processor_client hal_input_processor_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_input_processor_server hal_input_processor_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_input_processor_client hal_input_processor_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_input_processor_server servicemanager:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow servicemanager hal_input_processor_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_input_processor_server servicemanager:fd use;
#line 3
#line 5
allow hal_input_processor_client hal_input_processor_service:service_manager find;
#line 5
#line 5
allow hal_input_processor_server hal_input_processor_service:service_manager { add find };
#line 5
neverallow { domain -hal_input_processor_server } hal_input_processor_service:service_manager add;
#line 5
#line 5
# On debug builds with root, allow binder services to use binder over TCP.
#line 5
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 5
#line 5
#line 5
#line 5
#line 5
# Allow dumping of the HAL
allow hal_input_processor_server dumpstate:fifo_file write;
#line 1 "system/sepolicy/public/hal_ir.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_ir_client hal_ir_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_ir_server hal_ir_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_ir_client hal_ir_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_ir_server hal_ir_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_ir_client hal_ir_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_ir_server hal_ir_client:fd use;
#line 3
#line 5
allow hal_ir_client hal_ir_service:service_manager find;
#line 5
#line 5
allow hal_ir_server hal_ir_service:service_manager { add find };
#line 5
neverallow { domain -hal_ir_server } hal_ir_service:service_manager add;
#line 5
#line 5
# On debug builds with root, allow binder services to use binder over TCP.
#line 5
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 5
#line 5
#line 5
#line 5
#line 5
#line 6
# Call the server domain and optionally transfer references to it.
#line 6
allow hal_ir_server servicemanager:binder { call transfer };
#line 6
# Allow the serverdomain to transfer references to the client on the reply.
#line 6
allow servicemanager hal_ir_server:binder transfer;
#line 6
# Receive and use open files from the server.
#line 6
allow hal_ir_server servicemanager:fd use;
#line 6
#line 8
allow hal_ir_client hal_ir_hwservice:hwservice_manager find;
#line 8
#line 8
allow hal_ir_server hal_ir_hwservice:hwservice_manager { add find };
#line 8
allow hal_ir_server hidl_base_hwservice:hwservice_manager add;
#line 8
neverallow { domain -hal_ir_server } hal_ir_hwservice:hwservice_manager add;
#line 8
#line 8
#line 8
#line 8
#line 1 "system/sepolicy/public/hal_ivn.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_ivn_client hal_ivn_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_ivn_server hal_ivn_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_ivn_client hal_ivn_server:fd use;
#line 2
#line 4
allow hal_ivn_client hal_ivn_service:service_manager find;
#line 4
#line 4
allow hal_ivn_server hal_ivn_service:service_manager { add find };
#line 4
neverallow { domain -hal_ivn_server } hal_ivn_service:service_manager add;
#line 4
#line 4
# On debug builds with root, allow binder services to use binder over TCP.
#line 4
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 4
#line 4
#line 4
#line 4
#line 1 "system/sepolicy/public/hal_keymaster.te"
# HwBinder IPC from client to server
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_keymaster_client hal_keymaster_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_keymaster_server hal_keymaster_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_keymaster_client hal_keymaster_server:fd use;
#line 2
#line 4
allow hal_keymaster_client hal_keymaster_hwservice:hwservice_manager find;
#line 4
#line 4
allow hal_keymaster_server hal_keymaster_hwservice:hwservice_manager { add find };
#line 4
allow hal_keymaster_server hidl_base_hwservice:hwservice_manager add;
#line 4
neverallow { domain -hal_keymaster_server } hal_keymaster_hwservice:hwservice_manager add;
#line 4
#line 4
#line 4
#line 4
allow hal_keymaster tee_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow hal_keymaster ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
#line 1 "system/sepolicy/public/hal_keymint.te"
#line 1
# Call the server domain and optionally transfer references to it.
#line 1
allow hal_keymint_client hal_keymint_server:binder { call transfer };
#line 1
# Allow the serverdomain to transfer references to the client on the reply.
#line 1
allow hal_keymint_server hal_keymint_client:binder transfer;
#line 1
# Receive and use open files from the server.
#line 1
allow hal_keymint_client hal_keymint_server:fd use;
#line 1
#line 3
allow hal_keymint_client hal_keymint_service:service_manager find;
#line 3
#line 3
allow hal_keymint_server hal_keymint_service:service_manager { add find };
#line 3
neverallow { domain -hal_keymint_server } hal_keymint_service:service_manager add;
#line 3
#line 3
# On debug builds with root, allow binder services to use binder over TCP.
#line 3
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 3
#line 3
#line 3
#line 3
#line 3
#line 4
allow hal_keymint_client hal_remotelyprovisionedcomponent_service:service_manager find;
#line 4
#line 4
allow hal_keymint_server hal_remotelyprovisionedcomponent_service:service_manager { add find };
#line 4
neverallow { domain -hal_keymint_server } hal_remotelyprovisionedcomponent_service:service_manager add;
#line 4
#line 4
# On debug builds with root, allow binder services to use binder over TCP.
#line 4
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 4
#line 4
#line 4
#line 4
#line 4
#line 5
# Call the server domain and optionally transfer references to it.
#line 5
allow hal_keymint_server servicemanager:binder { call transfer };
#line 5
# Allow the serverdomain to transfer references to the client on the reply.
#line 5
allow servicemanager hal_keymint_server:binder transfer;
#line 5
# Receive and use open files from the server.
#line 5
allow hal_keymint_server servicemanager:fd use;
#line 5
allow hal_keymint_server tee_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow hal_keymint_server ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
#line 1 "system/sepolicy/public/hal_light.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_light_client hal_light_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_light_server hal_light_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_light_client hal_light_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_light_server hal_light_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_light_client hal_light_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_light_server hal_light_client:fd use;
#line 3
#line 5
allow hal_light_client hal_light_hwservice:hwservice_manager find;
#line 5
#line 5
allow hal_light_server hal_light_hwservice:hwservice_manager { add find };
#line 5
allow hal_light_server hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hal_light_server } hal_light_hwservice:hwservice_manager add;
#line 5
#line 5
#line 5
#line 5
#line 6
allow hal_light_client hal_light_service:service_manager find;
#line 6
#line 6
allow hal_light_server hal_light_service:service_manager { add find };
#line 6
neverallow { domain -hal_light_server } hal_light_service:service_manager add;
#line 6
#line 6
# On debug builds with root, allow binder services to use binder over TCP.
#line 6
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 6
#line 6
#line 6
#line 6
#line 6
#line 8
# Call the server domain and optionally transfer references to it.
#line 8
allow hal_light_server servicemanager:binder { call transfer };
#line 8
# Allow the serverdomain to transfer references to the client on the reply.
#line 8
allow servicemanager hal_light_server:binder transfer;
#line 8
# Receive and use open files from the server.
#line 8
allow hal_light_server servicemanager:fd use;
#line 8
#line 9
# Call the servicemanager and transfer references to it.
#line 9
allow hal_light_client servicemanager:binder { call transfer };
#line 9
# Allow servicemanager to send out callbacks
#line 9
allow servicemanager hal_light_client:binder { call transfer };
#line 9
# servicemanager performs getpidcon on clients.
#line 9
allow servicemanager hal_light_client:dir search;
#line 9
allow servicemanager hal_light_client:file { read open };
#line 9
allow servicemanager hal_light_client:process getattr;
#line 9
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 9
# all domains in domain.te.
#line 9
allow hal_light_server dumpstate:fifo_file write;
allow hal_light sysfs_leds:lnk_file read;
allow hal_light sysfs_leds:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow hal_light sysfs_leds:dir { open getattr read search ioctl lock watch watch_reads };
#line 1 "system/sepolicy/public/hal_lowpan.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_lowpan_client hal_lowpan_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_lowpan_server hal_lowpan_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_lowpan_client hal_lowpan_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_lowpan_server hal_lowpan_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_lowpan_client hal_lowpan_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_lowpan_server hal_lowpan_client:fd use;
#line 3
# Allow hal_lowpan_client to be able to find the hal_lowpan_server
#line 7
allow hal_lowpan_client hal_lowpan_hwservice:hwservice_manager find;
#line 7
#line 7
allow hal_lowpan_server hal_lowpan_hwservice:hwservice_manager { add find };
#line 7
allow hal_lowpan_server hidl_base_hwservice:hwservice_manager add;
#line 7
neverallow { domain -hal_lowpan_server } hal_lowpan_hwservice:hwservice_manager add;
#line 7
#line 7
#line 7
#line 7
# hal_lowpan domain can write/read to/from lowpan_prop
#line 10
#line 10
allow hal_lowpan_server property_socket:sock_file write;
#line 10
allow hal_lowpan_server init:unix_stream_socket connectto;
#line 10
#line 10
allow hal_lowpan_server lowpan_prop:property_service set;
#line 10
#line 10
allow hal_lowpan_server lowpan_prop:file { getattr open read map };
#line 10
#line 10
# Allow hal_lowpan_server to open lowpan_devices
allow hal_lowpan_server lowpan_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
###
### neverallow rules
###
# Only LoWPAN HAL may directly access LoWPAN hardware
neverallow { domain -hal_lowpan_server -init -ueventd } lowpan_device:chr_file ~getattr;
#line 1 "system/sepolicy/public/hal_macsec.te"
# Binder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_macsec_client hal_macsec_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_macsec_server hal_macsec_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_macsec_client hal_macsec_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_macsec_server hal_macsec_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_macsec_client hal_macsec_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_macsec_server hal_macsec_client:fd use;
#line 3
#line 5
allow hal_macsec_client hal_macsec_service:service_manager find;
#line 5
#line 5
allow hal_macsec_server hal_macsec_service:service_manager { add find };
#line 5
neverallow { domain -hal_macsec_server } hal_macsec_service:service_manager add;
#line 5
#line 5
# On debug builds with root, allow binder services to use binder over TCP.
#line 5
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 5
#line 5
#line 5
#line 5
#line 5
#line 7
# Call the servicemanager and transfer references to it.
#line 7
allow hal_macsec_server servicemanager:binder { call transfer };
#line 7
# Allow servicemanager to send out callbacks
#line 7
allow servicemanager hal_macsec_server:binder { call transfer };
#line 7
# servicemanager performs getpidcon on clients.
#line 7
allow servicemanager hal_macsec_server:dir search;
#line 7
allow servicemanager hal_macsec_server:file { read open };
#line 7
allow servicemanager hal_macsec_server:process getattr;
#line 7
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 7
# all domains in domain.te.
#line 7
#line 1 "system/sepolicy/public/hal_memtrack.te"
# HwBinder IPC from client to server
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_memtrack_client hal_memtrack_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_memtrack_server hal_memtrack_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_memtrack_client hal_memtrack_server:fd use;
#line 2
#line 4
allow hal_memtrack_client hal_memtrack_hwservice:hwservice_manager find;
#line 4
#line 4
allow hal_memtrack_server hal_memtrack_hwservice:hwservice_manager { add find };
#line 4
allow hal_memtrack_server hidl_base_hwservice:hwservice_manager add;
#line 4
neverallow { domain -hal_memtrack_server } hal_memtrack_hwservice:hwservice_manager add;
#line 4
#line 4
#line 4
#line 4
#line 6
allow hal_memtrack_client hal_memtrack_service:service_manager find;
#line 6
#line 6
allow hal_memtrack_server hal_memtrack_service:service_manager { add find };
#line 6
neverallow { domain -hal_memtrack_server } hal_memtrack_service:service_manager add;
#line 6
#line 6
# On debug builds with root, allow binder services to use binder over TCP.
#line 6
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 6
#line 6
#line 6
#line 6
#line 6
#line 7
# Call the server domain and optionally transfer references to it.
#line 7
allow hal_memtrack_server servicemanager:binder { call transfer };
#line 7
# Allow the serverdomain to transfer references to the client on the reply.
#line 7
allow servicemanager hal_memtrack_server:binder transfer;
#line 7
# Receive and use open files from the server.
#line 7
allow hal_memtrack_server servicemanager:fd use;
#line 7
#line 1 "system/sepolicy/public/hal_neuralnetworks.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_neuralnetworks_client hal_neuralnetworks_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_neuralnetworks_server hal_neuralnetworks_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_neuralnetworks_client hal_neuralnetworks_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_neuralnetworks_server hal_neuralnetworks_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_neuralnetworks_client hal_neuralnetworks_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_neuralnetworks_server hal_neuralnetworks_client:fd use;
#line 3
#line 5
allow hal_neuralnetworks_client hal_neuralnetworks_hwservice:hwservice_manager find;
#line 5
#line 5
allow hal_neuralnetworks_server hal_neuralnetworks_hwservice:hwservice_manager { add find };
#line 5
allow hal_neuralnetworks_server hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hal_neuralnetworks_server } hal_neuralnetworks_hwservice:hwservice_manager add;
#line 5
#line 5
#line 5
#line 5
allow hal_neuralnetworks hidl_memory_hwservice:hwservice_manager find;
allow hal_neuralnetworks hal_allocator:fd use;
allow hal_neuralnetworks hal_graphics_mapper_hwservice:hwservice_manager find;
allow hal_neuralnetworks hal_graphics_allocator:fd use;
allow hal_neuralnetworks gpu_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow hal_neuralnetworks gpu_device:dir { open getattr read search ioctl lock watch watch_reads };
# Allow NN HAL service to use a client-provided fd residing in /data/data/.
allow hal_neuralnetworks_server app_data_file:file { read write getattr map };
allow hal_neuralnetworks_server privapp_data_file:file { read write getattr map };
# Allow NN HAL service to use a client-provided fd residing in /data/local/tmp/.
allow hal_neuralnetworks_server shell_data_file:file { read write getattr map };
# Allow NN HAL service to read a client-provided ION memory fd.
allow hal_neuralnetworks_server ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
# Allow NN HAL service to use a client-provided fd residing in /storage
allow hal_neuralnetworks_server storage_file:file { getattr map read };
# Allow NN HAL service to read a client-provided fd residing in /data/app/.
allow hal_neuralnetworks_server apk_data_file:file { getattr map read };
# Allow NN HAL client to check the ro.nnapi.extensions.deny_on_product
# property to determine whether to deny NNAPI extensions use for apps
# on product partition (apps in GSI are not allowed to use NNAPI extensions).
#line 32
allow hal_neuralnetworks_client nnapi_ext_deny_product_prop:file { getattr open read map };
#line 32
;
# Allow NN HAL client to read device_config_nnapi_native_prop.
#line 35
allow hal_neuralnetworks_client device_config_nnapi_native_prop:file { getattr open read map };
#line 35
# This property is only expected to be found in /product/build.prop,
# allow to be set only by init.
neverallow { domain -init } nnapi_ext_deny_product_prop:property_service set;
# Define sepolicy for NN AIDL HAL service
#line 42
allow hal_neuralnetworks_client hal_neuralnetworks_service:service_manager find;
#line 42
#line 42
allow hal_neuralnetworks_server hal_neuralnetworks_service:service_manager { add find };
#line 42
neverallow { domain -hal_neuralnetworks_server } hal_neuralnetworks_service:service_manager add;
#line 42
#line 42
# On debug builds with root, allow binder services to use binder over TCP.
#line 42
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 42
#line 42
#line 42
#line 42
#line 42
#line 43
# Call the server domain and optionally transfer references to it.
#line 43
allow hal_neuralnetworks_server servicemanager:binder { call transfer };
#line 43
# Allow the serverdomain to transfer references to the client on the reply.
#line 43
allow servicemanager hal_neuralnetworks_server:binder transfer;
#line 43
# Receive and use open files from the server.
#line 43
allow hal_neuralnetworks_server servicemanager:fd use;
#line 43
#line 45
# Call the servicemanager and transfer references to it.
#line 45
allow hal_neuralnetworks_server servicemanager:binder { call transfer };
#line 45
# Allow servicemanager to send out callbacks
#line 45
allow servicemanager hal_neuralnetworks_server:binder { call transfer };
#line 45
# servicemanager performs getpidcon on clients.
#line 45
allow servicemanager hal_neuralnetworks_server:dir search;
#line 45
allow servicemanager hal_neuralnetworks_server:file { read open };
#line 45
allow servicemanager hal_neuralnetworks_server:process getattr;
#line 45
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 45
# all domains in domain.te.
#line 45
allow hal_neuralnetworks_server dumpstate:fifo_file write;
#line 1 "system/sepolicy/public/hal_neverallows.te"
# only HALs responsible for network hardware should have privileged
# network capabilities
neverallow {
halserverdomain
-hal_bluetooth_server
-hal_can_controller_server
-hal_wifi_server
-hal_wifi_hostapd_server
-hal_wifi_supplicant_server
-hal_telephony_server
-hal_uwb_server
# TODO(b/196225233): Remove hal_uwb_vendor_server
-hal_uwb_vendor_server
-hal_nlinterceptor_server
} self:{ capability cap_userns } { net_admin net_raw };
# Unless a HAL's job is to communicate over the network, or control network
# hardware, it should not be using network sockets.
# NOTE: HALs for automotive devices have an exemption from this rule because in
# a car it is common to have external modules and HALs need to communicate to
# those modules using network. Using this exemption for non-automotive builds
# will result in CTS failure.
neverallow {
halserverdomain
-hal_automotive_socket_exemption
-hal_can_controller_server
-hal_tetheroffload_server
-hal_wifi_server
-hal_wifi_hostapd_server
-hal_wifi_supplicant_server
-hal_telephony_server
-hal_uwb_server
# TODO(b/196225233): Remove hal_uwb_vendor_server
-hal_uwb_vendor_server
-hal_nlinterceptor_server
-hal_bluetooth_server
} domain:{ udp_socket rawip_socket } *;
neverallow {
halserverdomain
-hal_automotive_socket_exemption
-hal_can_controller_server
-hal_tetheroffload_server
-hal_wifi_server
-hal_wifi_hostapd_server
-hal_wifi_supplicant_server
-hal_telephony_server
-hal_nlinterceptor_server
-hal_bluetooth_server
} {
domain
}:tcp_socket *;
# The UWB HAL is not actually a networking HAL but may need to bring up and down
# interfaces. Restrict it to only these networking operations.
neverallow hal_uwb_vendor_server self:{ capability cap_userns } { net_raw };
# Subset of socket_class_set likely to be usable for communication or accessible through net_admin.
# udp_socket is required to use interface ioctls.
neverallow hal_uwb_vendor_server domain:{ socket rawip_socket netlink_socket packet_socket key_socket netlink_route_socket netlink_tcpdiag_socket netlink_nflog_socket netlink_xfrm_socket netlink_selinux_socket netlink_audit_socket netlink_dnrt_socket netlink_kobject_uevent_socket tun_socket netlink_iscsi_socket netlink_fib_lookup_socket netlink_connector_socket netlink_netfilter_socket netlink_scsitransport_socket netlink_rdma_socket netlink_crypto_socket qipcrtr_socket xdp_socket } *;
###
# HALs are defined as an attribute and so a given domain could hypothetically
# have multiple HALs in it (or even all of them) with the subsequent policy of
# the domain comprised of the union of all the HALs.
#
# This is a problem because
# 1) Security sensitive components should only be accessed by specific HALs.
# 2) hwbinder_call and the restrictions it provides cannot be reasoned about in
# the platform.
# 3) The platform cannot reason about defense in depth if there are
# monolithic domains etc.
#
# As an example, hal_keymaster and hal_gatekeeper can access the TEE and while
# its OK for them to share a process its not OK with them to share processes
# with other hals.
#
# The following neverallow rules, in conjuntion with CTS tests, assert that
# these security principles are adhered to.
#
# Do not allow a hal to exec another process without a domain transition.
# TODO remove exemptions.
neverallow {
halserverdomain
-hal_dumpstate_server
-hal_telephony_server
} {
file_type
fs_type
# May invoke shell commands via /system/bin/sh
-shell_exec
-toolbox_exec
}:file execute_no_trans;
# Do not allow a process other than init to transition into a HAL domain.
neverallow { domain -init } halserverdomain:process transition;
# Only allow transitioning to a domain by running its executable. Do not
# allow transitioning into a HAL domain by use of seclabel in an
# init.*.rc script.
neverallow * halserverdomain:process dyntransition;
#line 1 "system/sepolicy/public/hal_nfc.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_nfc_client hal_nfc_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_nfc_server hal_nfc_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_nfc_client hal_nfc_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_nfc_server hal_nfc_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_nfc_client hal_nfc_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_nfc_server hal_nfc_client:fd use;
#line 3
#line 4
# Call the server domain and optionally transfer references to it.
#line 4
allow hal_nfc_server servicemanager:binder { call transfer };
#line 4
# Allow the serverdomain to transfer references to the client on the reply.
#line 4
allow servicemanager hal_nfc_server:binder transfer;
#line 4
# Receive and use open files from the server.
#line 4
allow hal_nfc_server servicemanager:fd use;
#line 4
#line 6
allow hal_nfc_client hal_nfc_hwservice:hwservice_manager find;
#line 6
#line 6
allow hal_nfc_server hal_nfc_hwservice:hwservice_manager { add find };
#line 6
allow hal_nfc_server hidl_base_hwservice:hwservice_manager add;
#line 6
neverallow { domain -hal_nfc_server } hal_nfc_hwservice:hwservice_manager add;
#line 6
#line 6
#line 6
#line 6
#line 7
allow hal_nfc_client hal_nfc_service:service_manager find;
#line 7
#line 7
allow hal_nfc_server hal_nfc_service:service_manager { add find };
#line 7
neverallow { domain -hal_nfc_server } hal_nfc_service:service_manager add;
#line 7
#line 7
# On debug builds with root, allow binder services to use binder over TCP.
#line 7
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 7
#line 7
#line 7
#line 7
#line 7
# Set NFC properties (used by bcm2079x HAL).
#line 10
#line 10
allow hal_nfc property_socket:sock_file write;
#line 10
allow hal_nfc init:unix_stream_socket connectto;
#line 10
#line 10
allow hal_nfc nfc_prop:property_service set;
#line 10
#line 10
allow hal_nfc nfc_prop:file { getattr open read map };
#line 10
#line 10
# NFC device access.
allow hal_nfc nfc_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 1 "system/sepolicy/public/hal_nlinterceptor.te"
#line 1
# Call the server domain and optionally transfer references to it.
#line 1
allow hal_nlinterceptor_client hal_nlinterceptor_server:binder { call transfer };
#line 1
# Allow the serverdomain to transfer references to the client on the reply.
#line 1
allow hal_nlinterceptor_server hal_nlinterceptor_client:binder transfer;
#line 1
# Receive and use open files from the server.
#line 1
allow hal_nlinterceptor_client hal_nlinterceptor_server:fd use;
#line 1
#line 3
allow hal_nlinterceptor_client hal_nlinterceptor_service:service_manager find;
#line 3
#line 3
allow hal_nlinterceptor_server hal_nlinterceptor_service:service_manager { add find };
#line 3
neverallow { domain -hal_nlinterceptor_server } hal_nlinterceptor_service:service_manager add;
#line 3
#line 3
# On debug builds with root, allow binder services to use binder over TCP.
#line 3
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 3
#line 3
#line 3
#line 3
#line 3
#line 4
# Call the server domain and optionally transfer references to it.
#line 4
allow hal_nlinterceptor servicemanager:binder { call transfer };
#line 4
# Allow the serverdomain to transfer references to the client on the reply.
#line 4
allow servicemanager hal_nlinterceptor:binder transfer;
#line 4
# Receive and use open files from the server.
#line 4
allow hal_nlinterceptor servicemanager:fd use;
#line 4
allow hal_nlinterceptor self:{ capability cap_userns } net_admin;
allow hal_nlinterceptor self:netlink_generic_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow hal_nlinterceptor self:netlink_route_socket { { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } } nlmsg_readpriv nlmsg_write };
#line 1 "system/sepolicy/public/hal_oemlock.te"
# HwBinder IPC from client to server
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_oemlock_client hal_oemlock_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_oemlock_server hal_oemlock_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_oemlock_client hal_oemlock_server:fd use;
#line 2
#line 4
allow hal_oemlock_client hal_oemlock_hwservice:hwservice_manager find;
#line 4
#line 4
allow hal_oemlock_server hal_oemlock_hwservice:hwservice_manager { add find };
#line 4
allow hal_oemlock_server hidl_base_hwservice:hwservice_manager add;
#line 4
neverallow { domain -hal_oemlock_server } hal_oemlock_hwservice:hwservice_manager add;
#line 4
#line 4
#line 4
#line 4
#line 5
allow hal_oemlock_client hal_oemlock_service:service_manager find;
#line 5
#line 5
allow hal_oemlock_server hal_oemlock_service:service_manager { add find };
#line 5
neverallow { domain -hal_oemlock_server } hal_oemlock_service:service_manager add;
#line 5
#line 5
# On debug builds with root, allow binder services to use binder over TCP.
#line 5
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 5
#line 5
#line 5
#line 5
#line 5
#line 7
# Call the server domain and optionally transfer references to it.
#line 7
allow hal_oemlock_server servicemanager:binder { call transfer };
#line 7
# Allow the serverdomain to transfer references to the client on the reply.
#line 7
allow servicemanager hal_oemlock_server:binder transfer;
#line 7
# Receive and use open files from the server.
#line 7
allow hal_oemlock_server servicemanager:fd use;
#line 7
#line 1 "system/sepolicy/public/hal_omx.te"
# applies all permissions to hal_omx NOT hal_omx_server
# since OMX must always be in its own process.
#line 4
# Call the server domain and optionally transfer references to it.
#line 4
allow hal_omx_server binderservicedomain:binder { call transfer };
#line 4
# Allow the serverdomain to transfer references to the client on the reply.
#line 4
allow binderservicedomain hal_omx_server:binder transfer;
#line 4
# Receive and use open files from the server.
#line 4
allow hal_omx_server binderservicedomain:fd use;
#line 4
#line 5
# Call the server domain and optionally transfer references to it.
#line 5
allow hal_omx_server { appdomain -isolated_app }:binder { call transfer };
#line 5
# Allow the serverdomain to transfer references to the client on the reply.
#line 5
allow { appdomain -isolated_app } hal_omx_server:binder transfer;
#line 5
# Receive and use open files from the server.
#line 5
allow hal_omx_server { appdomain -isolated_app }:fd use;
#line 5
# Allow hal_omx_server access to composer sync fences
allow hal_omx_server hal_graphics_composer:fd use;
allow hal_omx_server ion_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow hal_omx_server hal_camera:fd use;
#line 13
#line 13
allow hal_omx_server anr_data_file:file append;
#line 13
allow hal_omx_server dumpstate:fd use;
#line 13
allow hal_omx_server incidentd:fd use;
#line 13
# TODO: Figure out why write is needed.
#line 13
allow hal_omx_server dumpstate:fifo_file { append write };
#line 13
allow hal_omx_server incidentd:fifo_file { append write };
#line 13
allow hal_omx_server system_server:fifo_file { append write };
#line 13
allow hal_omx_server tombstoned:unix_stream_socket connectto;
#line 13
allow hal_omx_server tombstoned:fd use;
#line 13
allow hal_omx_server tombstoned_crash_socket:sock_file write;
#line 13
allow hal_omx_server tombstone_data_file:file append;
#line 13
# Recieve gralloc buffer FDs from bufferhubd. Note that hal_omx_server never
# directly connects to bufferhubd via PDX. Instead, a VR app acts as a bridge
# between those two: it talks to hal_omx_server via Binder and talks to bufferhubd
# via PDX. Thus, there is no need to use pdx_client macro.
allow hal_omx_server bufferhubd:fd use;
#line 21
allow hal_omx_client hal_omx_hwservice:hwservice_manager find;
#line 21
#line 21
allow hal_omx_server hal_omx_hwservice:hwservice_manager { add find };
#line 21
allow hal_omx_server hidl_base_hwservice:hwservice_manager add;
#line 21
neverallow { domain -hal_omx_server } hal_omx_hwservice:hwservice_manager add;
#line 21
#line 21
#line 21
#line 21
allow hal_omx_client hidl_token_hwservice:hwservice_manager find;
#line 25
allow hal_omx_client media_variant_prop:file { getattr open read map };
#line 25
#line 26
allow hal_omx_server media_variant_prop:file { getattr open read map };
#line 26
#line 28
# Call the server domain and optionally transfer references to it.
#line 28
allow hal_omx_client hal_omx_server:binder { call transfer };
#line 28
# Allow the serverdomain to transfer references to the client on the reply.
#line 28
allow hal_omx_server hal_omx_client:binder transfer;
#line 28
# Receive and use open files from the server.
#line 28
allow hal_omx_client hal_omx_server:fd use;
#line 28
#line 29
# Call the server domain and optionally transfer references to it.
#line 29
allow hal_omx_server hal_omx_client:binder { call transfer };
#line 29
# Allow the serverdomain to transfer references to the client on the reply.
#line 29
allow hal_omx_client hal_omx_server:binder transfer;
#line 29
# Receive and use open files from the server.
#line 29
allow hal_omx_server hal_omx_client:fd use;
#line 29
###
### neverallow rules
###
# hal_omx_server should never execute any executable without a
# domain transition
neverallow hal_omx_server { file_type fs_type }:file execute_no_trans;
# The goal of the mediaserver split is to place media processing code into
# restrictive sandboxes with limited responsibilities and thus limited
# permissions. Example: Audioserver is only responsible for controlling audio
# hardware and processing audio content. Cameraserver does the same for camera
# hardware/content. Etc.
#
# Media processing code is inherently risky and thus should have limited
# permissions and be isolated from the rest of the system and network.
# Lengthier explanation here:
# https://android-developers.googleblog.com/2016/05/hardening-media-stack.html
neverallow hal_omx_server domain:{ udp_socket rawip_socket } *;
neverallow hal_omx_server { domain }:tcp_socket *;
#line 1 "system/sepolicy/public/hal_power.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_power_client hal_power_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_power_server hal_power_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_power_client hal_power_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_power_server hal_power_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_power_client hal_power_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_power_server hal_power_client:fd use;
#line 3
#line 5
allow hal_power_client hal_power_hwservice:hwservice_manager find;
#line 5
#line 5
allow hal_power_server hal_power_hwservice:hwservice_manager { add find };
#line 5
allow hal_power_server hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hal_power_server } hal_power_hwservice:hwservice_manager add;
#line 5
#line 5
#line 5
#line 5
#line 6
allow hal_power_client hal_power_service:service_manager find;
#line 6
#line 6
allow hal_power_server hal_power_service:service_manager { add find };
#line 6
neverallow { domain -hal_power_server } hal_power_service:service_manager add;
#line 6
#line 6
# On debug builds with root, allow binder services to use binder over TCP.
#line 6
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 6
#line 6
#line 6
#line 6
#line 6
#line 8
# Call the server domain and optionally transfer references to it.
#line 8
allow hal_power_server servicemanager:binder { call transfer };
#line 8
# Allow the serverdomain to transfer references to the client on the reply.
#line 8
allow servicemanager hal_power_server:binder transfer;
#line 8
# Receive and use open files from the server.
#line 8
allow hal_power_server servicemanager:fd use;
#line 8
#line 9
# Call the server domain and optionally transfer references to it.
#line 9
allow hal_power_client servicemanager:binder { call transfer };
#line 9
# Allow the serverdomain to transfer references to the client on the reply.
#line 9
allow servicemanager hal_power_client:binder transfer;
#line 9
# Receive and use open files from the server.
#line 9
allow hal_power_client servicemanager:fd use;
#line 9
#line 1 "system/sepolicy/public/hal_power_stats.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_power_stats_client hal_power_stats_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_power_stats_server hal_power_stats_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_power_stats_client hal_power_stats_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_power_stats_server hal_power_stats_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_power_stats_client hal_power_stats_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_power_stats_server hal_power_stats_client:fd use;
#line 3
#line 5
allow hal_power_stats_client hal_power_stats_hwservice:hwservice_manager find;
#line 5
#line 5
allow hal_power_stats_server hal_power_stats_hwservice:hwservice_manager { add find };
#line 5
allow hal_power_stats_server hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hal_power_stats_server } hal_power_stats_hwservice:hwservice_manager add;
#line 5
#line 5
#line 5
#line 5
#line 6
allow hal_power_stats_client hal_power_stats_service:service_manager find;
#line 6
#line 6
allow hal_power_stats_server hal_power_stats_service:service_manager { add find };
#line 6
neverallow { domain -hal_power_stats_server } hal_power_stats_service:service_manager add;
#line 6
#line 6
# On debug builds with root, allow binder services to use binder over TCP.
#line 6
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 6
#line 6
#line 6
#line 6
#line 6
#line 8
# Call the server domain and optionally transfer references to it.
#line 8
allow hal_power_stats_server servicemanager:binder { call transfer };
#line 8
# Allow the serverdomain to transfer references to the client on the reply.
#line 8
allow servicemanager hal_power_stats_server:binder transfer;
#line 8
# Receive and use open files from the server.
#line 8
allow hal_power_stats_server servicemanager:fd use;
#line 8
#line 9
# Call the server domain and optionally transfer references to it.
#line 9
allow hal_power_stats_client servicemanager:binder { call transfer };
#line 9
# Allow the serverdomain to transfer references to the client on the reply.
#line 9
allow servicemanager hal_power_stats_client:binder transfer;
#line 9
# Receive and use open files from the server.
#line 9
allow hal_power_stats_client servicemanager:fd use;
#line 9
#line 1 "system/sepolicy/public/hal_rebootescrow.te"
# HwBinder IPC from client to server
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_rebootescrow_client hal_rebootescrow_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_rebootescrow_server hal_rebootescrow_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_rebootescrow_client hal_rebootescrow_server:fd use;
#line 2
#line 4
allow hal_rebootescrow_client hal_rebootescrow_service:service_manager find;
#line 4
#line 4
allow hal_rebootescrow_server hal_rebootescrow_service:service_manager { add find };
#line 4
neverallow { domain -hal_rebootescrow_server } hal_rebootescrow_service:service_manager add;
#line 4
#line 4
# On debug builds with root, allow binder services to use binder over TCP.
#line 4
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 4
#line 4
#line 4
#line 4
#line 4
#line 6
# Call the servicemanager and transfer references to it.
#line 6
allow hal_rebootescrow_server servicemanager:binder { call transfer };
#line 6
# Allow servicemanager to send out callbacks
#line 6
allow servicemanager hal_rebootescrow_server:binder { call transfer };
#line 6
# servicemanager performs getpidcon on clients.
#line 6
allow servicemanager hal_rebootescrow_server:dir search;
#line 6
allow servicemanager hal_rebootescrow_server:file { read open };
#line 6
allow servicemanager hal_rebootescrow_server:process getattr;
#line 6
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 6
# all domains in domain.te.
#line 6
#line 1 "system/sepolicy/public/hal_remoteaccess.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_remoteaccess_client hal_remoteaccess_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_remoteaccess_server hal_remoteaccess_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_remoteaccess_client hal_remoteaccess_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_remoteaccess_server hal_remoteaccess_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_remoteaccess_client hal_remoteaccess_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_remoteaccess_server hal_remoteaccess_client:fd use;
#line 3
#line 5
allow hal_remoteaccess_client hal_remoteaccess_service:service_manager find;
#line 5
#line 5
allow hal_remoteaccess_server hal_remoteaccess_service:service_manager { add find };
#line 5
neverallow { domain -hal_remoteaccess_server } hal_remoteaccess_service:service_manager add;
#line 5
#line 5
# On debug builds with root, allow binder services to use binder over TCP.
#line 5
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 5
#line 5
#line 5
#line 5
#line 5
#line 1 "system/sepolicy/public/hal_remotelyprovisionedcomponent_avf.te"
# allow binder connection from client to server
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_remotelyprovisionedcomponent_avf_client hal_remotelyprovisionedcomponent_avf_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_remotelyprovisionedcomponent_avf_server hal_remotelyprovisionedcomponent_avf_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_remotelyprovisionedcomponent_avf_client hal_remotelyprovisionedcomponent_avf_server:fd use;
#line 2
# allow client to find the service, allow server to register the service
#line 5
allow hal_remotelyprovisionedcomponent_avf_client hal_remotelyprovisionedcomponent_avf_service:service_manager find;
#line 5
#line 5
allow hal_remotelyprovisionedcomponent_avf_server hal_remotelyprovisionedcomponent_avf_service:service_manager { add find };
#line 5
neverallow { domain -hal_remotelyprovisionedcomponent_avf_server } hal_remotelyprovisionedcomponent_avf_service:service_manager add;
#line 5
#line 5
# On debug builds with root, allow binder services to use binder over TCP.
#line 5
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 5
#line 5
#line 5
#line 5
#line 5
# allow binder communication from server to service_manager
#line 8
# Call the servicemanager and transfer references to it.
#line 8
allow hal_remotelyprovisionedcomponent_avf_server servicemanager:binder { call transfer };
#line 8
# Allow servicemanager to send out callbacks
#line 8
allow servicemanager hal_remotelyprovisionedcomponent_avf_server:binder { call transfer };
#line 8
# servicemanager performs getpidcon on clients.
#line 8
allow servicemanager hal_remotelyprovisionedcomponent_avf_server:dir search;
#line 8
allow servicemanager hal_remotelyprovisionedcomponent_avf_server:file { read open };
#line 8
allow servicemanager hal_remotelyprovisionedcomponent_avf_server:process getattr;
#line 8
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 8
# all domains in domain.te.
#line 8
#line 1 "system/sepolicy/public/hal_secretkeeper.te"
# Domains for the Secretkeeper HAL, which provides secure (tamper evident, rollback protected)
# storage of secrets guarded by DICE policies.
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_secretkeeper_client hal_secretkeeper_server:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_secretkeeper_server hal_secretkeeper_client:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_secretkeeper_client hal_secretkeeper_server:fd use;
#line 3
#line 5
allow hal_secretkeeper_client hal_secretkeeper_service:service_manager find;
#line 5
#line 5
allow hal_secretkeeper_server hal_secretkeeper_service:service_manager { add find };
#line 5
neverallow { domain -hal_secretkeeper_server } hal_secretkeeper_service:service_manager add;
#line 5
#line 5
# On debug builds with root, allow binder services to use binder over TCP.
#line 5
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 5
#line 5
#line 5
#line 5
#line 5
#line 7
# Call the servicemanager and transfer references to it.
#line 7
allow hal_secretkeeper_server servicemanager:binder { call transfer };
#line 7
# Allow servicemanager to send out callbacks
#line 7
allow servicemanager hal_secretkeeper_server:binder { call transfer };
#line 7
# servicemanager performs getpidcon on clients.
#line 7
allow servicemanager hal_secretkeeper_server:dir search;
#line 7
allow servicemanager hal_secretkeeper_server:file { read open };
#line 7
allow servicemanager hal_secretkeeper_server:process getattr;
#line 7
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 7
# all domains in domain.te.
#line 7
#line 8
# Call the servicemanager and transfer references to it.
#line 8
allow hal_secretkeeper_client servicemanager:binder { call transfer };
#line 8
# Allow servicemanager to send out callbacks
#line 8
allow servicemanager hal_secretkeeper_client:binder { call transfer };
#line 8
# servicemanager performs getpidcon on clients.
#line 8
allow servicemanager hal_secretkeeper_client:dir search;
#line 8
allow servicemanager hal_secretkeeper_client:file { read open };
#line 8
allow servicemanager hal_secretkeeper_client:process getattr;
#line 8
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 8
# all domains in domain.te.
#line 8
# The Secretkeeper HAL service needs to communicate with a trusted application running
# in the TEE, which is represented by the tee_device permission.
allow hal_secretkeeper_server tee_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 1 "system/sepolicy/public/hal_secure_element.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_secure_element_client hal_secure_element_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_secure_element_server hal_secure_element_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_secure_element_client hal_secure_element_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_secure_element_server hal_secure_element_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_secure_element_client hal_secure_element_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_secure_element_server hal_secure_element_client:fd use;
#line 3
#line 5
allow hal_secure_element_client hal_secure_element_hwservice:hwservice_manager find;
#line 5
#line 5
allow hal_secure_element_server hal_secure_element_hwservice:hwservice_manager { add find };
#line 5
allow hal_secure_element_server hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hal_secure_element_server } hal_secure_element_hwservice:hwservice_manager add;
#line 5
#line 5
#line 5
#line 5
#line 6
allow hal_secure_element_client hal_secure_element_service:service_manager find;
#line 6
#line 6
allow hal_secure_element_server hal_secure_element_service:service_manager { add find };
#line 6
neverallow { domain -hal_secure_element_server } hal_secure_element_service:service_manager add;
#line 6
#line 6
# On debug builds with root, allow binder services to use binder over TCP.
#line 6
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 6
#line 6
#line 6
#line 6
#line 6
#line 8
# Call the servicemanager and transfer references to it.
#line 8
allow hal_secure_element_server servicemanager:binder { call transfer };
#line 8
# Allow servicemanager to send out callbacks
#line 8
allow servicemanager hal_secure_element_server:binder { call transfer };
#line 8
# servicemanager performs getpidcon on clients.
#line 8
allow servicemanager hal_secure_element_server:dir search;
#line 8
allow servicemanager hal_secure_element_server:file { read open };
#line 8
allow servicemanager hal_secure_element_server:process getattr;
#line 8
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 8
# all domains in domain.te.
#line 8
allow hal_secure_element_client hal_secure_element_service:service_manager find;
#line 1 "system/sepolicy/public/hal_sensors.te"
# HwBinder IPC from client to server
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_sensors_client hal_sensors_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_sensors_server hal_sensors_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_sensors_client hal_sensors_server:fd use;
#line 2
#line 4
allow hal_sensors_client hal_sensors_hwservice:hwservice_manager find;
#line 4
#line 4
allow hal_sensors_server hal_sensors_hwservice:hwservice_manager { add find };
#line 4
allow hal_sensors_server hidl_base_hwservice:hwservice_manager add;
#line 4
neverallow { domain -hal_sensors_server } hal_sensors_hwservice:hwservice_manager add;
#line 4
#line 4
#line 4
#line 4
# Allow sensor hals to access ashmem memory allocated by apps
allow hal_sensors { appdomain -isolated_app }:fd use;
# Allow sensor hals to access ashmem memory allocated by android.hidl.allocator
# fd is passed in from framework sensorservice HAL.
allow hal_sensors hal_allocator:fd use;
# allow to run with real-time scheduling policy
allow hal_sensors self:{ capability cap_userns } sys_nice;
#line 16
allow hal_sensors_server hal_sensors_service:service_manager { add find };
#line 16
neverallow { domain -hal_sensors_server } hal_sensors_service:service_manager add;
#line 16
#line 16
# On debug builds with root, allow binder services to use binder over TCP.
#line 16
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 16
#line 16
#line 17
# Call the server domain and optionally transfer references to it.
#line 17
allow hal_sensors_server servicemanager:binder { call transfer };
#line 17
# Allow the serverdomain to transfer references to the client on the reply.
#line 17
allow servicemanager hal_sensors_server:binder transfer;
#line 17
# Receive and use open files from the server.
#line 17
allow hal_sensors_server servicemanager:fd use;
#line 17
allow hal_sensors_client hal_sensors_service:service_manager find;
#line 1 "system/sepolicy/public/hal_telephony.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_telephony_client hal_telephony_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_telephony_server hal_telephony_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_telephony_client hal_telephony_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_telephony_server hal_telephony_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_telephony_client hal_telephony_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_telephony_server hal_telephony_client:fd use;
#line 3
#line 5
allow hal_telephony_client hal_telephony_hwservice:hwservice_manager find;
#line 5
#line 5
allow hal_telephony_server hal_telephony_hwservice:hwservice_manager { add find };
#line 5
allow hal_telephony_server hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hal_telephony_server } hal_telephony_hwservice:hwservice_manager add;
#line 5
#line 5
#line 5
#line 5
#line 6
allow hal_telephony_client hal_radio_service:service_manager find;
#line 6
#line 6
allow hal_telephony_server hal_radio_service:service_manager { add find };
#line 6
neverallow { domain -hal_telephony_server } hal_radio_service:service_manager add;
#line 6
#line 6
# On debug builds with root, allow binder services to use binder over TCP.
#line 6
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 6
#line 6
#line 6
#line 6
#line 6
allowxperm hal_telephony_server self:udp_socket ioctl
#line 8
{
#line 8
# qualcomm rmnet ioctls
#line 8
0x00006900 0x00006902
#line 8
# socket ioctls
#line 8
0x0000890b 0x0000890c 0x0000890d 0x00008911 0x00008914 0x00008916
#line 8
0x00008918 0x0000891a 0x0000891c 0x0000891d 0x0000891e 0x0000891f
#line 8
0x00008920 0x00008922 0x00008923 0x00008924 0x00008925 0x00008926
#line 8
0x00008927 0x00008929 0x00008930 0x00008931 0x00008932
#line 8
0x00008934 0x00008935 0x00008936 0x00008937 0x00008939 0x00008940 0x00008941
#line 8
0x00008943 0x00008946 0x00008947 0x00008948 0x00008949 0x0000894a
#line 8
0x0000894b 0x00008953 0x00008954 0x00008955 0x00008960 0x00008961 0x00008962 0x00008970
#line 8
0x00008971 0x00008980 0x00008981 0x00008982 0x00008983 0x00008990
#line 8
0x00008991 0x00008992 0x00008993 0x00008994
#line 8
0x00008995 0x000089a0 0x000089a1 0x000089a2 0x000089a3 0x000089b0
#line 8
# device and protocol specific ioctls
#line 8
0x000089f0-0x000089ff
#line 8
0x000089e0-0x000089ef
#line 8
# Wireless extension ioctls
#line 8
0x00008b00 0x00008b02 0x00008b04 0x00008b06 0x00008b08 0x00008b0a
#line 8
0x00008b0c 0x00008b0e 0x00008b10 0x00008b14 0x00008b15 0x00008b16 0x00008b17
#line 8
0x00008b18 0x00008b19 0x00008b1a 0x00008b1b 0x00008b1c 0x00008b1d
#line 8
0x00008b20 0x00008b22 0x00008b24 0x00008b26 0x00008b28 0x00008b2a
#line 8
0x00008b2b 0x00008b2c 0x00008b30 0x00008b31 0x00008b32 0x00008b33
#line 8
0x00008b34 0x00008b35 0x00008b36
#line 8
# Dev private ioctl i.e. hardware specific ioctls
#line 8
0x00008be0-0x00008bff
#line 8
};
allow hal_telephony_server self:netlink_route_socket nlmsg_write;
allow hal_telephony_server self:{ capability cap_userns } { setpcap setgid setuid net_admin net_raw };
allow hal_telephony_server cgroup:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow hal_telephony_server cgroup:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
allow hal_telephony_server cgroup_v2:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow hal_telephony_server cgroup_v2:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
allow hal_telephony_server radio_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow hal_telephony_server radio_device:blk_file { getattr open read ioctl lock map watch watch_reads };
allow hal_telephony_server efs_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow hal_telephony_server efs_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow hal_telephony_server vendor_shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow hal_telephony_server bluetooth_efs_file:file { getattr open read ioctl lock map watch watch_reads };
allow hal_telephony_server bluetooth_efs_file:dir { open getattr read search ioctl lock watch watch_reads };
# property service
#line 25
allow hal_telephony_server telephony_config_prop:file { getattr open read map };
#line 25
#line 26
#line 26
allow hal_telephony_server property_socket:sock_file write;
#line 26
allow hal_telephony_server init:unix_stream_socket connectto;
#line 26
#line 26
allow hal_telephony_server radio_control_prop:property_service set;
#line 26
#line 26
allow hal_telephony_server radio_control_prop:file { getattr open read map };
#line 26
#line 26
#line 27
#line 27
allow hal_telephony_server property_socket:sock_file write;
#line 27
allow hal_telephony_server init:unix_stream_socket connectto;
#line 27
#line 27
allow hal_telephony_server radio_prop:property_service set;
#line 27
#line 27
allow hal_telephony_server radio_prop:file { getattr open read map };
#line 27
#line 27
#line 28
#line 28
allow hal_telephony_server property_socket:sock_file write;
#line 28
allow hal_telephony_server init:unix_stream_socket connectto;
#line 28
#line 28
allow hal_telephony_server telephony_status_prop:property_service set;
#line 28
#line 28
allow hal_telephony_server telephony_status_prop:file { getattr open read map };
#line 28
#line 28
allow hal_telephony_server tty_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Allow hal_telephony_server to create and use netlink sockets.
allow hal_telephony_server self:netlink_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow hal_telephony_server self:netlink_generic_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow hal_telephony_server self:netlink_kobject_uevent_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# Access to wake locks
#line 38
# TODO(b/115946999): Remove /sys/power/* permissions once CONFIG_PM_WAKELOCKS is
#line 38
# deprecated.
#line 38
# Access /sys/power/wake_lock and /sys/power/wake_unlock
#line 38
allow hal_telephony_server sysfs_wake_lock:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 38
# Accessing these files requires CAP_BLOCK_SUSPEND
#line 38
allow hal_telephony_server self:{ capability2 cap2_userns } block_suspend;
#line 38
# system_suspend permissions
#line 38
#line 38
# Call the server domain and optionally transfer references to it.
#line 38
allow hal_telephony_server system_suspend_server:binder { call transfer };
#line 38
# Allow the serverdomain to transfer references to the client on the reply.
#line 38
allow system_suspend_server hal_telephony_server:binder transfer;
#line 38
# Receive and use open files from the server.
#line 38
allow hal_telephony_server system_suspend_server:fd use;
#line 38
#line 38
allow hal_telephony_server system_suspend_hwservice:hwservice_manager find;
#line 38
# halclientdomain permissions
#line 38
#line 38
# Call the hwservicemanager and transfer references to it.
#line 38
allow hal_telephony_server hwservicemanager:binder { call transfer };
#line 38
# Allow hwservicemanager to send out callbacks
#line 38
allow hwservicemanager hal_telephony_server:binder { call transfer };
#line 38
# hwservicemanager performs getpidcon on clients.
#line 38
allow hwservicemanager hal_telephony_server:dir search;
#line 38
allow hwservicemanager hal_telephony_server:file { read open map };
#line 38
allow hwservicemanager hal_telephony_server:process getattr;
#line 38
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 38
# all domains in domain.te.
#line 38
#line 38
#line 38
allow hal_telephony_server hwservicemanager_prop:file { getattr open read map };
#line 38
#line 38
allow hal_telephony_server hidl_manager_hwservice:hwservice_manager find;
#line 38
# AIDL suspend hal permissions
#line 38
allow hal_telephony_server hal_system_suspend_service:service_manager find;
#line 38
#line 38
# Call the servicemanager and transfer references to it.
#line 38
allow hal_telephony_server servicemanager:binder { call transfer };
#line 38
# Allow servicemanager to send out callbacks
#line 38
allow servicemanager hal_telephony_server:binder { call transfer };
#line 38
# servicemanager performs getpidcon on clients.
#line 38
allow servicemanager hal_telephony_server:dir search;
#line 38
allow servicemanager hal_telephony_server:file { read open };
#line 38
allow servicemanager hal_telephony_server:process getattr;
#line 38
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 38
# all domains in domain.te.
#line 38
#line 38
#line 40
allow hal_telephony_server proc_net_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 40
allow hal_telephony_server proc_net_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 40
#line 41
allow hal_telephony_server sysfs_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 41
allow hal_telephony_server sysfs_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 41
# granting the ioctl permission for hal_telephony_server should be device specific
allow hal_telephony_server self:socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# Allow AIDL HAL shim to call HIDL HAL implementation
#line 47
# Call the server domain and optionally transfer references to it.
#line 47
allow hal_telephony_server hal_telephony_server:binder { call transfer };
#line 47
# Allow the serverdomain to transfer references to the client on the reply.
#line 47
allow hal_telephony_server hal_telephony_server:binder transfer;
#line 47
# Receive and use open files from the server.
#line 47
allow hal_telephony_server hal_telephony_server:fd use;
#line 47
#line 1 "system/sepolicy/public/hal_tetheroffload.te"
## HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_tetheroffload_client hal_tetheroffload_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_tetheroffload_server hal_tetheroffload_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_tetheroffload_client hal_tetheroffload_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_tetheroffload_server hal_tetheroffload_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_tetheroffload_client hal_tetheroffload_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_tetheroffload_server hal_tetheroffload_client:fd use;
#line 3
#line 5
allow hal_tetheroffload_client hal_tetheroffload_hwservice:hwservice_manager find;
#line 5
#line 5
allow hal_tetheroffload_server hal_tetheroffload_hwservice:hwservice_manager { add find };
#line 5
allow hal_tetheroffload_server hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hal_tetheroffload_server } hal_tetheroffload_hwservice:hwservice_manager add;
#line 5
#line 5
#line 5
#line 5
#line 6
allow hal_tetheroffload_client hal_tetheroffload_service:service_manager find;
#line 6
#line 6
allow hal_tetheroffload_server hal_tetheroffload_service:service_manager { add find };
#line 6
neverallow { domain -hal_tetheroffload_server } hal_tetheroffload_service:service_manager add;
#line 6
#line 6
# On debug builds with root, allow binder services to use binder over TCP.
#line 6
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 6
#line 6
#line 6
#line 6
#line 6
#line 8
# Call the servicemanager and transfer references to it.
#line 8
allow hal_tetheroffload_server servicemanager:binder { call transfer };
#line 8
# Allow servicemanager to send out callbacks
#line 8
allow servicemanager hal_tetheroffload_server:binder { call transfer };
#line 8
# servicemanager performs getpidcon on clients.
#line 8
allow servicemanager hal_tetheroffload_server:dir search;
#line 8
allow servicemanager hal_tetheroffload_server:file { read open };
#line 8
allow servicemanager hal_tetheroffload_server:process getattr;
#line 8
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 8
# all domains in domain.te.
#line 8
# allow the client to pass the server already open netlink sockets
allow hal_tetheroffload_server hal_tetheroffload_client:netlink_netfilter_socket { getattr read setopt write };
#line 1 "system/sepolicy/public/hal_thermal.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_thermal_client hal_thermal_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_thermal_server hal_thermal_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_thermal_client hal_thermal_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_thermal_server hal_thermal_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_thermal_client hal_thermal_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_thermal_server hal_thermal_client:fd use;
#line 3
#line 5
allow hal_thermal_client hal_thermal_hwservice:hwservice_manager find;
#line 5
#line 5
allow hal_thermal_server hal_thermal_hwservice:hwservice_manager { add find };
#line 5
allow hal_thermal_server hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hal_thermal_server } hal_thermal_hwservice:hwservice_manager add;
#line 5
#line 5
#line 5
#line 5
#line 6
allow hal_thermal_client hal_thermal_service:service_manager find;
#line 6
#line 6
allow hal_thermal_server hal_thermal_service:service_manager { add find };
#line 6
neverallow { domain -hal_thermal_server } hal_thermal_service:service_manager add;
#line 6
#line 6
# On debug builds with root, allow binder services to use binder over TCP.
#line 6
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 6
#line 6
#line 6
#line 6
#line 6
#line 8
allow hal_thermal_server hal_thermal_service:service_manager { add find };
#line 8
neverallow { domain -hal_thermal_server } hal_thermal_service:service_manager add;
#line 8
#line 8
# On debug builds with root, allow binder services to use binder over TCP.
#line 8
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 8
#line 8
#line 9
# Call the server domain and optionally transfer references to it.
#line 9
allow hal_thermal_server servicemanager:binder { call transfer };
#line 9
# Allow the serverdomain to transfer references to the client on the reply.
#line 9
allow servicemanager hal_thermal_server:binder transfer;
#line 9
# Receive and use open files from the server.
#line 9
allow hal_thermal_server servicemanager:fd use;
#line 9
#line 10
# Call the server domain and optionally transfer references to it.
#line 10
allow hal_thermal_client servicemanager:binder { call transfer };
#line 10
# Allow the serverdomain to transfer references to the client on the reply.
#line 10
allow servicemanager hal_thermal_client:binder transfer;
#line 10
# Receive and use open files from the server.
#line 10
allow hal_thermal_client servicemanager:fd use;
#line 10
#line 1 "system/sepolicy/public/hal_threadnetwork.te"
#line 1
# Call the server domain and optionally transfer references to it.
#line 1
allow hal_threadnetwork_client hal_threadnetwork_server:binder { call transfer };
#line 1
# Allow the serverdomain to transfer references to the client on the reply.
#line 1
allow hal_threadnetwork_server hal_threadnetwork_client:binder transfer;
#line 1
# Receive and use open files from the server.
#line 1
allow hal_threadnetwork_client hal_threadnetwork_server:fd use;
#line 1
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_threadnetwork_server hal_threadnetwork_client:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_threadnetwork_client hal_threadnetwork_server:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_threadnetwork_server hal_threadnetwork_client:fd use;
#line 2
#line 4
allow hal_threadnetwork_client hal_threadnetwork_service:service_manager find;
#line 4
#line 4
allow hal_threadnetwork_server hal_threadnetwork_service:service_manager { add find };
#line 4
neverallow { domain -hal_threadnetwork_server } hal_threadnetwork_service:service_manager add;
#line 4
#line 4
# On debug builds with root, allow binder services to use binder over TCP.
#line 4
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 4
#line 4
#line 4
#line 4
#line 4
#line 6
# Call the server domain and optionally transfer references to it.
#line 6
allow hal_threadnetwork_server servicemanager:binder { call transfer };
#line 6
# Allow the serverdomain to transfer references to the client on the reply.
#line 6
allow servicemanager hal_threadnetwork_server:binder transfer;
#line 6
# Receive and use open files from the server.
#line 6
allow hal_threadnetwork_server servicemanager:fd use;
#line 6
#line 7
# Call the server domain and optionally transfer references to it.
#line 7
allow hal_threadnetwork_client servicemanager:binder { call transfer };
#line 7
# Allow the serverdomain to transfer references to the client on the reply.
#line 7
allow servicemanager hal_threadnetwork_client:binder transfer;
#line 7
# Receive and use open files from the server.
#line 7
allow hal_threadnetwork_client servicemanager:fd use;
#line 7
#line 1 "system/sepolicy/public/hal_tv_cec.te"
# HwBinder IPC from clients into server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_tv_cec_client hal_tv_cec_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_tv_cec_server hal_tv_cec_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_tv_cec_client hal_tv_cec_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_tv_cec_server hal_tv_cec_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_tv_cec_client hal_tv_cec_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_tv_cec_server hal_tv_cec_client:fd use;
#line 3
#line 5
allow hal_tv_cec_client hal_tv_cec_hwservice:hwservice_manager find;
#line 5
#line 5
allow hal_tv_cec_server hal_tv_cec_hwservice:hwservice_manager { add find };
#line 5
allow hal_tv_cec_server hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hal_tv_cec_server } hal_tv_cec_hwservice:hwservice_manager add;
#line 5
#line 5
#line 5
#line 5
#line 1 "system/sepolicy/public/hal_tv_hdmi_cec.te"
# Binder IPC from clients into server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_tv_hdmi_cec_client hal_tv_hdmi_cec_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_tv_hdmi_cec_server hal_tv_hdmi_cec_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_tv_hdmi_cec_client hal_tv_hdmi_cec_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_tv_hdmi_cec_server hal_tv_hdmi_cec_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_tv_hdmi_cec_client hal_tv_hdmi_cec_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_tv_hdmi_cec_server hal_tv_hdmi_cec_client:fd use;
#line 3
#line 4
# Call the servicemanager and transfer references to it.
#line 4
allow hal_tv_hdmi_cec_client servicemanager:binder { call transfer };
#line 4
# Allow servicemanager to send out callbacks
#line 4
allow servicemanager hal_tv_hdmi_cec_client:binder { call transfer };
#line 4
# servicemanager performs getpidcon on clients.
#line 4
allow servicemanager hal_tv_hdmi_cec_client:dir search;
#line 4
allow servicemanager hal_tv_hdmi_cec_client:file { read open };
#line 4
allow servicemanager hal_tv_hdmi_cec_client:process getattr;
#line 4
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 4
# all domains in domain.te.
#line 4
#line 5
# Call the servicemanager and transfer references to it.
#line 5
allow hal_tv_hdmi_cec_server servicemanager:binder { call transfer };
#line 5
# Allow servicemanager to send out callbacks
#line 5
allow servicemanager hal_tv_hdmi_cec_server:binder { call transfer };
#line 5
# servicemanager performs getpidcon on clients.
#line 5
allow servicemanager hal_tv_hdmi_cec_server:dir search;
#line 5
allow servicemanager hal_tv_hdmi_cec_server:file { read open };
#line 5
allow servicemanager hal_tv_hdmi_cec_server:process getattr;
#line 5
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 5
# all domains in domain.te.
#line 5
#line 7
allow hal_tv_hdmi_cec_client hal_tv_hdmi_cec_service:service_manager find;
#line 7
#line 7
allow hal_tv_hdmi_cec_server hal_tv_hdmi_cec_service:service_manager { add find };
#line 7
neverallow { domain -hal_tv_hdmi_cec_server } hal_tv_hdmi_cec_service:service_manager add;
#line 7
#line 7
# On debug builds with root, allow binder services to use binder over TCP.
#line 7
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 7
#line 7
#line 7
#line 7
#line 7
#line 1 "system/sepolicy/public/hal_tv_hdmi_connection.te"
# Binder IPC from clients into server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_tv_hdmi_connection_client hal_tv_hdmi_connection_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_tv_hdmi_connection_server hal_tv_hdmi_connection_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_tv_hdmi_connection_client hal_tv_hdmi_connection_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_tv_hdmi_connection_server hal_tv_hdmi_connection_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_tv_hdmi_connection_client hal_tv_hdmi_connection_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_tv_hdmi_connection_server hal_tv_hdmi_connection_client:fd use;
#line 3
#line 4
# Call the servicemanager and transfer references to it.
#line 4
allow hal_tv_hdmi_connection_client servicemanager:binder { call transfer };
#line 4
# Allow servicemanager to send out callbacks
#line 4
allow servicemanager hal_tv_hdmi_connection_client:binder { call transfer };
#line 4
# servicemanager performs getpidcon on clients.
#line 4
allow servicemanager hal_tv_hdmi_connection_client:dir search;
#line 4
allow servicemanager hal_tv_hdmi_connection_client:file { read open };
#line 4
allow servicemanager hal_tv_hdmi_connection_client:process getattr;
#line 4
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 4
# all domains in domain.te.
#line 4
#line 5
# Call the servicemanager and transfer references to it.
#line 5
allow hal_tv_hdmi_connection_server servicemanager:binder { call transfer };
#line 5
# Allow servicemanager to send out callbacks
#line 5
allow servicemanager hal_tv_hdmi_connection_server:binder { call transfer };
#line 5
# servicemanager performs getpidcon on clients.
#line 5
allow servicemanager hal_tv_hdmi_connection_server:dir search;
#line 5
allow servicemanager hal_tv_hdmi_connection_server:file { read open };
#line 5
allow servicemanager hal_tv_hdmi_connection_server:process getattr;
#line 5
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 5
# all domains in domain.te.
#line 5
#line 7
allow hal_tv_hdmi_connection_client hal_tv_hdmi_connection_service:service_manager find;
#line 7
#line 7
allow hal_tv_hdmi_connection_server hal_tv_hdmi_connection_service:service_manager { add find };
#line 7
neverallow { domain -hal_tv_hdmi_connection_server } hal_tv_hdmi_connection_service:service_manager add;
#line 7
#line 7
# On debug builds with root, allow binder services to use binder over TCP.
#line 7
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 7
#line 7
#line 7
#line 7
#line 7
#line 1 "system/sepolicy/public/hal_tv_hdmi_earc.te"
# Binder IPC from clients into server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_tv_hdmi_earc_client hal_tv_hdmi_earc_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_tv_hdmi_earc_server hal_tv_hdmi_earc_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_tv_hdmi_earc_client hal_tv_hdmi_earc_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_tv_hdmi_earc_server hal_tv_hdmi_earc_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_tv_hdmi_earc_client hal_tv_hdmi_earc_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_tv_hdmi_earc_server hal_tv_hdmi_earc_client:fd use;
#line 3
#line 4
# Call the servicemanager and transfer references to it.
#line 4
allow hal_tv_hdmi_earc_client servicemanager:binder { call transfer };
#line 4
# Allow servicemanager to send out callbacks
#line 4
allow servicemanager hal_tv_hdmi_earc_client:binder { call transfer };
#line 4
# servicemanager performs getpidcon on clients.
#line 4
allow servicemanager hal_tv_hdmi_earc_client:dir search;
#line 4
allow servicemanager hal_tv_hdmi_earc_client:file { read open };
#line 4
allow servicemanager hal_tv_hdmi_earc_client:process getattr;
#line 4
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 4
# all domains in domain.te.
#line 4
#line 5
# Call the servicemanager and transfer references to it.
#line 5
allow hal_tv_hdmi_earc_server servicemanager:binder { call transfer };
#line 5
# Allow servicemanager to send out callbacks
#line 5
allow servicemanager hal_tv_hdmi_earc_server:binder { call transfer };
#line 5
# servicemanager performs getpidcon on clients.
#line 5
allow servicemanager hal_tv_hdmi_earc_server:dir search;
#line 5
allow servicemanager hal_tv_hdmi_earc_server:file { read open };
#line 5
allow servicemanager hal_tv_hdmi_earc_server:process getattr;
#line 5
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 5
# all domains in domain.te.
#line 5
#line 7
allow hal_tv_hdmi_earc_client hal_tv_hdmi_earc_service:service_manager find;
#line 7
#line 7
allow hal_tv_hdmi_earc_server hal_tv_hdmi_earc_service:service_manager { add find };
#line 7
neverallow { domain -hal_tv_hdmi_earc_server } hal_tv_hdmi_earc_service:service_manager add;
#line 7
#line 7
# On debug builds with root, allow binder services to use binder over TCP.
#line 7
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 7
#line 7
#line 7
#line 7
#line 7
#line 1 "system/sepolicy/public/hal_tv_input.te"
# HwBinder IPC from clients into server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_tv_input_client hal_tv_input_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_tv_input_server hal_tv_input_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_tv_input_client hal_tv_input_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_tv_input_server hal_tv_input_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_tv_input_client hal_tv_input_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_tv_input_server hal_tv_input_client:fd use;
#line 3
#line 5
allow hal_tv_input_client hal_tv_input_hwservice:hwservice_manager find;
#line 5
#line 5
allow hal_tv_input_server hal_tv_input_hwservice:hwservice_manager { add find };
#line 5
allow hal_tv_input_server hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hal_tv_input_server } hal_tv_input_hwservice:hwservice_manager add;
#line 5
#line 5
#line 5
#line 5
#line 6
allow hal_tv_input_client hal_tv_input_service:service_manager find;
#line 6
#line 6
allow hal_tv_input_server hal_tv_input_service:service_manager { add find };
#line 6
neverallow { domain -hal_tv_input_server } hal_tv_input_service:service_manager add;
#line 6
#line 6
# On debug builds with root, allow binder services to use binder over TCP.
#line 6
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 6
#line 6
#line 6
#line 6
#line 6
#line 8
# Call the server domain and optionally transfer references to it.
#line 8
allow hal_tv_input_server servicemanager:binder { call transfer };
#line 8
# Allow the serverdomain to transfer references to the client on the reply.
#line 8
allow servicemanager hal_tv_input_server:binder transfer;
#line 8
# Receive and use open files from the server.
#line 8
allow hal_tv_input_server servicemanager:fd use;
#line 8
#line 9
# Call the server domain and optionally transfer references to it.
#line 9
allow hal_tv_input_client servicemanager:binder { call transfer };
#line 9
# Allow the serverdomain to transfer references to the client on the reply.
#line 9
allow servicemanager hal_tv_input_client:binder transfer;
#line 9
# Receive and use open files from the server.
#line 9
allow hal_tv_input_client servicemanager:fd use;
#line 9
#line 1 "system/sepolicy/public/hal_tv_tuner.te"
#line 1
# Call the server domain and optionally transfer references to it.
#line 1
allow hal_tv_tuner_client hal_tv_tuner_server:binder { call transfer };
#line 1
# Allow the serverdomain to transfer references to the client on the reply.
#line 1
allow hal_tv_tuner_server hal_tv_tuner_client:binder transfer;
#line 1
# Receive and use open files from the server.
#line 1
allow hal_tv_tuner_client hal_tv_tuner_server:fd use;
#line 1
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_tv_tuner_server hal_tv_tuner_client:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_tv_tuner_client hal_tv_tuner_server:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_tv_tuner_server hal_tv_tuner_client:fd use;
#line 2
#line 4
allow hal_tv_tuner_client hal_tv_tuner_hwservice:hwservice_manager find;
#line 4
#line 4
allow hal_tv_tuner_server hal_tv_tuner_hwservice:hwservice_manager { add find };
#line 4
allow hal_tv_tuner_server hidl_base_hwservice:hwservice_manager add;
#line 4
neverallow { domain -hal_tv_tuner_server } hal_tv_tuner_hwservice:hwservice_manager add;
#line 4
#line 4
#line 4
#line 4
#line 5
allow hal_tv_tuner_client hal_tv_tuner_service:service_manager find;
#line 5
#line 5
allow hal_tv_tuner_server hal_tv_tuner_service:service_manager { add find };
#line 5
neverallow { domain -hal_tv_tuner_server } hal_tv_tuner_service:service_manager add;
#line 5
#line 5
# On debug builds with root, allow binder services to use binder over TCP.
#line 5
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 5
#line 5
#line 5
#line 5
#line 5
#line 7
# Call the server domain and optionally transfer references to it.
#line 7
allow hal_tv_tuner_server servicemanager:binder { call transfer };
#line 7
# Allow the serverdomain to transfer references to the client on the reply.
#line 7
allow servicemanager hal_tv_tuner_server:binder transfer;
#line 7
# Receive and use open files from the server.
#line 7
allow hal_tv_tuner_server servicemanager:fd use;
#line 7
#line 8
# Call the server domain and optionally transfer references to it.
#line 8
allow hal_tv_tuner_client servicemanager:binder { call transfer };
#line 8
# Allow the serverdomain to transfer references to the client on the reply.
#line 8
allow servicemanager hal_tv_tuner_client:binder transfer;
#line 8
# Receive and use open files from the server.
#line 8
allow hal_tv_tuner_client servicemanager:fd use;
#line 8
#line 1 "system/sepolicy/public/hal_usb.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_usb_client hal_usb_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_usb_server hal_usb_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_usb_client hal_usb_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_usb_server hal_usb_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_usb_client hal_usb_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_usb_server hal_usb_client:fd use;
#line 3
#line 5
allow hal_usb_client hal_usb_service:service_manager find;
#line 5
#line 5
allow hal_usb_server hal_usb_service:service_manager { add find };
#line 5
neverallow { domain -hal_usb_server } hal_usb_service:service_manager add;
#line 5
#line 5
# On debug builds with root, allow binder services to use binder over TCP.
#line 5
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 5
#line 5
#line 5
#line 5
#line 5
#line 6
# Call the server domain and optionally transfer references to it.
#line 6
allow hal_usb_server servicemanager:binder { call transfer };
#line 6
# Allow the serverdomain to transfer references to the client on the reply.
#line 6
allow servicemanager hal_usb_server:binder transfer;
#line 6
# Receive and use open files from the server.
#line 6
allow hal_usb_server servicemanager:fd use;
#line 6
#line 8
allow hal_usb_client hal_usb_hwservice:hwservice_manager find;
#line 8
#line 8
allow hal_usb_server hal_usb_hwservice:hwservice_manager { add find };
#line 8
allow hal_usb_server hidl_base_hwservice:hwservice_manager add;
#line 8
neverallow { domain -hal_usb_server } hal_usb_hwservice:hwservice_manager add;
#line 8
#line 8
#line 8
#line 8
allow hal_usb self:netlink_kobject_uevent_socket create;
allow hal_usb self:netlink_kobject_uevent_socket setopt;
allow hal_usb self:netlink_kobject_uevent_socket getopt;
allow hal_usb self:netlink_kobject_uevent_socket bind;
allow hal_usb self:netlink_kobject_uevent_socket read;
allow hal_usb sysfs:dir open;
allow hal_usb sysfs:dir read;
allow hal_usb sysfs:file read;
allow hal_usb sysfs:file open;
allow hal_usb sysfs:file write;
allow hal_usb sysfs:file getattr;
#line 1 "system/sepolicy/public/hal_usb_gadget.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_usb_gadget_client hal_usb_gadget_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_usb_gadget_server hal_usb_gadget_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_usb_gadget_client hal_usb_gadget_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_usb_gadget_server hal_usb_gadget_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_usb_gadget_client hal_usb_gadget_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_usb_gadget_server hal_usb_gadget_client:fd use;
#line 3
#line 5
allow hal_usb_gadget_client hal_usb_gadget_service:service_manager find;
#line 5
#line 5
allow hal_usb_gadget_server hal_usb_gadget_service:service_manager { add find };
#line 5
neverallow { domain -hal_usb_gadget_server } hal_usb_gadget_service:service_manager add;
#line 5
#line 5
# On debug builds with root, allow binder services to use binder over TCP.
#line 5
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 5
#line 5
#line 5
#line 5
#line 5
#line 6
# Call the server domain and optionally transfer references to it.
#line 6
allow hal_usb_gadget_server servicemanager:binder { call transfer };
#line 6
# Allow the serverdomain to transfer references to the client on the reply.
#line 6
allow servicemanager hal_usb_gadget_server:binder transfer;
#line 6
# Receive and use open files from the server.
#line 6
allow hal_usb_gadget_server servicemanager:fd use;
#line 6
#line 8
allow hal_usb_gadget_client hal_usb_gadget_hwservice:hwservice_manager find;
#line 8
#line 8
allow hal_usb_gadget_server hal_usb_gadget_hwservice:hwservice_manager { add find };
#line 8
allow hal_usb_gadget_server hidl_base_hwservice:hwservice_manager add;
#line 8
neverallow { domain -hal_usb_gadget_server } hal_usb_gadget_hwservice:hwservice_manager add;
#line 8
#line 8
#line 8
#line 8
# Configuring usb gadget functions
allow hal_usb_gadget_server configfs:lnk_file { read create unlink};
allow hal_usb_gadget_server configfs:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow hal_usb_gadget_server configfs:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow hal_usb_gadget_server functionfs:dir { read search };
allow hal_usb_gadget_server functionfs:file read;
allow hal_usb_gadget_server proc_interrupts:file { getattr open read ioctl lock map watch watch_reads };
# Read access to ro.usb.uvc.enabled
#line 19
allow hal_usb_gadget_server usb_uvc_enabled_prop:file { getattr open read map };
#line 19
#line 1 "system/sepolicy/public/hal_uwb.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_uwb_client hal_uwb_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_uwb_server hal_uwb_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_uwb_client hal_uwb_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_uwb_server hal_uwb_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_uwb_client hal_uwb_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_uwb_server hal_uwb_client:fd use;
#line 3
#line 5
allow hal_uwb_client hal_uwb_service:service_manager find;
#line 5
#line 5
allow hal_uwb_server hal_uwb_service:service_manager { add find };
#line 5
neverallow { domain -hal_uwb_server } hal_uwb_service:service_manager add;
#line 5
#line 5
# On debug builds with root, allow binder services to use binder over TCP.
#line 5
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 5
#line 5
#line 5
#line 5
#line 5
#line 7
# Call the server domain and optionally transfer references to it.
#line 7
allow hal_uwb_server servicemanager:binder { call transfer };
#line 7
# Allow the serverdomain to transfer references to the client on the reply.
#line 7
allow servicemanager hal_uwb_server:binder transfer;
#line 7
# Receive and use open files from the server.
#line 7
allow hal_uwb_server servicemanager:fd use;
#line 7
#line 8
# Call the server domain and optionally transfer references to it.
#line 8
allow hal_uwb_client servicemanager:binder { call transfer };
#line 8
# Allow the serverdomain to transfer references to the client on the reply.
#line 8
allow servicemanager hal_uwb_client:binder transfer;
#line 8
# Receive and use open files from the server.
#line 8
allow hal_uwb_client servicemanager:fd use;
#line 8
#line 1 "system/sepolicy/public/hal_vehicle.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_vehicle_client hal_vehicle_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_vehicle_server hal_vehicle_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_vehicle_client hal_vehicle_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_vehicle_server hal_vehicle_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_vehicle_client hal_vehicle_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_vehicle_server hal_vehicle_client:fd use;
#line 3
#line 6
allow hal_vehicle_client hal_vehicle_hwservice:hwservice_manager find;
#line 6
#line 6
allow hal_vehicle_server hal_vehicle_hwservice:hwservice_manager { add find };
#line 6
allow hal_vehicle_server hidl_base_hwservice:hwservice_manager add;
#line 6
neverallow { domain -hal_vehicle_server } hal_vehicle_hwservice:hwservice_manager add;
#line 6
#line 6
#line 6
#line 6
#line 7
allow hal_vehicle_client hal_vehicle_service:service_manager find;
#line 7
#line 7
allow hal_vehicle_server hal_vehicle_service:service_manager { add find };
#line 7
neverallow { domain -hal_vehicle_server } hal_vehicle_service:service_manager add;
#line 7
#line 7
# On debug builds with root, allow binder services to use binder over TCP.
#line 7
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 7
#line 7
#line 7
#line 7
#line 7
#line 1 "system/sepolicy/public/hal_vibrator.te"
# HwBinder IPC client/server
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_vibrator_client hal_vibrator_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_vibrator_server hal_vibrator_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_vibrator_client hal_vibrator_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_vibrator_server hal_vibrator_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_vibrator_client hal_vibrator_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_vibrator_server hal_vibrator_client:fd use;
#line 3
;
#line 5
allow hal_vibrator_client hal_vibrator_hwservice:hwservice_manager find;
#line 5
#line 5
allow hal_vibrator_server hal_vibrator_hwservice:hwservice_manager { add find };
#line 5
allow hal_vibrator_server hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hal_vibrator_server } hal_vibrator_hwservice:hwservice_manager add;
#line 5
#line 5
#line 5
#line 5
#line 6
allow hal_vibrator_client hal_vibrator_service:service_manager find;
#line 6
#line 6
allow hal_vibrator_server hal_vibrator_service:service_manager { add find };
#line 6
neverallow { domain -hal_vibrator_server } hal_vibrator_service:service_manager add;
#line 6
#line 6
# On debug builds with root, allow binder services to use binder over TCP.
#line 6
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 6
#line 6
#line 6
#line 6
#line 6
#line 8
# Call the server domain and optionally transfer references to it.
#line 8
allow hal_vibrator_server servicemanager:binder { call transfer };
#line 8
# Allow the serverdomain to transfer references to the client on the reply.
#line 8
allow servicemanager hal_vibrator_server:binder transfer;
#line 8
# Receive and use open files from the server.
#line 8
allow hal_vibrator_server servicemanager:fd use;
#line 8
allow hal_vibrator_server dumpstate:fifo_file write;
# vibrator sysfs rw access
allow hal_vibrator sysfs_vibrator:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow hal_vibrator sysfs_vibrator:dir search;
# Allow HAL vibrator to control some parameters of a vibration, such as scaling.
allow hal_vibrator fwk_vibrator_control_service:service_manager find;
#line 1 "system/sepolicy/public/hal_vr.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_vr_client hal_vr_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_vr_server hal_vr_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_vr_client hal_vr_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_vr_server hal_vr_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_vr_client hal_vr_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_vr_server hal_vr_client:fd use;
#line 3
#line 5
allow hal_vr_client hal_vr_hwservice:hwservice_manager find;
#line 5
#line 5
allow hal_vr_server hal_vr_hwservice:hwservice_manager { add find };
#line 5
allow hal_vr_server hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hal_vr_server } hal_vr_hwservice:hwservice_manager add;
#line 5
#line 5
#line 5
#line 5
#line 1 "system/sepolicy/public/hal_weaver.te"
# HwBinder IPC from client to server
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_weaver_client hal_weaver_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_weaver_server hal_weaver_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_weaver_client hal_weaver_server:fd use;
#line 2
#line 4
allow hal_weaver_client hal_weaver_hwservice:hwservice_manager find;
#line 4
#line 4
allow hal_weaver_server hal_weaver_hwservice:hwservice_manager { add find };
#line 4
allow hal_weaver_server hidl_base_hwservice:hwservice_manager add;
#line 4
neverallow { domain -hal_weaver_server } hal_weaver_hwservice:hwservice_manager add;
#line 4
#line 4
#line 4
#line 4
#line 5
allow hal_weaver_client hal_weaver_service:service_manager find;
#line 5
#line 5
allow hal_weaver_server hal_weaver_service:service_manager { add find };
#line 5
neverallow { domain -hal_weaver_server } hal_weaver_service:service_manager add;
#line 5
#line 5
# On debug builds with root, allow binder services to use binder over TCP.
#line 5
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 5
#line 5
#line 5
#line 5
#line 5
#line 7
# Call the server domain and optionally transfer references to it.
#line 7
allow hal_weaver_server servicemanager:binder { call transfer };
#line 7
# Allow the serverdomain to transfer references to the client on the reply.
#line 7
allow servicemanager hal_weaver_server:binder transfer;
#line 7
# Receive and use open files from the server.
#line 7
allow hal_weaver_server servicemanager:fd use;
#line 7
#line 1 "system/sepolicy/public/hal_wifi.te"
# HwBinder IPC from client to server, and callbacks
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_wifi_client hal_wifi_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_wifi_server hal_wifi_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_wifi_client hal_wifi_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_wifi_server hal_wifi_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_wifi_client hal_wifi_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_wifi_server hal_wifi_client:fd use;
#line 3
#line 5
allow hal_wifi_client hal_wifi_hwservice:hwservice_manager find;
#line 5
#line 5
allow hal_wifi_server hal_wifi_hwservice:hwservice_manager { add find };
#line 5
allow hal_wifi_server hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hal_wifi_server } hal_wifi_hwservice:hwservice_manager add;
#line 5
#line 5
#line 5
#line 5
#line 6
allow hal_wifi_client hal_wifi_service:service_manager find;
#line 6
#line 6
allow hal_wifi_server hal_wifi_service:service_manager { add find };
#line 6
neverallow { domain -hal_wifi_server } hal_wifi_service:service_manager add;
#line 6
#line 6
# On debug builds with root, allow binder services to use binder over TCP.
#line 6
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 6
#line 6
#line 6
#line 6
#line 6
#line 8
# Call the servicemanager and transfer references to it.
#line 8
allow hal_wifi_server servicemanager:binder { call transfer };
#line 8
# Allow servicemanager to send out callbacks
#line 8
allow servicemanager hal_wifi_server:binder { call transfer };
#line 8
# servicemanager performs getpidcon on clients.
#line 8
allow servicemanager hal_wifi_server:dir search;
#line 8
allow servicemanager hal_wifi_server:file { read open };
#line 8
allow servicemanager hal_wifi_server:process getattr;
#line 8
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 8
# all domains in domain.te.
#line 8
#line 10
allow hal_wifi proc_net_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 10
allow hal_wifi proc_net_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 10
#line 11
allow hal_wifi sysfs_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 11
allow hal_wifi sysfs_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 11
#line 13
#line 13
allow hal_wifi_server property_socket:sock_file write;
#line 13
allow hal_wifi_server init:unix_stream_socket connectto;
#line 13
#line 13
allow hal_wifi_server wifi_hal_prop:property_service set;
#line 13
#line 13
allow hal_wifi_server wifi_hal_prop:file { getattr open read map };
#line 13
#line 13
#line 14
#line 14
allow hal_wifi property_socket:sock_file write;
#line 14
allow hal_wifi init:unix_stream_socket connectto;
#line 14
#line 14
allow hal_wifi wifi_prop:property_service set;
#line 14
#line 14
allow hal_wifi wifi_prop:file { getattr open read map };
#line 14
#line 14
# allow hal wifi set interfaces up and down and get the factory MAC
allow hal_wifi self:udp_socket { create { ioctl read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allowxperm hal_wifi self:udp_socket ioctl { 0x00008914 0x00008924 0x00008946 };
allow hal_wifi self:{ capability cap_userns } { net_admin net_raw };
# allow hal_wifi to speak to nl80211 in the kernel
allow hal_wifi self:netlink_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# newer kernels (e.g. 4.4 but not 4.1) have a new class for sockets
allow hal_wifi self:netlink_generic_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# hal_wifi writes firmware paths to this file.
allow hal_wifi sysfs_wlan_fwpath:file { { open append write lock map } };
# allow hal_wifi to access /proc/modules to check if Wi-Fi driver is loaded
allow hal_wifi proc_modules:file { getattr open read };
# Allow hal_wifi to send dump info to dumpstate
allow hal_wifi dumpstate:fifo_file write;
# allow hal_wifi to write into /data/vendor/tombstones/wifi
allow hal_wifi_server tombstone_wifi_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow hal_wifi_server tombstone_wifi_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
#line 1 "system/sepolicy/public/hal_wifi_hostapd.te"
# HwBinder IPC from client to server
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_wifi_hostapd_client hal_wifi_hostapd_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_wifi_hostapd_server hal_wifi_hostapd_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_wifi_hostapd_client hal_wifi_hostapd_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_wifi_hostapd_server hal_wifi_hostapd_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_wifi_hostapd_client hal_wifi_hostapd_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_wifi_hostapd_server hal_wifi_hostapd_client:fd use;
#line 3
#line 5
allow hal_wifi_hostapd_client hal_wifi_hostapd_hwservice:hwservice_manager find;
#line 5
#line 5
allow hal_wifi_hostapd_server hal_wifi_hostapd_hwservice:hwservice_manager { add find };
#line 5
allow hal_wifi_hostapd_server hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hal_wifi_hostapd_server } hal_wifi_hostapd_hwservice:hwservice_manager add;
#line 5
#line 5
#line 5
#line 5
#line 6
allow hal_wifi_hostapd_client hal_wifi_hostapd_service:service_manager find;
#line 6
#line 6
allow hal_wifi_hostapd_server hal_wifi_hostapd_service:service_manager { add find };
#line 6
neverallow { domain -hal_wifi_hostapd_server } hal_wifi_hostapd_service:service_manager add;
#line 6
#line 6
# On debug builds with root, allow binder services to use binder over TCP.
#line 6
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 6
#line 6
#line 6
#line 6
#line 6
#line 8
# Call the servicemanager and transfer references to it.
#line 8
allow hal_wifi_hostapd_server servicemanager:binder { call transfer };
#line 8
# Allow servicemanager to send out callbacks
#line 8
allow servicemanager hal_wifi_hostapd_server:binder { call transfer };
#line 8
# servicemanager performs getpidcon on clients.
#line 8
allow servicemanager hal_wifi_hostapd_server:dir search;
#line 8
allow servicemanager hal_wifi_hostapd_server:file { read open };
#line 8
allow servicemanager hal_wifi_hostapd_server:process getattr;
#line 8
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 8
# all domains in domain.te.
#line 8
allow hal_wifi_hostapd_server dumpstate:fifo_file write;
allow hal_wifi_hostapd_server self:{ capability cap_userns } { net_admin net_raw };
allow hal_wifi_hostapd_server sysfs_net:dir search;
# Allow hal_wifi_hostapd to access /proc/net/psched
allow hal_wifi_hostapd_server proc_net_type:file { getattr open read };
# Various socket permissions.
allowxperm hal_wifi_hostapd_server self:udp_socket ioctl
#line 20
{
#line 20
# qualcomm rmnet ioctls
#line 20
0x00006900 0x00006902
#line 20
# socket ioctls
#line 20
0x0000890b 0x0000890c 0x0000890d 0x00008911 0x00008914 0x00008916
#line 20
0x00008918 0x0000891a 0x0000891c 0x0000891d 0x0000891e 0x0000891f
#line 20
0x00008920 0x00008922 0x00008923 0x00008924 0x00008925 0x00008926
#line 20
0x00008927 0x00008929 0x00008930 0x00008931 0x00008932
#line 20
0x00008934 0x00008935 0x00008936 0x00008937 0x00008939 0x00008940 0x00008941
#line 20
0x00008943 0x00008946 0x00008947 0x00008948 0x00008949 0x0000894a
#line 20
0x0000894b 0x00008953 0x00008954 0x00008955 0x00008960 0x00008961 0x00008962 0x00008970
#line 20
0x00008971 0x00008980 0x00008981 0x00008982 0x00008983 0x00008990
#line 20
0x00008991 0x00008992 0x00008993 0x00008994
#line 20
0x00008995 0x000089a0 0x000089a1 0x000089a2 0x000089a3 0x000089b0
#line 20
# device and protocol specific ioctls
#line 20
0x000089f0-0x000089ff
#line 20
0x000089e0-0x000089ef
#line 20
# Wireless extension ioctls
#line 20
0x00008b00 0x00008b02 0x00008b04 0x00008b06 0x00008b08 0x00008b0a
#line 20
0x00008b0c 0x00008b0e 0x00008b10 0x00008b14 0x00008b15 0x00008b16 0x00008b17
#line 20
0x00008b18 0x00008b19 0x00008b1a 0x00008b1b 0x00008b1c 0x00008b1d
#line 20
0x00008b20 0x00008b22 0x00008b24 0x00008b26 0x00008b28 0x00008b2a
#line 20
0x00008b2b 0x00008b2c 0x00008b30 0x00008b31 0x00008b32 0x00008b33
#line 20
0x00008b34 0x00008b35 0x00008b36
#line 20
# Dev private ioctl i.e. hardware specific ioctls
#line 20
0x00008be0-0x00008bff
#line 20
};
allow hal_wifi_hostapd_server self:netlink_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow hal_wifi_hostapd_server self:netlink_generic_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow hal_wifi_hostapd_server self:packet_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow hal_wifi_hostapd_server self:netlink_route_socket nlmsg_write;
###
### neverallow rules
###
# hal_wifi_hostapd should not trust any data from sdcards
neverallow hal_wifi_hostapd_server { sdcard_type fuse }:dir ~getattr;
neverallow hal_wifi_hostapd_server { sdcard_type fuse }:file *;
#line 1 "system/sepolicy/public/hal_wifi_supplicant.te"
# HwBinder IPC from client to server
#line 2
# Call the server domain and optionally transfer references to it.
#line 2
allow hal_wifi_supplicant_client hal_wifi_supplicant_server:binder { call transfer };
#line 2
# Allow the serverdomain to transfer references to the client on the reply.
#line 2
allow hal_wifi_supplicant_server hal_wifi_supplicant_client:binder transfer;
#line 2
# Receive and use open files from the server.
#line 2
allow hal_wifi_supplicant_client hal_wifi_supplicant_server:fd use;
#line 2
#line 3
# Call the server domain and optionally transfer references to it.
#line 3
allow hal_wifi_supplicant_server hal_wifi_supplicant_client:binder { call transfer };
#line 3
# Allow the serverdomain to transfer references to the client on the reply.
#line 3
allow hal_wifi_supplicant_client hal_wifi_supplicant_server:binder transfer;
#line 3
# Receive and use open files from the server.
#line 3
allow hal_wifi_supplicant_server hal_wifi_supplicant_client:fd use;
#line 3
#line 5
allow hal_wifi_supplicant_client hal_wifi_supplicant_hwservice:hwservice_manager find;
#line 5
#line 5
allow hal_wifi_supplicant_server hal_wifi_supplicant_hwservice:hwservice_manager { add find };
#line 5
allow hal_wifi_supplicant_server hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hal_wifi_supplicant_server } hal_wifi_supplicant_hwservice:hwservice_manager add;
#line 5
#line 5
#line 5
#line 5
#line 6
allow hal_wifi_supplicant_client hal_wifi_supplicant_service:service_manager find;
#line 6
#line 6
allow hal_wifi_supplicant_server hal_wifi_supplicant_service:service_manager { add find };
#line 6
neverallow { domain -hal_wifi_supplicant_server } hal_wifi_supplicant_service:service_manager add;
#line 6
#line 6
# On debug builds with root, allow binder services to use binder over TCP.
#line 6
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 6
#line 6
#line 6
#line 6
#line 6
# in addition to ioctls allowlisted for all domains, grant hal_wifi_supplicant priv_sock_ioctls.
allowxperm hal_wifi_supplicant self:udp_socket ioctl
#line 9
{
#line 9
# qualcomm rmnet ioctls
#line 9
0x00006900 0x00006902
#line 9
# socket ioctls
#line 9
0x0000890b 0x0000890c 0x0000890d 0x00008911 0x00008914 0x00008916
#line 9
0x00008918 0x0000891a 0x0000891c 0x0000891d 0x0000891e 0x0000891f
#line 9
0x00008920 0x00008922 0x00008923 0x00008924 0x00008925 0x00008926
#line 9
0x00008927 0x00008929 0x00008930 0x00008931 0x00008932
#line 9
0x00008934 0x00008935 0x00008936 0x00008937 0x00008939 0x00008940 0x00008941
#line 9
0x00008943 0x00008946 0x00008947 0x00008948 0x00008949 0x0000894a
#line 9
0x0000894b 0x00008953 0x00008954 0x00008955 0x00008960 0x00008961 0x00008962 0x00008970
#line 9
0x00008971 0x00008980 0x00008981 0x00008982 0x00008983 0x00008990
#line 9
0x00008991 0x00008992 0x00008993 0x00008994
#line 9
0x00008995 0x000089a0 0x000089a1 0x000089a2 0x000089a3 0x000089b0
#line 9
# device and protocol specific ioctls
#line 9
0x000089f0-0x000089ff
#line 9
0x000089e0-0x000089ef
#line 9
# Wireless extension ioctls
#line 9
0x00008b00 0x00008b02 0x00008b04 0x00008b06 0x00008b08 0x00008b0a
#line 9
0x00008b0c 0x00008b0e 0x00008b10 0x00008b14 0x00008b15 0x00008b16 0x00008b17
#line 9
0x00008b18 0x00008b19 0x00008b1a 0x00008b1b 0x00008b1c 0x00008b1d
#line 9
0x00008b20 0x00008b22 0x00008b24 0x00008b26 0x00008b28 0x00008b2a
#line 9
0x00008b2b 0x00008b2c 0x00008b30 0x00008b31 0x00008b32 0x00008b33
#line 9
0x00008b34 0x00008b35 0x00008b36
#line 9
# Dev private ioctl i.e. hardware specific ioctls
#line 9
0x00008be0-0x00008bff
#line 9
};
#line 11
allow hal_wifi_supplicant sysfs_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 11
allow hal_wifi_supplicant sysfs_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 11
#line 12
allow hal_wifi_supplicant proc_net_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 12
allow hal_wifi_supplicant proc_net_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 12
allow hal_wifi_supplicant self:{ capability cap_userns } { setuid net_admin setgid net_raw };
allow hal_wifi_supplicant cgroup:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow hal_wifi_supplicant cgroup_v2:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow hal_wifi_supplicant self:netlink_route_socket nlmsg_write;
allow hal_wifi_supplicant self:netlink_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow hal_wifi_supplicant self:netlink_generic_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow hal_wifi_supplicant self:packet_socket { create { ioctl read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allowxperm hal_wifi_supplicant self:packet_socket ioctl {
#line 21
{
#line 21
# Socket ioctls for gathering information about the interface
#line 21
0x00008906 0x00008907
#line 21
0x00008910 0x00008912 0x00008913 0x00008915 0x00008917 0x00008919
#line 21
0x0000891b 0x00008921 0x00008933 0x00008938 0x00008942
#line 21
# Wireless extension ioctls. Primarily get functions.
#line 21
0x00008b01 0x00008b05 0x00008b07 0x00008b09 0x00008b0b 0x00008b0d
#line 21
0x00008b0f 0x00008b11 0x00008b12 0x00008b13 0x00008b21 0x00008b23
#line 21
0x00008b25 0x00008b27 0x00008b29 0x00008b2d
#line 21
}
#line 21
{
#line 21
# qualcomm rmnet ioctls
#line 21
0x00006900 0x00006902
#line 21
# socket ioctls
#line 21
0x0000890b 0x0000890c 0x0000890d 0x00008911 0x00008914 0x00008916
#line 21
0x00008918 0x0000891a 0x0000891c 0x0000891d 0x0000891e 0x0000891f
#line 21
0x00008920 0x00008922 0x00008923 0x00008924 0x00008925 0x00008926
#line 21
0x00008927 0x00008929 0x00008930 0x00008931 0x00008932
#line 21
0x00008934 0x00008935 0x00008936 0x00008937 0x00008939 0x00008940 0x00008941
#line 21
0x00008943 0x00008946 0x00008947 0x00008948 0x00008949 0x0000894a
#line 21
0x0000894b 0x00008953 0x00008954 0x00008955 0x00008960 0x00008961 0x00008962 0x00008970
#line 21
0x00008971 0x00008980 0x00008981 0x00008982 0x00008983 0x00008990
#line 21
0x00008991 0x00008992 0x00008993 0x00008994
#line 21
0x00008995 0x000089a0 0x000089a1 0x000089a2 0x000089a3 0x000089b0
#line 21
# device and protocol specific ioctls
#line 21
0x000089f0-0x000089ff
#line 21
0x000089e0-0x000089ef
#line 21
# Wireless extension ioctls
#line 21
0x00008b00 0x00008b02 0x00008b04 0x00008b06 0x00008b08 0x00008b0a
#line 21
0x00008b0c 0x00008b0e 0x00008b10 0x00008b14 0x00008b15 0x00008b16 0x00008b17
#line 21
0x00008b18 0x00008b19 0x00008b1a 0x00008b1b 0x00008b1c 0x00008b1d
#line 21
0x00008b20 0x00008b22 0x00008b24 0x00008b26 0x00008b28 0x00008b2a
#line 21
0x00008b2b 0x00008b2c 0x00008b30 0x00008b31 0x00008b32 0x00008b33
#line 21
0x00008b34 0x00008b35 0x00008b36
#line 21
# Dev private ioctl i.e. hardware specific ioctls
#line 21
0x00008be0-0x00008bff
#line 21
} {
#line 21
0x00005411 0x00005451 0x00005450 0x00005401 0x00005402 0x00005403 0x00005404 0x00005413 0x00005414
#line 21
0x0000540e 0x0000540b 0x00005410 0x0000540f
#line 21
} };
#line 23
allow keystore hal_wifi_supplicant:dir search;
#line 23
allow keystore hal_wifi_supplicant:file { read open };
#line 23
allow keystore hal_wifi_supplicant:process getattr;
#line 23
allow hal_wifi_supplicant apc_service:service_manager find;
#line 23
allow hal_wifi_supplicant keystore_service:service_manager find;
#line 23
allow hal_wifi_supplicant legacykeystore_service:service_manager find;
#line 23
#line 23
# Call the server domain and optionally transfer references to it.
#line 23
allow hal_wifi_supplicant keystore:binder { call transfer };
#line 23
# Allow the serverdomain to transfer references to the client on the reply.
#line 23
allow keystore hal_wifi_supplicant:binder transfer;
#line 23
# Receive and use open files from the server.
#line 23
allow hal_wifi_supplicant keystore:fd use;
#line 23
#line 23
#line 23
# Call the server domain and optionally transfer references to it.
#line 23
allow keystore hal_wifi_supplicant:binder { call transfer };
#line 23
# Allow the serverdomain to transfer references to the client on the reply.
#line 23
allow hal_wifi_supplicant keystore:binder transfer;
#line 23
# Receive and use open files from the server.
#line 23
allow keystore hal_wifi_supplicant:fd use;
#line 23
#line 23
#line 24
# Call the servicemanager and transfer references to it.
#line 24
allow hal_wifi_supplicant_server servicemanager:binder { call transfer };
#line 24
# Allow servicemanager to send out callbacks
#line 24
allow servicemanager hal_wifi_supplicant_server:binder { call transfer };
#line 24
# servicemanager performs getpidcon on clients.
#line 24
allow servicemanager hal_wifi_supplicant_server:dir search;
#line 24
allow servicemanager hal_wifi_supplicant_server:file { read open };
#line 24
allow servicemanager hal_wifi_supplicant_server:process getattr;
#line 24
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 24
# all domains in domain.te.
#line 24
# Allow the WI-FI HAL to use keys in the keystore namespace wifi_key.
allow hal_wifi_supplicant wifi_key:keystore2_key {
get_info
use
};
###
### neverallow rules
###
# wpa_supplicant should not trust any data from sdcards
neverallow hal_wifi_supplicant_server { sdcard_type fuse }:dir ~getattr;
neverallow hal_wifi_supplicant_server { sdcard_type fuse }:file *;
#line 1 "system/sepolicy/public/healthd.te"
# healthd - battery/charger monitoring service daemon
# healthd is removed. The type is kept for backwards compatibility.
type healthd, domain;
#line 1 "system/sepolicy/public/heapprofd.te"
type heapprofd, domain, coredomain;
#line 1 "system/sepolicy/public/hwservice.te"
# hwservice types. By default most of the HALs are protected_hwservice, which means
# access from untrusted apps is prohibited.
type default_android_hwservice, hwservice_manager_type, protected_hwservice;
type fwk_camera_hwservice, hwservice_manager_type, coredomain_hwservice, protected_hwservice;
type fwk_display_hwservice, hwservice_manager_type, coredomain_hwservice, protected_hwservice;
type fwk_scheduler_hwservice, hwservice_manager_type, coredomain_hwservice, protected_hwservice;
type fwk_sensor_hwservice, hwservice_manager_type, coredomain_hwservice, protected_hwservice;
type fwk_stats_hwservice, hwservice_manager_type, coredomain_hwservice, protected_hwservice;
type fwk_automotive_display_hwservice, hwservice_manager_type, coredomain_hwservice, protected_hwservice;
type hal_atrace_hwservice, hwservice_manager_type, protected_hwservice;
type hal_audio_hwservice, hwservice_manager_type, protected_hwservice;
type hal_audiocontrol_hwservice, hwservice_manager_type, protected_hwservice;
type hal_authsecret_hwservice, hwservice_manager_type, protected_hwservice;
type hal_bluetooth_hwservice, hwservice_manager_type, protected_hwservice;
type hal_bootctl_hwservice, hwservice_manager_type, protected_hwservice;
type hal_broadcastradio_hwservice, hwservice_manager_type, protected_hwservice;
type hal_camera_hwservice, hwservice_manager_type, protected_hwservice;
type hal_can_bus_hwservice, hwservice_manager_type, protected_hwservice;
type hal_can_controller_hwservice, hwservice_manager_type, protected_hwservice;
type hal_confirmationui_hwservice, hwservice_manager_type, protected_hwservice;
type hal_contexthub_hwservice, hwservice_manager_type, protected_hwservice;
type hal_dumpstate_hwservice, hwservice_manager_type, protected_hwservice;
type hal_evs_hwservice, hwservice_manager_type, protected_hwservice;
type hal_face_hwservice, hwservice_manager_type, protected_hwservice;
type hal_fingerprint_hwservice, hwservice_manager_type, protected_hwservice;
type hal_gatekeeper_hwservice, hwservice_manager_type, protected_hwservice;
type hal_gnss_hwservice, hwservice_manager_type, protected_hwservice;
type hal_graphics_composer_hwservice, hwservice_manager_type, protected_hwservice;
type hal_health_hwservice, hwservice_manager_type, protected_hwservice;
type hal_health_storage_hwservice, hwservice_manager_type, protected_hwservice;
type hal_input_classifier_hwservice, hwservice_manager_type, protected_hwservice;
type hal_ir_hwservice, hwservice_manager_type, protected_hwservice;
type hal_keymaster_hwservice, hwservice_manager_type, protected_hwservice;
type hal_light_hwservice, hwservice_manager_type, protected_hwservice;
type hal_lowpan_hwservice, hwservice_manager_type, protected_hwservice;
type hal_memtrack_hwservice, hwservice_manager_type, protected_hwservice;
type hal_nfc_hwservice, hwservice_manager_type, protected_hwservice;
type hal_oemlock_hwservice, hwservice_manager_type, protected_hwservice;
type hal_power_hwservice, hwservice_manager_type, protected_hwservice;
type hal_power_stats_hwservice, hwservice_manager_type, protected_hwservice;
type hal_secure_element_hwservice, hwservice_manager_type, protected_hwservice;
type hal_sensors_hwservice, hwservice_manager_type, protected_hwservice;
type hal_telephony_hwservice, hwservice_manager_type, protected_hwservice;
type hal_tetheroffload_hwservice, hwservice_manager_type, protected_hwservice;
type hal_thermal_hwservice, hwservice_manager_type, protected_hwservice;
type hal_tv_cec_hwservice, hwservice_manager_type, protected_hwservice;
type hal_tv_input_hwservice, hwservice_manager_type, protected_hwservice;
type hal_tv_tuner_hwservice, hwservice_manager_type, protected_hwservice;
type hal_usb_gadget_hwservice, hwservice_manager_type, protected_hwservice;
type hal_usb_hwservice, hwservice_manager_type, protected_hwservice;
type hal_vehicle_hwservice, hwservice_manager_type, protected_hwservice;
type hal_vibrator_hwservice, hwservice_manager_type, protected_hwservice;
type hal_vr_hwservice, hwservice_manager_type, protected_hwservice;
type hal_weaver_hwservice, hwservice_manager_type, protected_hwservice;
type hal_wifi_hostapd_hwservice, hwservice_manager_type, protected_hwservice;
type hal_wifi_hwservice, hwservice_manager_type, protected_hwservice;
type hal_wifi_supplicant_hwservice, hwservice_manager_type, protected_hwservice;
type system_net_netd_hwservice, hwservice_manager_type, coredomain_hwservice, protected_hwservice;
type system_suspend_hwservice, hwservice_manager_type, coredomain_hwservice, protected_hwservice;
type system_wifi_keystore_hwservice, hwservice_manager_type, coredomain_hwservice, protected_hwservice;
# Following is the hwservices that are explicitly not marked with protected_hwservice.
# These are directly accessible from untrusted apps.
# - same process services: because they by definition run in the process
# of the client and thus have the same access as the client domain in which
# the process runs
# - coredomain_hwservice: are considered safer than ordinary hwservices which
# are from vendor partition
# - hal_configstore_ISurfaceFlingerConfigs: becuase it has specifically been
# designed for use by any domain.
# - hal_graphics_allocator_hwservice: because these operations are also offered
# by surfaceflinger Binder service, which apps are permitted to access
# - hal_omx_hwservice: because this is a HwBinder version of the mediacodec
# Binder service which apps were permitted to access.
# - hal_codec2_hwservice: because this is a newer version of hal_omx_hwservice.
# - hal_drm_hwservice: versions > API 29 are designed specifically with
# untrusted app access in mind.
type fwk_bufferhub_hwservice, hwservice_manager_type, coredomain_hwservice;
type hal_cas_hwservice, hwservice_manager_type;
type hal_codec2_hwservice, hwservice_manager_type;
type hal_configstore_ISurfaceFlingerConfigs, hwservice_manager_type;
type hal_drm_hwservice, hwservice_manager_type;
type hal_graphics_allocator_hwservice, hwservice_manager_type;
type hal_graphics_mapper_hwservice, hwservice_manager_type, same_process_hwservice;
type hal_neuralnetworks_hwservice, hwservice_manager_type;
type hal_omx_hwservice, hwservice_manager_type;
type hal_renderscript_hwservice, hwservice_manager_type, same_process_hwservice;
type hidl_allocator_hwservice, hwservice_manager_type, coredomain_hwservice;
type hidl_base_hwservice, hwservice_manager_type;
type hidl_manager_hwservice, hwservice_manager_type, coredomain_hwservice;
type hidl_memory_hwservice, hwservice_manager_type, coredomain_hwservice;
type hidl_token_hwservice, hwservice_manager_type, coredomain_hwservice;
###
### Neverallow rules
###
# hwservicemanager handles registering or looking up named services.
# It does not make sense to register or lookup something which is not a
# hwservice. Trigger a compile error if this occurs.
neverallow domain ~hwservice_manager_type:hwservice_manager { add find };
#line 1 "system/sepolicy/public/hwservicemanager.te"
# hwservicemanager - the Binder context manager for HAL services
type hwservicemanager, domain, mlstrustedsubject;
type hwservicemanager_exec, system_file_type, exec_type, file_type;
# Note that we do not use the binder_* macros here.
# hwservicemanager provides name service (aka context manager)
# for hwbinder.
# Additionally, it initiates binder IPC calls to
# clients who request service notifications. The permission
# to do this is granted in the hwbinder_use macro.
allow hwservicemanager self:binder set_context_mgr;
# Scan through /system/lib64/hw looking for installed HALs
allow hwservicemanager system_file:dir { open getattr read search ioctl lock watch watch_reads };
# Read hwservice_contexts
allow hwservicemanager hwservice_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
# Check SELinux permissions.
#line 20
#line 20
allow hwservicemanager selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 20
allow hwservicemanager selinuxfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 20
#line 20
allow hwservicemanager selinuxfs:file { open append write lock map };
#line 20
allow hwservicemanager kernel:security compute_av;
#line 20
allow hwservicemanager self:netlink_selinux_socket { read write create getattr setattr lock relabelfrom relabelto append bind connect listen accept getopt setopt shutdown recvfrom sendto name_bind };
#line 20
#line 1 "system/sepolicy/public/idmap.te"
# idmap, when executed by installd
type idmap, domain;
type idmap_exec, system_file_type, exec_type, file_type;
# Allow read + write access to /data/resource-cache
allow idmap resourcecache_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow idmap resourcecache_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
# Open and read from target and overlay apk files passed by argument.
allow idmap apk_data_file:file { getattr open read ioctl lock map watch watch_reads };
allow idmap apk_data_file:dir search;
# Allow /data/app/vmdl*.tmp, /data/app-private/vmdl*.tmp files
allow idmap { apk_tmp_file apk_private_tmp_file }:file { getattr open read ioctl lock map watch watch_reads };
allow idmap { apk_tmp_file apk_private_tmp_file }:dir search;
# Allow apps access to /vendor/app
#line 18
allow idmap vendor_app_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 18
allow idmap vendor_app_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 18
# Allow apps access to /vendor/overlay
#line 21
allow idmap vendor_overlay_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 21
allow idmap vendor_overlay_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 21
# Allow the idmap2d binary to register as a service and communicate via AIDL
#line 24
# Call the servicemanager and transfer references to it.
#line 24
allow idmap servicemanager:binder { call transfer };
#line 24
# Allow servicemanager to send out callbacks
#line 24
allow servicemanager idmap:binder { call transfer };
#line 24
# servicemanager performs getpidcon on clients.
#line 24
allow servicemanager idmap:dir search;
#line 24
allow servicemanager idmap:file { read open };
#line 24
allow servicemanager idmap:process getattr;
#line 24
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 24
# all domains in domain.te.
#line 24
#line 25
typeattribute idmap binderservicedomain;
#line 25
#line 26
allow idmap idmap_service:service_manager { add find };
#line 26
neverallow { domain -idmap } idmap_service:service_manager add;
#line 26
#line 26
# On debug builds with root, allow binder services to use binder over TCP.
#line 26
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 26
#line 26
#line 1 "system/sepolicy/public/incident.te"
# The incident command is used to call into the incidentd service to
# take an incident report (binary, shared bugreport), download incident
# reports that have already been taken, and monitor for new ones.
# It doesn't do anything else.
# incident
type incident, domain;
#line 1 "system/sepolicy/public/incident_helper.te"
# The incident_helper is called by incidentd and
# can only read/write data from/to incidentd
# incident_helper
type incident_helper, domain;
#line 1 "system/sepolicy/public/incidentd.te"
# incidentd
type incidentd, domain;
#line 1 "system/sepolicy/public/init.te"
# init is its own domain.
type init, domain, mlstrustedsubject;
type init_exec, system_file_type, exec_type, file_type;
type init_tmpfs, file_type;
# /dev/__null__ node created by init.
allow init tmpfs:chr_file { create setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
#
# init direct restorecon calls.
#
# /dev/kmsg
allow init tmpfs:chr_file relabelfrom;
allow init kmsg_device:chr_file { getattr write relabelto };
# /dev/kmsg_debug
#line 18
# allow init to mount and unmount debugfs in debug builds
#line 23
# /dev/__properties__
allow init properties_device:dir relabelto;
allow init properties_serial:file { write relabelto };
allow init property_type:file { append create getattr map open read relabelto rename setattr unlink write };
# /dev/__properties__/property_info and /dev/__properties/appcompat_override/property_info
allow init properties_device:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow init property_info:file relabelto;
# /dev/event-log-tags
allow init device:file relabelfrom;
allow init runtime_event_log_tags_file:file { open write setattr relabelto create };
# /dev/socket
allow init { device socket_device dm_user_device }:dir relabelto;
# allow init to establish connection and communicate with lmkd
#line 38
allow init lmkd_socket:sock_file write;
#line 38
allow init lmkd:unix_stream_socket connectto;
#line 38
# Relabel /dev nodes created in first stage init: /dev/console, /dev/null, /dev/ptmx, /dev/random
# and /dev/urandom
allow init { console_device null_device ptmx_device random_device } : chr_file relabelto;
# /dev/device-mapper, /dev/block(/.*)?
allow init tmpfs:{ chr_file blk_file } relabelfrom;
allow init tmpfs:blk_file getattr;
allow init block_device:{ dir blk_file lnk_file } relabelto;
allow init dm_device:{ chr_file blk_file } relabelto;
allow init dm_user_device:chr_file relabelto;
allow init kernel:fd use;
# restorecon for early mount device symlinks
allow init tmpfs:lnk_file { getattr read relabelfrom };
allow init {
metadata_block_device
misc_block_device
recovery_block_device
system_block_device
userdata_block_device
}:{ blk_file lnk_file } relabelto;
allow init dtbo_block_device:lnk_file relabelto;
allow init super_block_device:lnk_file relabelto;
# Create /mnt/sdcard -> /storage/self/primary symlink.
allow init mnt_sdcard_file:lnk_file create;
# setrlimit
allow init self:{ capability cap_userns } sys_resource;
# Remove /dev/.booting and load /debug_ramdisk/* files
allow init tmpfs:file { getattr unlink };
# Access pty created for fsck.
allow init devpts:chr_file { read write open };
# Create /dev/fscklogs files.
allow init fscklogs:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Access /dev/__null__ node created prior to initial policy load.
allow init tmpfs:chr_file write;
# Access /dev/console.
allow init console_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Access /dev/tty0.
allow init tty_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Call mount(2).
allow init self:{ capability cap_userns } sys_admin;
# Call setns(2).
allow init self:{ capability cap_userns } sys_chroot;
# Create and mount on directories in /.
allow init rootfs:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow init {
rootfs
cache_file
cgroup
linkerconfig_file
storage_file
mnt_user_file
system_data_file
system_data_root_file
system_dlkm_file
system_file
vendor_file
postinstall_mnt_dir
mirror_data_file
shell_data_file
}:dir mounton;
# Mount bpf fs on sys/fs/bpf
allow init fs_bpf:dir mounton;
# Mount on /dev/usb-ffs/adb.
allow init device:dir mounton;
# Mount tmpfs on /apex
allow init apex_mnt_dir:dir mounton;
# Bind-mount on /system/apex/com.android.art
allow init art_apex_dir:dir mounton;
# Create and remove symlinks in /.
allow init rootfs:lnk_file { create unlink };
# Mount debugfs on /sys/kernel/debug.
allow init sysfs:dir mounton;
# Create cgroups mount points in tmpfs and mount cgroups on them.
allow init tmpfs:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow init tmpfs:dir mounton;
allow init cgroup:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow init cgroup:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow init cgroup_rc_file:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow init cgroup_desc_file:file { getattr open read ioctl lock map watch watch_reads };
allow init cgroup_desc_api_file:file { getattr open read ioctl lock map watch watch_reads };
allow init vendor_cgroup_desc_file:file { getattr open read ioctl lock map watch watch_reads };
allow init cgroup_v2:dir { mounton { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } }};
allow init cgroup_v2:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# /config
allow init configfs:dir mounton;
allow init configfs:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow init configfs:{ file lnk_file } { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# /metadata
allow init metadata_file:dir mounton;
# Run restorecon on /dev
allow init tmpfs:dir relabelfrom;
# Create directories under /dev/cpuctl after chowning it to system.
allow init self:{ capability cap_userns } { dac_override dac_read_search };
# Set system clock.
allow init self:{ capability cap_userns } sys_time;
allow init self:{ capability cap_userns } { sys_rawio mknod };
# Mounting filesystems from block devices.
allow init dev_type:blk_file { getattr open read ioctl lock map watch watch_reads };
allowxperm init dev_type:blk_file ioctl 0x0000125d;
allowxperm init system_data_root_file:dir ioctl 0x587d;
# Mounting filesystems.
# Only allow relabelto for types used in context= mount options,
# which should all be assigned the contextmount_type attribute.
# This can be done in device-specific policy via type or typeattribute
# declarations.
allow init {
fs_type
# BEGIN_LAUNCHING_WITH_S_ONLY -- this marker is used by CTS -- do not modify
#line 172
-debugfs_type
#line 172
# END_LAUNCHING_WITH_S_ONLY -- this marker is used by CTS -- do not modify
#line 172
}:filesystem ~relabelto;
# Allow init to mount/unmount debugfs in non-user builds.
# BEGIN_LAUNCHING_WITH_S_ONLY -- this marker is used by CTS -- do not modify
#line 176
#line 176
#line 176
#line 176
# END_LAUNCHING_WITH_S_ONLY -- this marker is used by CTS -- do not modify
#line 178
# Allow init to mount tracefs in /sys/kernel/tracing
allow init debugfs_tracing_debug:filesystem mount;
allow init unlabeled:filesystem ~relabelto;
allow init contextmount_type:filesystem relabelto;
# Allow read-only access to context= mounted filesystems.
allow init contextmount_type:dir { open getattr read search ioctl lock watch watch_reads };
allow init contextmount_type:{ file lnk_file sock_file fifo_file } { getattr open read ioctl lock map watch watch_reads };
# restorecon /adb_keys or any other rootfs files and directories to a more
# specific type.
allow init rootfs:{ dir file } relabelfrom;
# mkdir, symlink, write, rm/rmdir, chown/chmod, restorecon/restorecon_recursive from init.rc files.
# chown/chmod require open+read+setattr required for open()+fchown/fchmod().
# system/core/init.rc requires at least cache_file and data_file_type.
# init.<board>.rc files often include device-specific types, so
# we just allow all file types except /system files here.
allow init self:{ capability cap_userns } { chown fowner fsetid };
allow init {
file_type
-app_data_file
-bpffs_type
-exec_type
-misc_logd_file
-nativetest_data_file
-privapp_data_file
-system_app_data_file
-system_dlkm_file_type
-system_file_type
-vendor_file_type
}:dir { create search getattr open read setattr ioctl };
allow init {
file_type
-app_data_file
-bpffs_type
-credstore_data_file
-exec_type
-keystore_data_file
-media_userdir_file
-misc_logd_file
-nativetest_data_file
-privapp_data_file
-shell_data_file
-system_app_data_file
-system_dlkm_file_type
-system_file_type
-system_userdir_file
-vendor_file_type
-vendor_userdir_file
-vold_data_file
}:dir { write add_name remove_name rmdir relabelfrom };
allow init {
file_type
-apex_info_file
-app_data_file
-bpffs_type
-exec_type
-gsi_data_file
-credstore_data_file
-keystore_data_file
-misc_logd_file
-nativetest_data_file
-privapp_data_file
-runtime_event_log_tags_file
-shell_data_file
-system_app_data_file
-system_dlkm_file_type
-system_file_type
-vendor_file_type
-vold_data_file
# BEGIN_LAUNCHING_WITH_S_ONLY -- this marker is used by CTS -- do not modify
#line 255
-debugfs_type
#line 255
# END_LAUNCHING_WITH_S_ONLY -- this marker is used by CTS -- do not modify
#line 255
}:file { create getattr open read write setattr relabelfrom unlink map };
allow init tracefs_type:file { { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } } relabelfrom };
# Allow init to read /apex/apex-info-list.xml for preinstalled paths of APEXes to determine
# subcontext for action/service defined in APEXes.
allow init apex_info_file:file { getattr open read ioctl lock map watch watch_reads };
allow init {
file_type
-app_data_file
-bpffs_type
-exec_type
-gsi_data_file
-credstore_data_file
-keystore_data_file
-misc_logd_file
-nativetest_data_file
-privapp_data_file
-shell_data_file
-system_app_data_file
-system_dlkm_file_type
-system_file_type
-vendor_file_type
-vold_data_file
}:{ sock_file fifo_file } { create getattr open read setattr relabelfrom unlink };
allow init {
file_type
-apex_mnt_dir
-app_data_file
-bpffs_type
-exec_type
-gsi_data_file
-credstore_data_file
-keystore_data_file
-misc_logd_file
-nativetest_data_file
-privapp_data_file
-shell_data_file
-system_app_data_file
-system_dlkm_file_type
-system_file_type
-vendor_file_type
-vold_data_file
}:lnk_file { create getattr setattr relabelfrom unlink };
allow init cache_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
allow init {
file_type
-bpffs_type
-system_dlkm_file_type
-system_file_type
-vendor_file_type
-exec_type
-app_data_file
-privapp_data_file
}:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } relabelto;
allow init { sysfs debugfs debugfs_tracing debugfs_tracing_debug }:{ dir file lnk_file } { getattr relabelfrom };
allow init { sysfs_type debugfs_type tracefs_type }:{ dir file lnk_file } { relabelto getattr };
allow init dev_type:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow init dev_type:lnk_file create;
# Disable tracing by writing to /sys/kernel/debug/tracing/tracing_on
allow init debugfs_tracing:file { open append write lock map };
# Setup and control wifi event tracing (see wifi-events.rc)
allow init debugfs_tracing_instances:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow init debugfs_tracing_instances:file { open append write lock map };
allow init debugfs_wifi_tracing:file { open append write lock map };
# chown/chmod on pseudo files.
allow init {
fs_type
-bpffs_type
-contextmount_type
-keychord_device
-proc_type
-sdcard_type
-fusefs_type
-sysfs_type
-rootfs
# BEGIN_LAUNCHING_WITH_S_ONLY -- this marker is used by CTS -- do not modify
#line 340
-debugfs_type
#line 340
# END_LAUNCHING_WITH_S_ONLY -- this marker is used by CTS -- do not modify
#line 340
}:file { open read setattr };
allow init {
fs_type
-bpffs_type
-contextmount_type
-sdcard_type
-fusefs_type
-rootfs
}:dir { open read setattr search };
allow init {
binder_device
console_device
devpts
dm_device
hwbinder_device
input_device
kmsg_device
null_device
owntty_device
pmsg_device
ptmx_device
random_device
tty_device
zero_device
}:chr_file { read open };
# Unlabeled file access for upgrades from 4.2.
allow init unlabeled:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } relabelfrom };
allow init unlabeled:{ file lnk_file sock_file fifo_file } { { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } } relabelfrom };
# Any operation that can modify the kernel ring buffer, e.g. clear
# or a read that consumes the messages that were read.
allow init kernel:system syslog_mod;
allow init self:{ capability2 cap2_userns } syslog;
# init access to /proc.
#line 378
allow init proc_net_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 378
allow init proc_net_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 378
allow init proc_filesystems:file { getattr open read ioctl lock map watch watch_reads };
#line 387
allow init {
proc # b/67049235 processes /proc/<pid>/* files are mislabeled.
proc_bootconfig
proc_cmdline
proc_diskstats
proc_kmsg # Open /proc/kmsg for logd service.
proc_meminfo
proc_stat # Read /proc/stat for bootchart.
proc_uptime
proc_version
}:file { getattr open read ioctl lock map watch watch_reads };
allow init {
proc_abi
proc_cpu_alignment
proc_dirty
proc_hostname
proc_hung_task
proc_extra_free_kbytes
proc_net_type
proc_max_map_count
proc_min_free_order_shift
proc_overcommit_memory # /proc/sys/vm/overcommit_memory
proc_panic
proc_page_cluster
proc_perf
proc_sched
proc_sysrq
proc_watermark_boost_factor
}:file { open append write lock map };
allow init {
proc_security
}:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# init chmod/chown access to /proc files.
allow init {
proc_cmdline
proc_bootconfig
proc_kmsg
proc_net
proc_pagetypeinfo
proc_qtaguid_stat
proc_slabinfo
proc_sysrq
proc_qtaguid_ctrl
proc_vmallocinfo
}:file setattr;
# init access to /sys files.
allow init {
sysfs_android_usb
sysfs_dm_verity
sysfs_leds
sysfs_power
sysfs_fs_f2fs
sysfs_dm
sysfs_lru_gen_enabled
}:file { open append write lock map };
allow init {
sysfs_dt_firmware_android
sysfs_fs_ext4_features
}:file { getattr open read ioctl lock map watch watch_reads };
allow init {
sysfs_zram
}:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# allow init to create loop devices with /dev/loop-control
allow init loop_control_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow init loop_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allowxperm init loop_device:blk_file ioctl {
0x00004c00
0x00004c01
0x00004c82
0x00004c09
0x00004c08
0x00004c03
0x00004c04
};
# Allow init to write to vibrator/trigger
allow init sysfs_vibrator:file { open append write lock map };
# init chmod/chown access to /sys files.
allow init {
sysfs_android_usb
sysfs_devices_system_cpu
sysfs_ipv4
sysfs_leds
sysfs_lowmemorykiller
sysfs_power
sysfs_vibrator
sysfs_wake_lock
sysfs_zram
}:file setattr;
# Set usermodehelpers.
allow init { usermodehelper sysfs_usermodehelper }:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow init self:{ capability cap_userns } net_admin;
# Reboot.
allow init self:{ capability cap_userns } sys_boot;
# Init will create /data/misc/logd when the property persist.logd.logpersistd is "logcatd".
# Init will also walk through the directory as part of a recursive restorecon.
allow init misc_logd_file:dir { add_name open create read getattr setattr search write };
allow init misc_logd_file:file { open create getattr setattr write };
# Support "adb shell stop"
allow init self:{ capability cap_userns } kill;
allow init domain:process { getpgid sigkill signal };
# Init creates credstore's directory on boot, and walks through
# the directory as part of a recursive restorecon.
allow init credstore_data_file:dir { open create read getattr setattr search };
allow init credstore_data_file:file { getattr };
# Init creates keystore's directory on boot, and walks through
# the directory as part of a recursive restorecon.
allow init keystore_data_file:dir { open create read getattr setattr search };
allow init keystore_data_file:file { getattr };
# Init creates vold's directory on boot, and walks through
# the directory as part of a recursive restorecon.
allow init vold_data_file:dir { open create read getattr setattr search };
allow init vold_data_file:file { getattr };
# Init creates /data/local/tmp at boot
allow init shell_data_file:dir { open create read getattr setattr search };
allow init shell_data_file:file { getattr };
# Set UID, GID, and adjust capability bounding set for services.
allow init self:{ capability cap_userns } { setuid setgid setpcap };
# For bootchart to read the /proc/$pid/cmdline file of each process,
# we need to have following line to allow init to have access
# to different domains.
#line 529
allow init domain:dir { open getattr read search ioctl lock watch watch_reads };
#line 529
allow init domain:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 529
# Use setexeccon(), setfscreatecon(), and setsockcreatecon().
# setexec is for services with seclabel options.
# setfscreate is for labeling directories and socket files.
# setsockcreate is for labeling local/unix domain sockets.
allow init self:process { setexec setfscreate setsockcreate };
# Get file context
allow init file_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
# sepolicy access
allow init sepolicy_file:file { getattr open read ioctl lock map watch watch_reads };
# Perform SELinux access checks on setting properties.
#line 544
#line 544
allow init selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 544
allow init selinuxfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 544
#line 544
allow init selinuxfs:file { open append write lock map };
#line 544
allow init kernel:security compute_av;
#line 544
allow init self:netlink_selinux_socket { read write create getattr setattr lock relabelfrom relabelto append bind connect listen accept getopt setopt shutdown recvfrom sendto name_bind };
#line 544
# Ask the kernel for the new context on services to label their sockets.
allow init kernel:security compute_create;
# Create sockets for the services.
allow init domain:unix_stream_socket { create bind setopt };
allow init domain:unix_dgram_socket { create bind setopt };
# Create /data/property and files within it.
allow init property_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow init property_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Set any property.
allow init property_type:property_service set;
# Send an SELinux userspace denial to the kernel audit subsystem,
# so it can be picked up and processed by logd. These denials are
# generated when an attempt to set a property is denied by policy.
allow init self:netlink_audit_socket { { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } } nlmsg_relay };
allow init self:{ capability cap_userns } audit_write;
# Run "ifup lo" to bring up the localhost interface
allow init self:udp_socket { create ioctl };
# in addition to unpriv ioctls granted to all domains, init also needs:
allowxperm init self:udp_socket ioctl 0x00008914;
allow init self:{ capability cap_userns } net_raw;
# Set scheduling info for psi monitor thread.
# TODO: delete or revise this line b/131761776
allow init kernel:process { getsched setsched };
# swapon() needs write access to swap device
# system/core/fs_mgr/fs_mgr.c - fs_mgr_swapon_all
allow init swap_block_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Create and access /dev files without a specific type,
# e.g. /dev/.coldboot_done, /dev/.booting
# TODO: Move these files into their own type unless they are
# only ever accessed by init.
allow init device:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# keychord retrieval from /dev/input/ devices
allow init input_device:dir { open getattr read search ioctl lock watch watch_reads };
allow init input_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Access device mapper for setting up dm-verity
allow init dm_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow init dm_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Access dm-user for OTA boot
allow init dm_user_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Access metadata block device for storing dm-verity state
allow init metadata_block_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Read /sys/fs/pstore/console-ramoops to detect restarts caused
# by dm-verity detecting corrupted blocks
allow init pstorefs:dir search;
allow init pstorefs:file { getattr open read ioctl lock map watch watch_reads };
allow init kernel:system syslog_read;
# linux keyring configuration
allow init init:key { write search setattr };
# Allow init to create /data/unencrypted
allow init unencrypted_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
# Set encryption policy on dirs in /data
allowxperm init { data_file_type unlabeled }:dir ioctl {
0x400c6615
0x800c6613
};
# Raw writes to misc block device
allow init misc_block_device:blk_file { open append write lock map };
#line 621
allow init system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 621
allow init system_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 621
#line 622
allow init system_dlkm_file_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 622
allow init system_dlkm_file_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 622
#line 623
allow init vendor_file_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 623
allow init vendor_file_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 623
allow init system_data_file:file { getattr read };
allow init system_data_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
# For init to be able to run shell scripts from vendor
allow init vendor_shell_exec:file execute;
# Metadata setup
allow init vold_metadata_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow init vold_metadata_file:file getattr;
allow init metadata_bootstat_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow init metadata_bootstat_file:file { open append write lock map };
allow init userspace_reboot_metadata_file:file { open append write lock map };
# Allow init to touch PSI monitors
allow init proc_pressure_mem:file { { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } setattr };
# init is using bootstrap bionic
#line 642
allow init system_bootstrap_lib_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 642
allow init system_bootstrap_lib_file:file { execute read open getattr map };
#line 642
# stat the root dir of fuse filesystems (for the mount handler)
allow init fuse:dir { search getattr };
# allow filesystem tuning
allow init userdata_sysdev:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# allow disk tuning
allow init rootdisk_sysdev:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
###
### neverallow rules
###
# The init domain is only entered via an exec based transition from the
# kernel domain, never via setcon().
neverallow domain init:process dyntransition;
neverallow { domain -kernel } init:process transition;
neverallow init { file_type fs_type -init_exec }:file entrypoint;
# Never read/follow symlinks created by shell or untrusted apps.
neverallow init shell_data_file:lnk_file read;
neverallow init app_data_file_type:lnk_file read;
# init should never execute a program without changing to another domain.
neverallow init { file_type fs_type }:file execute_no_trans;
# The use of sensitive environment variables, such as LD_PRELOAD, is disallowed
# when init is executing other binaries. The use of LD_PRELOAD for init spawned
# services is generally considered a no-no, as it injects libraries which the
# binary was not expecting. This is especially problematic for APEXes. The use
# of LD_PRELOAD via APEXes is a layering violation, and inappropriately loads
# code into a process which wasn't expecting that code, with potentially
# unexpected side effects. (b/140789528)
neverallow init *:process noatsecure;
# init can never add binder services
neverallow init service_manager_type:service_manager { add find };
# init can never list binder services
neverallow init servicemanager:service_manager list;
# Init should not be creating subdirectories in /data/local/tmp
neverallow init shell_data_file:dir { write add_name remove_name };
# Init should not access sysfs node that are not explicitly labeled.
neverallow init sysfs:file { open write };
# No domain should be allowed to ptrace init.
neverallow * init:process ptrace;
# init owns the root of /data
# TODO(b/140259336) We want to remove vendor_init
# TODO(b/141108496) We want to remove toolbox
neverallow { domain -init -toolbox -vendor_init -vold } system_data_root_file:dir { write add_name remove_name };
#line 1 "system/sepolicy/public/inputflinger.te"
# inputflinger
type inputflinger, domain;
type inputflinger_exec, system_file_type, exec_type, file_type;
#line 5
# Call the servicemanager and transfer references to it.
#line 5
allow inputflinger servicemanager:binder { call transfer };
#line 5
# Allow servicemanager to send out callbacks
#line 5
allow servicemanager inputflinger:binder { call transfer };
#line 5
# servicemanager performs getpidcon on clients.
#line 5
allow servicemanager inputflinger:dir search;
#line 5
allow servicemanager inputflinger:file { read open };
#line 5
allow servicemanager inputflinger:process getattr;
#line 5
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 5
# all domains in domain.te.
#line 5
#line 6
typeattribute inputflinger binderservicedomain;
#line 6
#line 8
# Call the server domain and optionally transfer references to it.
#line 8
allow inputflinger system_server:binder { call transfer };
#line 8
# Allow the serverdomain to transfer references to the client on the reply.
#line 8
allow system_server inputflinger:binder transfer;
#line 8
# Receive and use open files from the server.
#line 8
allow inputflinger system_server:fd use;
#line 8
#line 10
# TODO(b/115946999): Remove /sys/power/* permissions once CONFIG_PM_WAKELOCKS is
#line 10
# deprecated.
#line 10
# Access /sys/power/wake_lock and /sys/power/wake_unlock
#line 10
allow inputflinger sysfs_wake_lock:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 10
# Accessing these files requires CAP_BLOCK_SUSPEND
#line 10
allow inputflinger self:{ capability2 cap2_userns } block_suspend;
#line 10
# system_suspend permissions
#line 10
#line 10
# Call the server domain and optionally transfer references to it.
#line 10
allow inputflinger system_suspend_server:binder { call transfer };
#line 10
# Allow the serverdomain to transfer references to the client on the reply.
#line 10
allow system_suspend_server inputflinger:binder transfer;
#line 10
# Receive and use open files from the server.
#line 10
allow inputflinger system_suspend_server:fd use;
#line 10
#line 10
allow inputflinger system_suspend_hwservice:hwservice_manager find;
#line 10
# halclientdomain permissions
#line 10
#line 10
# Call the hwservicemanager and transfer references to it.
#line 10
allow inputflinger hwservicemanager:binder { call transfer };
#line 10
# Allow hwservicemanager to send out callbacks
#line 10
allow hwservicemanager inputflinger:binder { call transfer };
#line 10
# hwservicemanager performs getpidcon on clients.
#line 10
allow hwservicemanager inputflinger:dir search;
#line 10
allow hwservicemanager inputflinger:file { read open map };
#line 10
allow hwservicemanager inputflinger:process getattr;
#line 10
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 10
# all domains in domain.te.
#line 10
#line 10
#line 10
allow inputflinger hwservicemanager_prop:file { getattr open read map };
#line 10
#line 10
allow inputflinger hidl_manager_hwservice:hwservice_manager find;
#line 10
# AIDL suspend hal permissions
#line 10
allow inputflinger hal_system_suspend_service:service_manager find;
#line 10
#line 10
# Call the servicemanager and transfer references to it.
#line 10
allow inputflinger servicemanager:binder { call transfer };
#line 10
# Allow servicemanager to send out callbacks
#line 10
allow servicemanager inputflinger:binder { call transfer };
#line 10
# servicemanager performs getpidcon on clients.
#line 10
allow servicemanager inputflinger:dir search;
#line 10
allow servicemanager inputflinger:file { read open };
#line 10
allow servicemanager inputflinger:process getattr;
#line 10
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 10
# all domains in domain.te.
#line 10
#line 10
allow inputflinger input_device:dir { open getattr read search ioctl lock watch watch_reads };
allow inputflinger input_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 15
allow inputflinger cgroup:dir { open getattr read search ioctl lock watch watch_reads };
#line 15
allow inputflinger cgroup:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 15
#line 16
allow inputflinger cgroup_v2:dir { open getattr read search ioctl lock watch watch_reads };
#line 16
allow inputflinger cgroup_v2:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 16
#line 1 "system/sepolicy/public/installd.te"
# installer daemon
type installd, domain;
type installd_exec, system_file_type, exec_type, file_type;
typeattribute installd mlstrustedsubject;
allow installd self:{ capability cap_userns } { chown dac_override dac_read_search fowner fsetid setgid setuid sys_admin kill };
# Allow labeling of files under /data/app/com.example/oat/
allow installd dalvikcache_data_file:dir relabelto;
allow installd dalvikcache_data_file:file { relabelto link };
# Allow movement of APK files between volumes
allow installd apk_data_file:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } relabelfrom };
allow installd apk_data_file:file { { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } } relabelfrom link };
allow installd apk_data_file:lnk_file { create { getattr open read ioctl lock map watch watch_reads } unlink };
allow installd asec_apk_file:file { getattr open read ioctl lock map watch watch_reads };
allow installd apk_tmp_file:file { { getattr open read ioctl lock map watch watch_reads } unlink };
allow installd apk_tmp_file:dir { relabelfrom { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } };
allow installd oemfs:dir { open getattr read search ioctl lock watch watch_reads };
allow installd oemfs:file { getattr open read ioctl lock map watch watch_reads };
allow installd cgroup:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow installd cgroup_v2:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow installd mnt_expand_file:dir { search getattr };
# Check validity of SELinux context before use.
#line 25
#line 25
allow installd selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 25
allow installd selinuxfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 25
#line 25
allow installd selinuxfs:file { open append write lock map };
#line 25
allow installd kernel:security check_context;
#line 25
#line 27
allow installd rootfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 27
allow installd rootfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 27
# Scan through APKs in /system/app and /system/priv-app
#line 29
allow installd system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 29
allow installd system_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 29
# Scan through APKs in /vendor/app
#line 31
allow installd vendor_app_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 31
allow installd vendor_app_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 31
# Scan through JARs in /vendor/framework
#line 33
allow installd vendor_framework_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 33
allow installd vendor_framework_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 33
# Scan through Runtime Resource Overlay APKs in /vendor/overlay
#line 35
allow installd vendor_overlay_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 35
allow installd vendor_overlay_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 35
# Vendor overlay can be found in vendor apex
allow installd vendor_apex_metadata_file:dir { getattr search };
# Get file context
allow installd file_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
# Get seapp_context
allow installd seapp_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
# Search /data/app-asec and stat files in it.
allow installd asec_image_file:dir search;
allow installd asec_image_file:file getattr;
# Required to initially create subdirectories of /data/user/$userId
# and lib symlinks before the setfilecon call. May want to
# move symlink creation after setfilecon in installd.
allow installd system_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
# Also, allow read for lnk_file so that we can process symlinks within
# /data/user/$userId when optimizing application code.
allow installd system_data_file:lnk_file { create getattr read setattr unlink };
# Manage lower filesystem via pass_through mounts
allow installd mnt_pass_through_file:dir { open getattr read search ioctl lock watch watch_reads };
# Upgrade /data/media for multi-user if necessary.
allow installd media_rw_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow installd media_rw_data_file:file { getattr unlink };
# restorecon new /data/media directory.
allow installd system_data_file:dir relabelfrom;
allow installd media_rw_data_file:dir relabelto;
# Delete /data/media files through sdcardfs, instead of going behind its back
allow installd media_userdir_file:dir { open getattr read search ioctl lock watch watch_reads };
allow installd tmpfs:dir { open getattr read search ioctl lock watch watch_reads };
allow installd storage_file:dir search;
allow installd { sdcard_type fuse }:dir { search open read write remove_name getattr rmdir };
allow installd { sdcard_type fuse }:file { getattr unlink };
# Create app's mirror data directory in /data_mirror, and bind mount the real directory to it
allow installd mirror_data_file:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } mounton };
# Upgrade /data/misc/keychain for multi-user if necessary.
allow installd system_userdir_file:dir { open getattr read search ioctl lock watch watch_reads };
allow installd misc_user_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow installd misc_user_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow installd keychain_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow installd keychain_data_file:file {{ getattr open read ioctl lock map watch watch_reads } unlink};
# Create /data/misc/installd/layout_version.* file
allow installd install_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow installd install_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
# Create files under /data/dalvik-cache.
allow installd dalvikcache_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow installd dalvikcache_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow installd dalvikcache_data_file:lnk_file getattr;
# Create files under /data/resource-cache.
allow installd resourcecache_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow installd resourcecache_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Upgrade from unlabeled userdata.
# Just need enough to remove and/or relabel it.
allow installd unlabeled:dir { getattr search relabelfrom { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } rmdir };
allow installd unlabeled:{ file lnk_file sock_file fifo_file } { getattr relabelfrom rename unlink setattr };
# Read pkg.apk file for input during dexopt.
allow installd unlabeled:file { getattr open read ioctl lock map watch watch_reads };
# Upgrade from before system_app_data_file was used for system UID apps.
# Just need enough to relabel it and to unlink removed package files.
# Directory access covered by earlier rule above.
allow installd system_data_file:{ file lnk_file sock_file fifo_file } { getattr relabelfrom unlink };
# Manage /data/data subdirectories, including initially labeling them
# upon creation via setfilecon or running restorecon_recursive,
# setting owner/mode, creating symlinks within them, and deleting them
# upon package uninstall.
allow installd app_data_file_type:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } relabelfrom relabelto };
allow installd app_data_file_type:{ file lnk_file sock_file fifo_file } { { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } } relabelfrom relabelto };
# Allow setting extended attributes (for project quota IDs) on dirs and files
# and to enable project ID inheritance through FS_IOC_SETFLAGS
# Added install_data_file to be able to create file under /data/misc/installd/ioctl_check
allowxperm installd { app_data_file_type system_data_file install_data_file}:{ dir file } ioctl {
0x801c581f
0x401c5820
0x80086601
0x40086602
};
# Similar for the files under /data/misc/profiles/
allow installd user_profile_root_file:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } relabelfrom };
allow installd user_profile_data_file:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } relabelto };
allow installd user_profile_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow installd user_profile_data_file:file unlink;
# Allow zygote to unmount mirror directories
allow installd labeledfs:filesystem unmount;
# Files created/updated by profman dumps.
allow installd profman_dump_data_file:dir { search add_name write };
allow installd profman_dump_data_file:file { create setattr open write };
# Create and use pty created by android_fork_execvp().
allow installd devpts:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# execute toybox for app relocation
allow installd toolbox_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Allow installd to publish a binder service and make binder calls.
#line 144
# Call the servicemanager and transfer references to it.
#line 144
allow installd servicemanager:binder { call transfer };
#line 144
# Allow servicemanager to send out callbacks
#line 144
allow servicemanager installd:binder { call transfer };
#line 144
# servicemanager performs getpidcon on clients.
#line 144
allow servicemanager installd:dir search;
#line 144
allow servicemanager installd:file { read open };
#line 144
allow servicemanager installd:process getattr;
#line 144
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 144
# all domains in domain.te.
#line 144
#line 145
allow installd installd_service:service_manager { add find };
#line 145
neverallow { domain -installd } installd_service:service_manager add;
#line 145
#line 145
# On debug builds with root, allow binder services to use binder over TCP.
#line 145
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 145
#line 145
allow installd dumpstate:fifo_file { getattr write };
# Allow installd to call into the system server so it can check permissions.
#line 149
# Call the server domain and optionally transfer references to it.
#line 149
allow installd system_server:binder { call transfer };
#line 149
# Allow the serverdomain to transfer references to the client on the reply.
#line 149
allow system_server installd:binder transfer;
#line 149
# Receive and use open files from the server.
#line 149
allow installd system_server:fd use;
#line 149
allow installd permission_service:service_manager find;
# Allow installd to read and write quotas
allow installd block_device:dir { search };
allow installd labeledfs:filesystem { quotaget quotamod };
# Allow installd to delete from /data/preloads when trimming data caches
# TODO b/34690396 Remove when time-based purge policy for preloads is implemented in system_server
allow installd preloads_data_file:file { { getattr open read ioctl lock map watch watch_reads } unlink };
allow installd preloads_data_file:dir { { open getattr read search ioctl lock watch watch_reads } write remove_name rmdir };
allow installd preloads_media_file:file { { getattr open read ioctl lock map watch watch_reads } unlink };
allow installd preloads_media_file:dir { { open getattr read search ioctl lock watch watch_reads } write remove_name rmdir };
# Allow installd to read /proc/filesystems
allow installd proc_filesystems:file { getattr open read ioctl lock map watch watch_reads };
#add for move app to sd card
#line 167
allow installd storage_config_prop:file { getattr open read map };
#line 167
# Allow installd to access apps installed on the Incremental File System
# Accessing files on the Incremental File System uses fds opened in the context of vold.
allow installd vold:fd use;
###
### Neverallow rules
###
# only system_server, installd, dumpstate, and servicemanager may interact with installd over binder
neverallow { domain -system_server -dumpstate -installd } installd_service:service_manager find;
neverallow { domain -system_server -dumpstate -servicemanager } installd:binder call;
neverallow installd {
domain
-system_server
-servicemanager
}:binder call;
#line 1 "system/sepolicy/public/isolated_app.te"
###
### Services with isolatedProcess=true in their manifest.
###
### This file defines the rules for isolated apps. An "isolated
### app" is an APP with UID between AID_ISOLATED_START (99000)
### and AID_ISOLATED_END (99999).
###
type isolated_app, domain;
#line 1 "system/sepolicy/public/isolated_compute_app.te"
type isolated_compute_app, domain;
#line 1 "system/sepolicy/public/kernel.te"
# Life begins with the kernel.
type kernel, domain, mlstrustedsubject;
allow kernel self:{ capability cap_userns } sys_nice;
# Root fs.
#line 7
allow kernel rootfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 7
allow kernel rootfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 7
# Used to read androidboot.selinux property
allow kernel {
proc_bootconfig
proc_cmdline
}:file { getattr open read ioctl lock map watch watch_reads };
# Get SELinux enforcing status.
allow kernel selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
allow kernel selinuxfs:file { getattr open read ioctl lock map watch watch_reads };
# Get file contexts during first stage
allow kernel file_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow init relabel itself.
allow kernel rootfs:file relabelfrom;
allow kernel init_exec:file relabelto;
# TODO: investigate why we need this.
allow kernel init:process share;
# cgroup filesystem initialization prior to setting the cgroup root directory label.
allow kernel unlabeled:dir search;
# Mount usbfs.
allow kernel usbfs:filesystem mount;
allow kernel usbfs:dir search;
# Initial setenforce by init prior to switching to init domain.
# We use dontaudit instead of allow to prevent a kernel spawned userspace
# process from turning off SELinux once enabled.
dontaudit kernel self:security setenforce;
# Write to /proc/1/oom_adj prior to switching to init domain.
allow kernel self:{ capability cap_userns } sys_resource;
# Init reboot before switching selinux domains under certain error
# conditions. Allow it.
# As part of rebooting, init writes "u" to /proc/sysrq-trigger to
# remount filesystems read-only. /data is not mounted at this point,
# so we could ignore this. For now, we allow it.
allow kernel self:{ capability cap_userns } sys_boot;
allow kernel proc_sysrq:file { open append write lock map };
# Allow writing to /dev/kmsg which was created prior to loading policy.
allow kernel tmpfs:chr_file write;
# Set checkreqprot by init.rc prior to switching to init domain.
allow kernel selinuxfs:file write;
allow kernel self:security setcheckreqprot;
# kernel thread "loop0", used by the loop block device, for ASECs (b/17158723)
allow kernel { sdcard_type fuse }:file { read write };
# f_mtp driver accesses files from kernel context.
allow kernel mediaprovider:fd use;
# Allow the kernel to read OBB files from app directories. (b/17428116)
# Kernel thread "loop0" reads a vold supplied file descriptor.
# Fixes CTS tests:
# * android.os.storage.cts.StorageManagerTest#testMountAndUnmountObbNormal
# * android.os.storage.cts.StorageManagerTest#testMountAndUnmountTwoObbs
allow kernel vold:fd use;
allow kernel { app_data_file privapp_data_file }:file read;
allow kernel asec_image_file:file read;
# Allow mounting loop device in update_engine_unittests. (b/28319454)
# and for LTP kernel tests (b/73220071)
#line 78
# Access to /data/media.
# This should be removed if sdcardfs is modified to alter the secontext for its
# accesses to the underlying FS.
allow kernel media_rw_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow kernel media_rw_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Access to /data/misc/vold/virtual_disk.
allow kernel vold_data_file:file { read write };
# Allow the kernel to read APEX file descriptors and (staged) data files;
# Needed because APEX uses the loopback driver, which issues requests from
# a kernel thread in earlier kernel version.
allow kernel apexd:fd use;
allow kernel {
apex_data_file
staging_data_file
vendor_apex_file
}:file read;
# Also allow the kernel to read/write /data/local/tmp files via loop device
# for ApexTestCases and fiemap_image_test.
#line 102
# Allow the first-stage init (which is running in the kernel domain) to execute the
# dynamic linker when it re-executes /init to switch into the second stage.
# Until Linux 4.8, the program interpreter (dynamic linker in this case) is executed
# before the domain is switched to the target domain. So, we need to allow the kernel
# domain (the source domain) to execute the dynamic linker (system_file type).
# TODO(b/110147943) remove these allow rules when we no longer need to support Linux
# kernel older than 4.8.
allow kernel system_file:file execute;
# The label for the dynamic linker is rootfs in the recovery partition. This is because
# the recovery partition which is rootfs does not support xattr and thus labeling can't be
# done at build-time. All files are by default labeled as rootfs upon booting.
#line 117
# required by VTS lidbm unit test
allow kernel appdomain_tmpfs:file { read write };
###
### neverallow rules
###
# The initial task starts in the kernel domain (assigned via
# initial_sid_contexts), but nothing ever transitions to it.
neverallow * kernel:process { transition dyntransition };
# The kernel domain is never entered via an exec, nor should it
# ever execute a program outside the rootfs without changing to another domain.
# If you encounter an execute_no_trans denial on the kernel domain, then
# possible causes include:
# - The program is a kernel usermodehelper. In this case, define a domain
# for the program and domain_auto_trans() to it.
# - You are running an exploit which switched to the init task credentials
# and is then trying to exec a shell or other program. You lose!
neverallow kernel *:file { entrypoint execute_no_trans };
# the kernel should not be accessing files owned by other users.
# Instead of adding dac_{read_search,override}, fix the unix permissions
# on files being accessed.
neverallow kernel self:{ capability cap_userns } { dac_override dac_read_search };
# Nobody should be ptracing kernel threads
neverallow * kernel:process ptrace;
#line 1 "system/sepolicy/public/keystore.te"
type keystore, domain, keystore2_key_type;
type keystore_exec, system_file_type, exec_type, file_type;
# keystore daemon
typeattribute keystore mlstrustedsubject;
#line 6
# Call the servicemanager and transfer references to it.
#line 6
allow keystore servicemanager:binder { call transfer };
#line 6
# Allow servicemanager to send out callbacks
#line 6
allow servicemanager keystore:binder { call transfer };
#line 6
# servicemanager performs getpidcon on clients.
#line 6
allow servicemanager keystore:dir search;
#line 6
allow servicemanager keystore:file { read open };
#line 6
allow servicemanager keystore:process getattr;
#line 6
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 6
# all domains in domain.te.
#line 6
#line 7
typeattribute keystore binderservicedomain;
#line 7
#line 8
# Call the server domain and optionally transfer references to it.
#line 8
allow keystore remote_provisioning_service_server:binder { call transfer };
#line 8
# Allow the serverdomain to transfer references to the client on the reply.
#line 8
allow remote_provisioning_service_server keystore:binder transfer;
#line 8
# Receive and use open files from the server.
#line 8
allow keystore remote_provisioning_service_server:fd use;
#line 8
#line 9
# Call the server domain and optionally transfer references to it.
#line 9
allow keystore system_server:binder { call transfer };
#line 9
# Allow the serverdomain to transfer references to the client on the reply.
#line 9
allow system_server keystore:binder transfer;
#line 9
# Receive and use open files from the server.
#line 9
allow keystore system_server:fd use;
#line 9
#line 10
# Call the server domain and optionally transfer references to it.
#line 10
allow keystore wificond:binder { call transfer };
#line 10
# Allow the serverdomain to transfer references to the client on the reply.
#line 10
allow wificond keystore:binder transfer;
#line 10
# Receive and use open files from the server.
#line 10
allow keystore wificond:fd use;
#line 10
allow keystore keystore_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow keystore keystore_data_file:{ file lnk_file sock_file fifo_file } { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow keystore keystore_exec:file { getattr };
#line 16
allow keystore keystore_service:service_manager { add find };
#line 16
neverallow { domain -keystore } keystore_service:service_manager add;
#line 16
#line 16
# On debug builds with root, allow binder services to use binder over TCP.
#line 16
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 16
#line 16
allow keystore sec_key_att_app_id_provider_service:service_manager find;
allow keystore dropbox_service:service_manager find;
allow keystore remote_provisioning_service:service_manager find;
#line 20
allow keystore apc_service:service_manager { add find };
#line 20
neverallow { domain -keystore } apc_service:service_manager add;
#line 20
#line 20
# On debug builds with root, allow binder services to use binder over TCP.
#line 20
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 20
#line 20
#line 21
allow keystore keystore_compat_hal_service:service_manager { add find };
#line 21
neverallow { domain -keystore } keystore_compat_hal_service:service_manager add;
#line 21
#line 21
# On debug builds with root, allow binder services to use binder over TCP.
#line 21
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 21
#line 21
#line 22
allow keystore authorization_service:service_manager { add find };
#line 22
neverallow { domain -keystore } authorization_service:service_manager add;
#line 22
#line 22
# On debug builds with root, allow binder services to use binder over TCP.
#line 22
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 22
#line 22
#line 23
allow keystore keystore_maintenance_service:service_manager { add find };
#line 23
neverallow { domain -keystore } keystore_maintenance_service:service_manager add;
#line 23
#line 23
# On debug builds with root, allow binder services to use binder over TCP.
#line 23
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 23
#line 23
#line 24
allow keystore keystore_metrics_service:service_manager { add find };
#line 24
neverallow { domain -keystore } keystore_metrics_service:service_manager add;
#line 24
#line 24
# On debug builds with root, allow binder services to use binder over TCP.
#line 24
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 24
#line 24
#line 25
allow keystore legacykeystore_service:service_manager { add find };
#line 25
neverallow { domain -keystore } legacykeystore_service:service_manager add;
#line 25
#line 25
# On debug builds with root, allow binder services to use binder over TCP.
#line 25
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 25
#line 25
# Check SELinux permissions.
#line 28
#line 28
allow keystore selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 28
allow keystore selinuxfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 28
#line 28
allow keystore selinuxfs:file { open append write lock map };
#line 28
allow keystore kernel:security compute_av;
#line 28
allow keystore self:netlink_selinux_socket { read write create getattr setattr lock relabelfrom relabelto append bind connect listen accept getopt setopt shutdown recvfrom sendto name_bind };
#line 28
#line 30
allow keystore cgroup:dir { open getattr read search ioctl lock watch watch_reads };
#line 30
allow keystore cgroup:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 30
#line 31
allow keystore cgroup_v2:dir { open getattr read search ioctl lock watch watch_reads };
#line 31
allow keystore cgroup_v2:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 31
###
### Neverallow rules
###
### Protect ourself from others
###
neverallow { domain -keystore } keystore_data_file:dir ~{ open create read getattr setattr search relabelto ioctl };
neverallow { domain -keystore } keystore_data_file:{ file lnk_file sock_file fifo_file } ~{ relabelto getattr };
neverallow { domain -keystore -init } keystore_data_file:dir *;
neverallow { domain -keystore -init } keystore_data_file:{ file lnk_file sock_file fifo_file } *;
# TODO(b/186868271): Remove the crash dump exception soon-ish (maybe by May 14, 2021?)
neverallow { domain } keystore:process ptrace;
# The software KeyMint implementation used in km_compat needs
# to read the vendor security patch level.
#line 50
allow keystore vendor_security_patch_level_prop:file { getattr open read map };
#line 50
;
# Allow keystore to read its vendor configuration
#line 53
allow keystore keystore_config_prop:file { getattr open read map };
#line 53
#line 1 "system/sepolicy/public/keystore_keys.te"
# A keystore2 namespace for WI-FI.
type wifi_key, keystore2_key_type;
#line 1 "system/sepolicy/public/llkd.te"
# llkd Live LocK Daemon
type llkd, domain, mlstrustedsubject;
type llkd_exec, system_file_type, exec_type, file_type;
#line 1 "system/sepolicy/public/lmkd.te"
# lmkd low memory killer daemon
type lmkd, domain, mlstrustedsubject;
type lmkd_exec, system_file_type, exec_type, file_type;
allow lmkd self:{ capability cap_userns } { dac_override dac_read_search sys_resource kill };
# lmkd locks itself in memory, to prevent it from being
# swapped out and unable to kill other memory hogs.
# system/core commit b28ff9131363f7b4a698990da5748b2a88c3ed35
# b/16236289
allow lmkd self:{ capability cap_userns } ipc_lock;
## Open and write to /proc/PID/oom_score_adj and /proc/PID/timerslack_ns
## TODO: maybe scope this down?
#line 15
allow lmkd domain:dir { open getattr read search ioctl lock watch watch_reads };
#line 15
allow lmkd domain:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 15
allow lmkd domain:file write;
## Writes to /sys/module/lowmemorykiller/parameters/minfree
#line 19
allow lmkd sysfs_lowmemorykiller:dir { open getattr read search ioctl lock watch watch_reads };
#line 19
allow lmkd sysfs_lowmemorykiller:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 19
allow lmkd sysfs_lowmemorykiller:file { open append write lock map };
# setsched and send kill signals to any registered process
allow lmkd domain:process { setsched sigkill };
# TODO: delete this line b/131761776
allow lmkd kernel:process { setsched };
# Clean up old cgroups
allow lmkd cgroup:dir { remove_name rmdir };
allow lmkd cgroup_v2:dir { remove_name rmdir };
# Allow to read memcg stats
allow lmkd cgroup:file { getattr open read ioctl lock map watch watch_reads };
allow lmkd cgroup_v2:file { getattr open read ioctl lock map watch watch_reads };
# Set self to SCHED_FIFO
allow lmkd self:{ capability cap_userns } sys_nice;
allow lmkd proc_zoneinfo:file { getattr open read ioctl lock map watch watch_reads };
allow lmkd proc_vmstat:file { getattr open read ioctl lock map watch watch_reads };
# live lock watchdog process allowed to look through /proc/
allow lmkd domain:dir { search open read };
allow lmkd domain:file { open read };
# live lock watchdog process allowed to dump process trace and
# reboot because orderly shutdown may not be possible.
allow lmkd proc_sysrq:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Read /proc/lowmemorykiller
allow lmkd proc_lowmemorykiller:file { getattr open read ioctl lock map watch watch_reads };
# Read /proc/meminfo
allow lmkd proc_meminfo:file { getattr open read ioctl lock map watch watch_reads };
# Read /proc/pressure/cpu and /proc/pressure/io
allow lmkd proc_pressure_cpu:file { getattr open read ioctl lock map watch watch_reads };
allow lmkd proc_pressure_io:file { getattr open read ioctl lock map watch watch_reads };
# Read/Write /proc/pressure/memory
allow lmkd proc_pressure_mem:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Allow lmkd to connect during reinit.
allow lmkd lmkd_socket:sock_file write;
# Allow lmkd to write to statsd.
#line 66
allow lmkd statsdw_socket:sock_file write;
#line 66
allow lmkd statsd:unix_dgram_socket sendto;
#line 66
### neverallow rules
# never honor LD_PRELOAD
neverallow * lmkd:process noatsecure;
neverallow lmkd self:{ capability cap_userns } sys_ptrace;
#line 1 "system/sepolicy/public/logd.te"
# android user-space log manager
type logd, domain, mlstrustedsubject;
type logd_exec, system_file_type, exec_type, file_type;
# Read access to pseudo filesystems.
#line 6
allow logd cgroup:dir { open getattr read search ioctl lock watch watch_reads };
#line 6
allow logd cgroup:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 6
#line 7
allow logd cgroup_v2:dir { open getattr read search ioctl lock watch watch_reads };
#line 7
allow logd cgroup_v2:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 7
#line 8
allow logd proc_kmsg:dir { open getattr read search ioctl lock watch watch_reads };
#line 8
allow logd proc_kmsg:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 8
#line 9
allow logd proc_meminfo:dir { open getattr read search ioctl lock watch watch_reads };
#line 9
allow logd proc_meminfo:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 9
allow logd self:{ capability cap_userns } { setuid setgid setpcap sys_nice audit_control };
allow logd self:{ capability2 cap2_userns } syslog;
allow logd self:netlink_audit_socket { { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } } nlmsg_write };
allow logd kernel:system syslog_read;
allow logd kmsg_device:chr_file { getattr { open append write lock map } };
allow logd system_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
allow logd packages_list_file:file { getattr open read ioctl lock map watch watch_reads };
allow logd pstorefs:dir search;
allow logd pstorefs:file { getattr open read ioctl lock map watch watch_reads };
#line 24
allow logd runtime_event_log_tags_file:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 27
allow logd domain:dir { open getattr read search ioctl lock watch watch_reads };
#line 27
allow logd domain:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 27
allow logd kernel:system syslog_mod;
#line 31
# Group AID_LOG checked by filesystem & logd
#line 31
# to permit control commands
#line 31
#line 31
allow logd logd_socket:sock_file write;
#line 31
allow logd logd:unix_stream_socket connectto;
#line 31
#line 31
#line 32
allow logd runtime_event_log_tags_file:file { getattr open read ioctl lock map watch watch_reads };
#line 32
allow runtime_event_log_tags_file tmpfs:filesystem associate;
# Typically harmlessly blindly trying to access via liblog
# event tag mapping while in the untrusted_app domain.
# Access for that domain is controlled and gated via the
# event log tag service (albeit at a performance penalty,
# expected to be locally cached).
dontaudit domain runtime_event_log_tags_file:file { map open read };
# Logd sets defaults if certain properties are empty.
#line 43
#line 43
allow logd property_socket:sock_file write;
#line 43
allow logd init:unix_stream_socket connectto;
#line 43
#line 43
allow logd logd_prop:property_service set;
#line 43
#line 43
allow logd logd_prop:file { getattr open read map };
#line 43
#line 43
###
### Neverallow rules
###
### logd should NEVER do any of this
# Block device access.
neverallow logd dev_type:blk_file { read write };
# ptrace any other app
neverallow logd domain:process ptrace;
# ... and nobody may ptrace me (except on userdebug or eng builds)
neverallow { domain } logd:process ptrace;
# Write to /system.
neverallow logd system_file_type:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } write;
# Write to files in /data/data or system files on /data
neverallow logd {
app_data_file_type
system_data_file
packages_list_file
-shell_data_file # for bugreports
}:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } write;
# Only init is allowed to enter the logd domain via exec()
neverallow { domain -init } logd:process transition;
neverallow * logd:process dyntransition;
# protect the event-log-tags file
neverallow {
domain
-init
-logd
} runtime_event_log_tags_file:file { append create link unlink relabelfrom rename setattr write };
#line 1 "system/sepolicy/public/logpersist.te"
# android debug logging, logpersist domains
type logpersist, domain;
# logcatd is a shell script that execs logcat with various parameters.
allow logpersist shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow logpersist logcat_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
###
### Neverallow rules
###
### logpersist should NEVER do any of this
# Block device access.
neverallow logpersist dev_type:blk_file { read write };
# ptrace any other app
neverallow logpersist domain:process ptrace;
# Write to files in /data/data or system files on /data except misc_logd_file
neverallow logpersist { app_data_file_type system_data_file }:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } write;
# Only init should be allowed to enter the logpersist domain via exec()
# Following is a list of debug domains we know that transition to logpersist
# neverallow_with_undefined_domains {
# domain
# -init # goldfish, logcatd, raft
# -mmi # bat, mtp8996, msmcobalt
# -system_app # Smith.apk
# } logpersist:process transition;
neverallow * logpersist:process dyntransition;
allowxperm logpersist misc_logd_file:file ioctl {
0xf512
0x40086602
};
#line 1 "system/sepolicy/public/mdnsd.te"
# mdns daemon
type mdnsd, domain;
#line 1 "system/sepolicy/public/mediadrmserver.te"
# mediadrmserver - mediadrm daemon
type mediadrmserver, domain;
type mediadrmserver_exec, system_file_type, exec_type, file_type;
typeattribute mediadrmserver mlstrustedsubject;
#line 7
typeattribute mediadrmserver netdomain;
#line 7
#line 8
# Call the servicemanager and transfer references to it.
#line 8
allow mediadrmserver servicemanager:binder { call transfer };
#line 8
# Allow servicemanager to send out callbacks
#line 8
allow servicemanager mediadrmserver:binder { call transfer };
#line 8
# servicemanager performs getpidcon on clients.
#line 8
allow servicemanager mediadrmserver:dir search;
#line 8
allow servicemanager mediadrmserver:file { read open };
#line 8
allow servicemanager mediadrmserver:process getattr;
#line 8
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 8
# all domains in domain.te.
#line 8
#line 9
# Call the server domain and optionally transfer references to it.
#line 9
allow mediadrmserver binderservicedomain:binder { call transfer };
#line 9
# Allow the serverdomain to transfer references to the client on the reply.
#line 9
allow binderservicedomain mediadrmserver:binder transfer;
#line 9
# Receive and use open files from the server.
#line 9
allow mediadrmserver binderservicedomain:fd use;
#line 9
#line 10
# Call the server domain and optionally transfer references to it.
#line 10
allow mediadrmserver appdomain:binder { call transfer };
#line 10
# Allow the serverdomain to transfer references to the client on the reply.
#line 10
allow appdomain mediadrmserver:binder transfer;
#line 10
# Receive and use open files from the server.
#line 10
allow mediadrmserver appdomain:fd use;
#line 10
#line 11
typeattribute mediadrmserver binderservicedomain;
#line 11
#line 12
typeattribute mediadrmserver halclientdomain;
#line 12
typeattribute mediadrmserver hal_drm_client;
#line 12
#line 12
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 12
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 12
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 12
#line 12
typeattribute mediadrmserver hal_drm;
#line 12
# Find passthrough HAL implementations
#line 12
allow hal_drm system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 12
allow hal_drm vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 12
allow hal_drm vendor_file:file { read open getattr execute map };
#line 12
#line 12
#line 14
allow mediadrmserver mediadrmserver_service:service_manager { add find };
#line 14
neverallow { domain -mediadrmserver } mediadrmserver_service:service_manager add;
#line 14
#line 14
# On debug builds with root, allow binder services to use binder over TCP.
#line 14
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 14
#line 14
allow mediadrmserver mediaserver_service:service_manager find;
allow mediadrmserver mediametrics_service:service_manager find;
allow mediadrmserver processinfo_service:service_manager find;
allow mediadrmserver surfaceflinger_service:service_manager find;
allow mediadrmserver system_file:dir { open getattr read search ioctl lock watch watch_reads };
# TODO(b/80317992): remove
#line 22
# Call the server domain and optionally transfer references to it.
#line 22
allow mediadrmserver hal_omx_server:binder { call transfer };
#line 22
# Allow the serverdomain to transfer references to the client on the reply.
#line 22
allow hal_omx_server mediadrmserver:binder transfer;
#line 22
# Receive and use open files from the server.
#line 22
allow mediadrmserver hal_omx_server:fd use;
#line 22
###
### neverallow rules
###
# mediadrmserver should never execute any executable without a
# domain transition
neverallow mediadrmserver { file_type fs_type }:file execute_no_trans;
# do not allow privileged socket ioctl commands
neverallowxperm mediadrmserver domain:{ rawip_socket tcp_socket udp_socket } ioctl
#line 33
{
#line 33
# qualcomm rmnet ioctls
#line 33
0x00006900 0x00006902
#line 33
# socket ioctls
#line 33
0x0000890b 0x0000890c 0x0000890d 0x00008911 0x00008914 0x00008916
#line 33
0x00008918 0x0000891a 0x0000891c 0x0000891d 0x0000891e 0x0000891f
#line 33
0x00008920 0x00008922 0x00008923 0x00008924 0x00008925 0x00008926
#line 33
0x00008927 0x00008929 0x00008930 0x00008931 0x00008932
#line 33
0x00008934 0x00008935 0x00008936 0x00008937 0x00008939 0x00008940 0x00008941
#line 33
0x00008943 0x00008946 0x00008947 0x00008948 0x00008949 0x0000894a
#line 33
0x0000894b 0x00008953 0x00008954 0x00008955 0x00008960 0x00008961 0x00008962 0x00008970
#line 33
0x00008971 0x00008980 0x00008981 0x00008982 0x00008983 0x00008990
#line 33
0x00008991 0x00008992 0x00008993 0x00008994
#line 33
0x00008995 0x000089a0 0x000089a1 0x000089a2 0x000089a3 0x000089b0
#line 33
# device and protocol specific ioctls
#line 33
0x000089f0-0x000089ff
#line 33
0x000089e0-0x000089ef
#line 33
# Wireless extension ioctls
#line 33
0x00008b00 0x00008b02 0x00008b04 0x00008b06 0x00008b08 0x00008b0a
#line 33
0x00008b0c 0x00008b0e 0x00008b10 0x00008b14 0x00008b15 0x00008b16 0x00008b17
#line 33
0x00008b18 0x00008b19 0x00008b1a 0x00008b1b 0x00008b1c 0x00008b1d
#line 33
0x00008b20 0x00008b22 0x00008b24 0x00008b26 0x00008b28 0x00008b2a
#line 33
0x00008b2b 0x00008b2c 0x00008b30 0x00008b31 0x00008b32 0x00008b33
#line 33
0x00008b34 0x00008b35 0x00008b36
#line 33
# Dev private ioctl i.e. hardware specific ioctls
#line 33
0x00008be0-0x00008bff
#line 33
};
#line 1 "system/sepolicy/public/mediaextractor.te"
# mediaextractor - multimedia daemon
type mediaextractor, domain;
type mediaextractor_exec, system_file_type, exec_type, file_type;
type mediaextractor_tmpfs, file_type;
typeattribute mediaextractor mlstrustedsubject;
#line 8
# Call the servicemanager and transfer references to it.
#line 8
allow mediaextractor servicemanager:binder { call transfer };
#line 8
# Allow servicemanager to send out callbacks
#line 8
allow servicemanager mediaextractor:binder { call transfer };
#line 8
# servicemanager performs getpidcon on clients.
#line 8
allow servicemanager mediaextractor:dir search;
#line 8
allow servicemanager mediaextractor:file { read open };
#line 8
allow servicemanager mediaextractor:process getattr;
#line 8
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 8
# all domains in domain.te.
#line 8
#line 9
# Call the server domain and optionally transfer references to it.
#line 9
allow mediaextractor binderservicedomain:binder { call transfer };
#line 9
# Allow the serverdomain to transfer references to the client on the reply.
#line 9
allow binderservicedomain mediaextractor:binder transfer;
#line 9
# Receive and use open files from the server.
#line 9
allow mediaextractor binderservicedomain:fd use;
#line 9
#line 10
# Call the server domain and optionally transfer references to it.
#line 10
allow mediaextractor appdomain:binder { call transfer };
#line 10
# Allow the serverdomain to transfer references to the client on the reply.
#line 10
allow appdomain mediaextractor:binder transfer;
#line 10
# Receive and use open files from the server.
#line 10
allow mediaextractor appdomain:fd use;
#line 10
#line 11
typeattribute mediaextractor binderservicedomain;
#line 11
#line 13
allow mediaextractor mediaextractor_service:service_manager { add find };
#line 13
neverallow { domain -mediaextractor } mediaextractor_service:service_manager add;
#line 13
#line 13
# On debug builds with root, allow binder services to use binder over TCP.
#line 13
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 13
#line 13
allow mediaextractor mediametrics_service:service_manager find;
allow mediaextractor hidl_token_hwservice:hwservice_manager find;
allow mediaextractor system_server:fd use;
#line 19
typeattribute mediaextractor halclientdomain;
#line 19
typeattribute mediaextractor hal_cas_client;
#line 19
#line 19
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 19
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 19
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 19
#line 19
typeattribute mediaextractor hal_cas;
#line 19
# Find passthrough HAL implementations
#line 19
allow hal_cas system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 19
allow hal_cas vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 19
allow hal_cas vendor_file:file { read open getattr execute map };
#line 19
#line 19
#line 20
typeattribute mediaextractor halclientdomain;
#line 20
typeattribute mediaextractor hal_allocator_client;
#line 20
#line 20
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 20
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 20
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 20
#line 20
typeattribute mediaextractor hal_allocator;
#line 20
# Find passthrough HAL implementations
#line 20
allow hal_allocator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 20
allow hal_allocator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 20
allow hal_allocator vendor_file:file { read open getattr execute map };
#line 20
#line 20
#line 22
allow mediaextractor cgroup:dir { open getattr read search ioctl lock watch watch_reads };
#line 22
allow mediaextractor cgroup:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 22
#line 23
allow mediaextractor cgroup_v2:dir { open getattr read search ioctl lock watch watch_reads };
#line 23
allow mediaextractor cgroup_v2:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 23
allow mediaextractor proc_meminfo:file { getattr open read ioctl lock map watch watch_reads };
#line 26
#line 26
allow mediaextractor anr_data_file:file append;
#line 26
allow mediaextractor dumpstate:fd use;
#line 26
allow mediaextractor incidentd:fd use;
#line 26
# TODO: Figure out why write is needed.
#line 26
allow mediaextractor dumpstate:fifo_file { append write };
#line 26
allow mediaextractor incidentd:fifo_file { append write };
#line 26
allow mediaextractor system_server:fifo_file { append write };
#line 26
allow mediaextractor tombstoned:unix_stream_socket connectto;
#line 26
allow mediaextractor tombstoned:fd use;
#line 26
allow mediaextractor tombstoned_crash_socket:sock_file write;
#line 26
allow mediaextractor tombstone_data_file:file append;
#line 26
# allow mediaextractor read permissions for file sources
allow mediaextractor { sdcard_type fuse }:file { getattr read };
allow mediaextractor media_rw_data_file:file { getattr read };
allow mediaextractor { app_data_file privapp_data_file }:file { getattr read };
# Read resources from open apk files passed over Binder
allow mediaextractor apk_data_file:file { read getattr };
allow mediaextractor asec_apk_file:file { read getattr };
allow mediaextractor ringtone_file:file { read getattr };
# overlay package access
allow mediaextractor vendor_overlay_file:file { read map };
# scan extractor library directory to dynamically load extractors
allow mediaextractor system_file:dir { read open };
###
### neverallow rules
###
# mediaextractor should never execute any executable without a
# domain transition
neverallow mediaextractor { file_type fs_type }:file execute_no_trans;
# The goal of the mediaserver split is to place media processing code into
# restrictive sandboxes with limited responsibilities and thus limited
# permissions. Example: Audioserver is only responsible for controlling audio
# hardware and processing audio content. Cameraserver does the same for camera
# hardware/content. Etc.
#
# Media processing code is inherently risky and thus should have limited
# permissions and be isolated from the rest of the system and network.
# Lengthier explanation here:
# https://android-developers.googleblog.com/2016/05/hardening-media-stack.html
neverallow mediaextractor domain:{ udp_socket rawip_socket } *;
neverallow mediaextractor { domain }:tcp_socket *;
# mediaextractor should not be opening /data files directly. Any files
# it touches (with a few exceptions) need to be passed to it via a file
# descriptor opened outside the process.
neverallow mediaextractor {
data_file_type
# for loading media extractor plugins
}:file open;
#line 1 "system/sepolicy/public/mediametrics.te"
# mediametrics - daemon for collecting media.metrics data
type mediametrics, domain;
type mediametrics_exec, system_file_type, exec_type, file_type;
#line 6
# Call the servicemanager and transfer references to it.
#line 6
allow mediametrics servicemanager:binder { call transfer };
#line 6
# Allow servicemanager to send out callbacks
#line 6
allow servicemanager mediametrics:binder { call transfer };
#line 6
# servicemanager performs getpidcon on clients.
#line 6
allow servicemanager mediametrics:dir search;
#line 6
allow servicemanager mediametrics:file { read open };
#line 6
allow servicemanager mediametrics:process getattr;
#line 6
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 6
# all domains in domain.te.
#line 6
#line 7
# Call the server domain and optionally transfer references to it.
#line 7
allow mediametrics binderservicedomain:binder { call transfer };
#line 7
# Allow the serverdomain to transfer references to the client on the reply.
#line 7
allow binderservicedomain mediametrics:binder transfer;
#line 7
# Receive and use open files from the server.
#line 7
allow mediametrics binderservicedomain:fd use;
#line 7
#line 8
typeattribute mediametrics binderservicedomain;
#line 8
#line 10
allow mediametrics mediametrics_service:service_manager { add find };
#line 10
neverallow { domain -mediametrics } mediametrics_service:service_manager add;
#line 10
#line 10
# On debug builds with root, allow binder services to use binder over TCP.
#line 10
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 10
#line 10
allow mediametrics system_server:fd use;
#line 14
allow mediametrics cgroup:dir { open getattr read search ioctl lock watch watch_reads };
#line 14
allow mediametrics cgroup:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 14
#line 15
allow mediametrics cgroup_v2:dir { open getattr read search ioctl lock watch watch_reads };
#line 15
allow mediametrics cgroup_v2:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 15
allow mediametrics proc_meminfo:file { getattr open read ioctl lock map watch watch_reads };
# allows interactions with dumpsys to GMScore
allow mediametrics { app_data_file privapp_data_file }:file write;
# allow access to package manager for uid->apk mapping
allow mediametrics package_native_service:service_manager find;
# Allow metrics service to send information to statsd socket.
#line 25
allow mediametrics statsdw_socket:sock_file write;
#line 25
allow mediametrics statsd:unix_dgram_socket sendto;
#line 25
###
### neverallow rules
###
# mediametrics should never execute any executable without a
# domain transition
neverallow mediametrics { file_type fs_type }:file execute_no_trans;
# The goal of the mediaserver split is to place media processing code into
# restrictive sandboxes with limited responsibilities and thus limited
# permissions. Example: Audioserver is only responsible for controlling audio
# hardware and processing audio content. Cameraserver does the same for camera
# hardware/content. Etc.
#
# Media processing code is inherently risky and thus should have limited
# permissions and be isolated from the rest of the system and network.
# Lengthier explanation here:
# https://android-developers.googleblog.com/2016/05/hardening-media-stack.html
neverallow mediametrics domain:{ udp_socket rawip_socket } *;
neverallow mediametrics { domain }:tcp_socket *;
#line 1 "system/sepolicy/public/mediaprovider.te"
###
### A domain for android.process.media, which contains both
### MediaProvider and DownloadProvider and associated services.
###
type mediaprovider, domain;
#line 1 "system/sepolicy/public/mediaserver.te"
# mediaserver - multimedia daemon
type mediaserver, domain;
type mediaserver_exec, system_file_type, exec_type, file_type;
type mediaserver_tmpfs, file_type;
typeattribute mediaserver mlstrustedsubject;
#line 8
typeattribute mediaserver netdomain;
#line 8
#line 10
allow mediaserver sdcard_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 10
allow mediaserver sdcard_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 10
#line 11
allow mediaserver fuse:dir { open getattr read search ioctl lock watch watch_reads };
#line 11
allow mediaserver fuse:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 11
#line 12
allow mediaserver cgroup:dir { open getattr read search ioctl lock watch watch_reads };
#line 12
allow mediaserver cgroup:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 12
#line 13
allow mediaserver cgroup_v2:dir { open getattr read search ioctl lock watch watch_reads };
#line 13
allow mediaserver cgroup_v2:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 13
# stat /proc/self
allow mediaserver proc:lnk_file getattr;
# open /vendor/lib/mediadrm
allow mediaserver system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 24
#line 26
# Call the servicemanager and transfer references to it.
#line 26
allow mediaserver servicemanager:binder { call transfer };
#line 26
# Allow servicemanager to send out callbacks
#line 26
allow servicemanager mediaserver:binder { call transfer };
#line 26
# servicemanager performs getpidcon on clients.
#line 26
allow servicemanager mediaserver:dir search;
#line 26
allow servicemanager mediaserver:file { read open };
#line 26
allow servicemanager mediaserver:process getattr;
#line 26
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 26
# all domains in domain.te.
#line 26
#line 27
# Call the server domain and optionally transfer references to it.
#line 27
allow mediaserver binderservicedomain:binder { call transfer };
#line 27
# Allow the serverdomain to transfer references to the client on the reply.
#line 27
allow binderservicedomain mediaserver:binder transfer;
#line 27
# Receive and use open files from the server.
#line 27
allow mediaserver binderservicedomain:fd use;
#line 27
#line 28
# Call the server domain and optionally transfer references to it.
#line 28
allow mediaserver appdomain:binder { call transfer };
#line 28
# Allow the serverdomain to transfer references to the client on the reply.
#line 28
allow appdomain mediaserver:binder transfer;
#line 28
# Receive and use open files from the server.
#line 28
allow mediaserver appdomain:fd use;
#line 28
#line 29
typeattribute mediaserver binderservicedomain;
#line 29
allow mediaserver media_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow mediaserver media_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow mediaserver { app_data_file privapp_data_file }:file { append getattr ioctl lock map read write };
allow mediaserver { sdcard_type fuse }:file write;
allow mediaserver gpu_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow mediaserver gpu_device:dir { open getattr read search ioctl lock watch watch_reads };
allow mediaserver video_device:dir { open getattr read search ioctl lock watch watch_reads };
allow mediaserver video_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Read resources from open apk files passed over Binder.
allow mediaserver apk_data_file:file { read getattr };
allow mediaserver asec_apk_file:file { read getattr };
allow mediaserver ringtone_file:file { read getattr };
# Read /data/data/com.android.providers.telephony files passed over Binder.
allow mediaserver radio_data_file:file { read getattr };
# Use pipes passed over Binder from app domains.
allow mediaserver appdomain:fifo_file { getattr read write };
allow mediaserver rpmsg_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Inter System processes communicate over named pipe (FIFO)
allow mediaserver system_server:fifo_file { getattr open read ioctl lock map watch watch_reads };
#line 56
allow mediaserver media_rw_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 56
allow mediaserver media_rw_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 56
# Grant access to read files on appfuse.
allow mediaserver app_fuse_file:file { read getattr };
# Needed on some devices for playing DRM protected content,
# but seems expected and appropriate for all devices.
#line 63
allow mediaserver drmserver_socket:sock_file write;
#line 63
allow mediaserver drmserver:unix_stream_socket connectto;
#line 63
# Needed on some devices for playing audio on paired BT device,
# but seems appropriate for all devices.
#line 67
allow mediaserver bluetooth_socket:sock_file write;
#line 67
allow mediaserver bluetooth:unix_stream_socket connectto;
#line 67
# Needed for mediaserver to send information to statsd socket.
#line 70
allow mediaserver statsdw_socket:sock_file write;
#line 70
allow mediaserver statsd:unix_dgram_socket sendto;
#line 70
#line 72
allow mediaserver mediaserver_service:service_manager { add find };
#line 72
neverallow { domain -mediaserver } mediaserver_service:service_manager add;
#line 72
#line 72
# On debug builds with root, allow binder services to use binder over TCP.
#line 72
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 72
#line 72
allow mediaserver activity_service:service_manager find;
allow mediaserver appops_service:service_manager find;
allow mediaserver audio_service:service_manager find;
allow mediaserver audioserver_service:service_manager find;
allow mediaserver cameraserver_service:service_manager find;
allow mediaserver batterystats_service:service_manager find;
allow mediaserver drmserver_service:service_manager find;
allow mediaserver mediaextractor_service:service_manager find;
allow mediaserver mediametrics_service:service_manager find;
allow mediaserver media_session_service:service_manager find;
allow mediaserver package_native_service:service_manager find;
allow mediaserver permission_service:service_manager find;
allow mediaserver permission_checker_service:service_manager find;
allow mediaserver power_service:service_manager find;
allow mediaserver processinfo_service:service_manager find;
allow mediaserver scheduling_policy_service:service_manager find;
allow mediaserver surfaceflinger_service:service_manager find;
# for ModDrm/MediaPlayer
allow mediaserver mediadrmserver_service:service_manager find;
# For hybrid interfaces
allow mediaserver hidl_token_hwservice:hwservice_manager find;
# /oem access
allow mediaserver oemfs:dir search;
allow mediaserver oemfs:file { getattr open read ioctl lock map watch watch_reads };
# /oem boot animation file
allow mediaserver bootanim_oem_file:file { getattr open read ioctl lock map watch watch_reads };
# /vendor apk access
allow mediaserver vendor_app_file:file { read map getattr };
#line 107
allow drmserver mediaserver:dir search;
#line 107
allow drmserver mediaserver:file { read open };
#line 107
allow drmserver mediaserver:process getattr;
#line 107
allow mediaserver drmserver:drmservice {
consumeRights
setPlaybackStatus
openDecryptSession
closeDecryptSession
initializeDecryptUnit
decrypt
finalizeDecryptUnit
pread
};
# only allow unprivileged socket ioctl commands
allowxperm mediaserver self:{ rawip_socket tcp_socket udp_socket }
ioctl {
#line 121
{
#line 121
# Socket ioctls for gathering information about the interface
#line 121
0x00008906 0x00008907
#line 121
0x00008910 0x00008912 0x00008913 0x00008915 0x00008917 0x00008919
#line 121
0x0000891b 0x00008921 0x00008933 0x00008938 0x00008942
#line 121
# Wireless extension ioctls. Primarily get functions.
#line 121
0x00008b01 0x00008b05 0x00008b07 0x00008b09 0x00008b0b 0x00008b0d
#line 121
0x00008b0f 0x00008b11 0x00008b12 0x00008b13 0x00008b21 0x00008b23
#line 121
0x00008b25 0x00008b27 0x00008b29 0x00008b2d
#line 121
} {
#line 121
0x00005411 0x00005451 0x00005450 0x00005401 0x00005402 0x00005403 0x00005404 0x00005413 0x00005414
#line 121
0x0000540e 0x0000540b 0x00005410 0x0000540f
#line 121
} };
# Access to /data/media.
# This should be removed if sdcardfs is modified to alter the secontext for its
# accesses to the underlying FS.
allow mediaserver media_rw_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow mediaserver media_rw_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Access to media in /data/preloads
allow mediaserver preloads_media_file:file { getattr read ioctl };
allow mediaserver ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
allow mediaserver dmabuf_system_heap_device:chr_file { getattr open read ioctl lock map watch watch_reads };
allow mediaserver dmabuf_system_secure_heap_device:chr_file { getattr open read ioctl lock map watch watch_reads };
allow mediaserver hal_graphics_allocator:fd use;
allow mediaserver hal_graphics_composer:fd use;
allow mediaserver hal_camera:fd use;
allow mediaserver system_server:fd use;
# b/120491318 allow mediaserver to access void:fd
allow mediaserver vold:fd use;
# overlay package access
allow mediaserver vendor_overlay_file:file { read getattr map };
#line 147
typeattribute mediaserver halclientdomain;
#line 147
typeattribute mediaserver hal_allocator_client;
#line 147
#line 147
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 147
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 147
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 147
#line 147
typeattribute mediaserver hal_allocator;
#line 147
# Find passthrough HAL implementations
#line 147
allow hal_allocator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 147
allow hal_allocator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 147
allow hal_allocator vendor_file:file { read open getattr execute map };
#line 147
#line 147
###
### neverallow rules
###
# mediaserver should never execute any executable without a
# domain transition
neverallow mediaserver { file_type fs_type }:file execute_no_trans;
# do not allow privileged socket ioctl commands
neverallowxperm mediaserver domain:{ rawip_socket tcp_socket udp_socket } ioctl
#line 158
{
#line 158
# qualcomm rmnet ioctls
#line 158
0x00006900 0x00006902
#line 158
# socket ioctls
#line 158
0x0000890b 0x0000890c 0x0000890d 0x00008911 0x00008914 0x00008916
#line 158
0x00008918 0x0000891a 0x0000891c 0x0000891d 0x0000891e 0x0000891f
#line 158
0x00008920 0x00008922 0x00008923 0x00008924 0x00008925 0x00008926
#line 158
0x00008927 0x00008929 0x00008930 0x00008931 0x00008932
#line 158
0x00008934 0x00008935 0x00008936 0x00008937 0x00008939 0x00008940 0x00008941
#line 158
0x00008943 0x00008946 0x00008947 0x00008948 0x00008949 0x0000894a
#line 158
0x0000894b 0x00008953 0x00008954 0x00008955 0x00008960 0x00008961 0x00008962 0x00008970
#line 158
0x00008971 0x00008980 0x00008981 0x00008982 0x00008983 0x00008990
#line 158
0x00008991 0x00008992 0x00008993 0x00008994
#line 158
0x00008995 0x000089a0 0x000089a1 0x000089a2 0x000089a3 0x000089b0
#line 158
# device and protocol specific ioctls
#line 158
0x000089f0-0x000089ff
#line 158
0x000089e0-0x000089ef
#line 158
# Wireless extension ioctls
#line 158
0x00008b00 0x00008b02 0x00008b04 0x00008b06 0x00008b08 0x00008b0a
#line 158
0x00008b0c 0x00008b0e 0x00008b10 0x00008b14 0x00008b15 0x00008b16 0x00008b17
#line 158
0x00008b18 0x00008b19 0x00008b1a 0x00008b1b 0x00008b1c 0x00008b1d
#line 158
0x00008b20 0x00008b22 0x00008b24 0x00008b26 0x00008b28 0x00008b2a
#line 158
0x00008b2b 0x00008b2c 0x00008b30 0x00008b31 0x00008b32 0x00008b33
#line 158
0x00008b34 0x00008b35 0x00008b36
#line 158
# Dev private ioctl i.e. hardware specific ioctls
#line 158
0x00008be0-0x00008bff
#line 158
};
#line 1 "system/sepolicy/public/mediaswcodec.te"
type mediaswcodec, domain;
type mediaswcodec_exec, system_file_type, exec_type, file_type;
#line 4
typeattribute mediaswcodec halserverdomain;
#line 4
typeattribute mediaswcodec hal_codec2_server;
#line 4
typeattribute mediaswcodec hal_codec2;
#line 4
# mediaswcodec may use an input surface from a different Codec2 service or an
# OMX service
#line 8
typeattribute mediaswcodec halclientdomain;
#line 8
typeattribute mediaswcodec hal_codec2_client;
#line 8
#line 8
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 8
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 8
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 8
#line 8
typeattribute mediaswcodec hal_codec2;
#line 8
# Find passthrough HAL implementations
#line 8
allow hal_codec2 system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 8
allow hal_codec2 vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 8
allow hal_codec2 vendor_file:file { read open getattr execute map };
#line 8
#line 8
#line 9
typeattribute mediaswcodec halclientdomain;
#line 9
typeattribute mediaswcodec hal_omx_client;
#line 9
#line 9
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 9
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 9
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 9
#line 9
typeattribute mediaswcodec hal_omx;
#line 9
# Find passthrough HAL implementations
#line 9
allow hal_omx system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 9
allow hal_omx vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 9
allow hal_omx vendor_file:file { read open getattr execute map };
#line 9
#line 9
#line 11
typeattribute mediaswcodec halclientdomain;
#line 11
typeattribute mediaswcodec hal_allocator_client;
#line 11
#line 11
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 11
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 11
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 11
#line 11
typeattribute mediaswcodec hal_allocator;
#line 11
# Find passthrough HAL implementations
#line 11
allow hal_allocator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 11
allow hal_allocator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 11
allow hal_allocator vendor_file:file { read open getattr execute map };
#line 11
#line 11
#line 12
typeattribute mediaswcodec halclientdomain;
#line 12
typeattribute mediaswcodec hal_graphics_allocator_client;
#line 12
#line 12
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 12
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 12
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 12
#line 12
typeattribute mediaswcodec hal_graphics_allocator;
#line 12
# Find passthrough HAL implementations
#line 12
allow hal_graphics_allocator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 12
allow hal_graphics_allocator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 12
allow hal_graphics_allocator vendor_file:file { read open getattr execute map };
#line 12
#line 12
# get aac_drc_* properties
#line 15
allow mediaswcodec aac_drc_prop:file { getattr open read map };
#line 15
#line 17
#line 17
allow mediaswcodec anr_data_file:file append;
#line 17
allow mediaswcodec dumpstate:fd use;
#line 17
allow mediaswcodec incidentd:fd use;
#line 17
# TODO: Figure out why write is needed.
#line 17
allow mediaswcodec dumpstate:fifo_file { append write };
#line 17
allow mediaswcodec incidentd:fifo_file { append write };
#line 17
allow mediaswcodec system_server:fifo_file { append write };
#line 17
allow mediaswcodec tombstoned:unix_stream_socket connectto;
#line 17
allow mediaswcodec tombstoned:fd use;
#line 17
allow mediaswcodec tombstoned_crash_socket:sock_file write;
#line 17
allow mediaswcodec tombstone_data_file:file append;
#line 17
# mediaswcodec_server should never execute any executable without a
# domain transition
neverallow mediaswcodec { file_type fs_type }:file execute_no_trans;
# Media processing code is inherently risky and thus should have limited
# permissions and be isolated from the rest of the system and network.
# Lengthier explanation here:
# https://android-developers.googleblog.com/2016/05/hardening-media-stack.html
neverallow mediaswcodec domain:{ udp_socket rawip_socket } *;
neverallow mediaswcodec { domain }:tcp_socket *;
allow mediaswcodec dmabuf_system_heap_device:chr_file { getattr open read ioctl lock map watch watch_reads };
allow mediaswcodec dmabuf_system_secure_heap_device:chr_file { getattr open read ioctl lock map watch watch_reads };
allow mediaswcodec gpu_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow mediaswcodec gpu_device:dir { open getattr read search ioctl lock watch watch_reads };
#line 1 "system/sepolicy/public/mediatranscoding.te"
type mediatranscoding, domain;
#line 1 "system/sepolicy/public/modprobe.te"
type modprobe, domain;
allow modprobe proc_modules:file { getattr open read ioctl lock map watch watch_reads };
allow modprobe proc_cmdline:file { getattr open read ioctl lock map watch watch_reads };
allow modprobe self:{ capability cap_userns } sys_module;
allow modprobe kernel:key search;
allow modprobe system_dlkm_file:dir search;
allow modprobe system_dlkm_file:file { getattr open read ioctl lock map watch watch_reads };
allow modprobe system_dlkm_file:system module_load;
#line 13
#line 1 "system/sepolicy/public/mtp.te"
# vpn tunneling protocol manager
type mtp, domain;
#line 1 "system/sepolicy/public/net.te"
## Network types
type node, node_type;
type netif, netif_type;
type port, port_type;
###
### Domain with network access
###
# Use network sockets.
allow netdomain self:tcp_socket { create { { ioctl read getattr write setattr lock append bind connect getopt setopt shutdown map } listen accept } };
allow netdomain self:{ icmp_socket udp_socket rawip_socket } { create { ioctl read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# Connect to ports.
allow netdomain port_type:tcp_socket name_connect;
# See changes to the routing table.
allow netdomain self:netlink_route_socket { create read getattr write setattr lock append connect getopt setopt shutdown nlmsg_read };
# Talks to netd via dnsproxyd socket.
#line 20
allow netdomain dnsproxyd_socket:sock_file write;
#line 20
allow netdomain netd:unix_stream_socket connectto;
#line 20
# Talks to netd via fwmarkd socket.
#line 23
allow netdomain fwmarkd_socket:sock_file write;
#line 23
allow netdomain netd:unix_stream_socket connectto;
#line 23
#line 1 "system/sepolicy/public/netd.te"
# network manager
type netd, domain, mlstrustedsubject;
type netd_exec, system_file_type, exec_type, file_type;
#line 5
typeattribute netd netdomain;
#line 5
# Connect to mdnsd via mdnsd socket.
#line 7
allow netd mdnsd_socket:sock_file write;
#line 7
allow netd mdnsd:unix_stream_socket connectto;
#line 7
# in addition to ioctls allowlisted for all domains, grant netd priv_sock_ioctls.
allowxperm netd self:udp_socket ioctl
#line 9
{
#line 9
# qualcomm rmnet ioctls
#line 9
0x00006900 0x00006902
#line 9
# socket ioctls
#line 9
0x0000890b 0x0000890c 0x0000890d 0x00008911 0x00008914 0x00008916
#line 9
0x00008918 0x0000891a 0x0000891c 0x0000891d 0x0000891e 0x0000891f
#line 9
0x00008920 0x00008922 0x00008923 0x00008924 0x00008925 0x00008926
#line 9
0x00008927 0x00008929 0x00008930 0x00008931 0x00008932
#line 9
0x00008934 0x00008935 0x00008936 0x00008937 0x00008939 0x00008940 0x00008941
#line 9
0x00008943 0x00008946 0x00008947 0x00008948 0x00008949 0x0000894a
#line 9
0x0000894b 0x00008953 0x00008954 0x00008955 0x00008960 0x00008961 0x00008962 0x00008970
#line 9
0x00008971 0x00008980 0x00008981 0x00008982 0x00008983 0x00008990
#line 9
0x00008991 0x00008992 0x00008993 0x00008994
#line 9
0x00008995 0x000089a0 0x000089a1 0x000089a2 0x000089a3 0x000089b0
#line 9
# device and protocol specific ioctls
#line 9
0x000089f0-0x000089ff
#line 9
0x000089e0-0x000089ef
#line 9
# Wireless extension ioctls
#line 9
0x00008b00 0x00008b02 0x00008b04 0x00008b06 0x00008b08 0x00008b0a
#line 9
0x00008b0c 0x00008b0e 0x00008b10 0x00008b14 0x00008b15 0x00008b16 0x00008b17
#line 9
0x00008b18 0x00008b19 0x00008b1a 0x00008b1b 0x00008b1c 0x00008b1d
#line 9
0x00008b20 0x00008b22 0x00008b24 0x00008b26 0x00008b28 0x00008b2a
#line 9
0x00008b2b 0x00008b2c 0x00008b30 0x00008b31 0x00008b32 0x00008b33
#line 9
0x00008b34 0x00008b35 0x00008b36
#line 9
# Dev private ioctl i.e. hardware specific ioctls
#line 9
0x00008be0-0x00008bff
#line 9
};
#line 11
allow netd cgroup:dir { open getattr read search ioctl lock watch watch_reads };
#line 11
allow netd cgroup:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 11
allow netd system_server:fd use;
allow netd self:{ capability cap_userns } { net_admin net_raw kill };
# Note: fsetid is deliberately not included above. fsetid checks are
# triggered by chmod on a directory or file owned by a group other
# than one of the groups assigned to the current process to see if
# the setgid bit should be cleared, regardless of whether the setgid
# bit was even set. We do not appear to truly need this capability
# for netd to operate.
dontaudit netd self:{ capability cap_userns } fsetid;
# Allow netd to open /dev/tun, set it up and pass it to clatd
allow netd tun_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allowxperm netd tun_device:chr_file ioctl { 0x800454d2 0x400454ca };
allow netd self:tun_socket create;
allow netd self:netlink_kobject_uevent_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow netd self:netlink_route_socket nlmsg_write;
allow netd self:netlink_nflog_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow netd self:netlink_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow netd self:netlink_tcpdiag_socket { { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } } nlmsg_read nlmsg_write };
allow netd self:netlink_generic_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow netd self:netlink_netfilter_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow netd shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow netd system_file:file { getattr execute execute_no_trans map };
allow netd vendor_file:file { getattr execute execute_no_trans map };
allow netd devpts:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Acquire advisory lock on /system/etc/xtables.lock. If this file doesn't
# exist, suppress the denial.
allow netd system_file:file lock;
dontaudit netd system_file:dir write;
# Allow netd to write to qtaguid ctrl file.
# TODO: Add proper rules to prevent other process to access qtaguid_proc file
# after migration complete
allow netd proc_qtaguid_ctrl:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Allow netd to read /dev/qtaguid. This is the same privilege level that normal apps have.
allow netd qtaguid_device:chr_file { getattr open read ioctl lock map watch watch_reads };
#line 53
allow netd proc_net_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 53
allow netd proc_net_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 53
# For /proc/sys/net/ipv[46]/route/flush.
allow netd proc_net_type:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Enables PppController and interface enumeration (among others)
allow netd sysfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 59
allow netd sysfs_net:dir { open getattr read search ioctl lock watch watch_reads };
#line 59
allow netd sysfs_net:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 59
# Allows setting interface MTU
allow netd sysfs_net:file { open append write lock map };
# TODO: added to match above sysfs rule. Remove me?
allow netd sysfs_usb:file write;
#line 67
allow netd cgroup_v2:dir { open getattr read search ioctl lock watch watch_reads };
#line 67
allow netd cgroup_v2:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 67
# TODO: netd previously thought it needed these permissions to do WiFi related
# work. However, after all the WiFi stuff is gone, we still need them.
# Why?
allow netd self:{ capability cap_userns } { dac_override dac_read_search chown };
# Needed to update /data/misc/net/rt_tables
allow netd net_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow netd net_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow netd self:{ capability cap_userns } fowner;
# Needed to lock the iptables lock.
allow netd system_file:file lock;
# Allow netd to spawn dnsmasq in it's own domain
allow netd dnsmasq:process { sigkill signal };
# Allow netd to publish a binder service and make binder calls.
#line 86
# Call the servicemanager and transfer references to it.
#line 86
allow netd servicemanager:binder { call transfer };
#line 86
# Allow servicemanager to send out callbacks
#line 86
allow servicemanager netd:binder { call transfer };
#line 86
# servicemanager performs getpidcon on clients.
#line 86
allow servicemanager netd:dir search;
#line 86
allow servicemanager netd:file { read open };
#line 86
allow servicemanager netd:process getattr;
#line 86
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 86
# all domains in domain.te.
#line 86
#line 87
allow netd netd_service:service_manager { add find };
#line 87
neverallow { domain -netd } netd_service:service_manager add;
#line 87
#line 87
# On debug builds with root, allow binder services to use binder over TCP.
#line 87
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 87
#line 87
#line 88
allow netd dnsresolver_service:service_manager { add find };
#line 88
neverallow { domain -netd } dnsresolver_service:service_manager add;
#line 88
#line 88
# On debug builds with root, allow binder services to use binder over TCP.
#line 88
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 88
#line 88
#line 89
allow netd mdns_service:service_manager { add find };
#line 89
neverallow { domain -netd } mdns_service:service_manager add;
#line 89
#line 89
# On debug builds with root, allow binder services to use binder over TCP.
#line 89
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 89
#line 89
allow netd dumpstate:fifo_file { getattr write };
# Allow netd to call into the system server so it can check permissions.
allow netd system_server:binder call;
allow netd permission_service:service_manager find;
# Allow netd to talk to the framework service which collects netd events.
allow netd netd_listener_service:service_manager find;
# Allow netd to operate on sockets that are passed to it.
allow netd netdomain:{
icmp_socket
tcp_socket
udp_socket
rawip_socket
tun_socket
} { read write getattr setattr getopt setopt };
allow netd netdomain:fd use;
# give netd permission to read and write netlink xfrm
allow netd self:netlink_xfrm_socket { { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } } nlmsg_write nlmsg_read };
# Allow netd to register as hal server.
#line 113
allow netd system_net_netd_hwservice:hwservice_manager { add find };
#line 113
allow netd hidl_base_hwservice:hwservice_manager add;
#line 113
neverallow { domain -netd } system_net_netd_hwservice:hwservice_manager add;
#line 113
#line 114
# Call the hwservicemanager and transfer references to it.
#line 114
allow netd hwservicemanager:binder { call transfer };
#line 114
# Allow hwservicemanager to send out callbacks
#line 114
allow hwservicemanager netd:binder { call transfer };
#line 114
# hwservicemanager performs getpidcon on clients.
#line 114
allow hwservicemanager netd:dir search;
#line 114
allow hwservicemanager netd:file { read open map };
#line 114
allow hwservicemanager netd:process getattr;
#line 114
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 114
# all domains in domain.te.
#line 114
# AIDL hal server
#line 117
# Call the server domain and optionally transfer references to it.
#line 117
allow system_net_netd_service servicemanager:binder { call transfer };
#line 117
# Allow the serverdomain to transfer references to the client on the reply.
#line 117
allow servicemanager system_net_netd_service:binder transfer;
#line 117
# Receive and use open files from the server.
#line 117
allow system_net_netd_service servicemanager:fd use;
#line 117
#line 118
allow netd system_net_netd_service:service_manager { add find };
#line 118
neverallow { domain -netd } system_net_netd_service:service_manager add;
#line 118
#line 118
# On debug builds with root, allow binder services to use binder over TCP.
#line 118
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 118
#line 118
###
### Neverallow rules
###
### netd should NEVER do any of this
# Block device access.
neverallow netd dev_type:blk_file { read write };
# ptrace any other app
neverallow netd { domain }:process ptrace;
# Write to /system.
neverallow netd system_file_type:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } write;
# Write to files in /data/data or system files on /data
neverallow netd { app_data_file_type system_data_file }:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } write;
# only system_server, dumpstate and network stack app may find netd service
neverallow {
domain
-system_server
-dumpstate
-network_stack
-netd
-netutils_wrapper
} netd_service:service_manager find;
# only system_server, dumpstate and network stack app may find dnsresolver service
neverallow {
domain
-system_server
-dumpstate
-network_stack
-netd
-netutils_wrapper
} dnsresolver_service:service_manager find;
# only system_server, dumpstate and network stack app may find mdns service
neverallow {
domain
-system_server
-dumpstate
-network_stack
-netd
-netutils_wrapper
} mdns_service:service_manager find;
# apps may not interact with netd over binder.
neverallow { appdomain -network_stack } netd:binder call;
neverallow netd { appdomain -network_stack }:binder call;
# If an already existing file is opened with O_CREATE, the kernel might generate
# a false report of a create denial. Silence these denials and make sure that
# inappropriate permissions are not granted.
neverallow netd proc_net:dir { add_name create link relabelfrom remove_name rename reparent rmdir setattr write };
dontaudit netd proc_net:dir write;
neverallow netd sysfs_net:dir { add_name create link relabelfrom remove_name rename reparent rmdir setattr write };
dontaudit netd sysfs_net:dir write;
# Netd should not have SYS_ADMIN privs.
neverallow netd self:capability sys_admin;
dontaudit netd self:capability sys_admin;
# Netd should not have SYS_MODULE privs, nor should it be requesting module loads
# (things it requires should be built directly into the kernel)
dontaudit netd self:capability sys_module;
dontaudit netd appdomain:unix_stream_socket { read write };
#line 1 "system/sepolicy/public/netutils_wrapper.te"
type netutils_wrapper, domain;
type netutils_wrapper_exec, system_file_type, exec_type, file_type;
neverallow domain netutils_wrapper_exec:file execute_no_trans;
#line 1 "system/sepolicy/public/network_stack.te"
# Network stack service app
type network_stack, domain;
#line 1 "system/sepolicy/public/nfc.te"
# nfc subsystem
type nfc, domain;
#line 1 "system/sepolicy/public/otapreopt_chroot.te"
# otapreopt_chroot seclabel
# TODO: Only present to allow mediatek/wembley-sepolicy to see it for validation reasons.
type otapreopt_chroot, domain;
#line 1 "system/sepolicy/public/perfetto.te"
type perfetto, domain, coredomain;
#line 1 "system/sepolicy/public/performanced.te"
# performanced
type performanced, domain, mlstrustedsubject;
type performanced_exec, system_file_type, exec_type, file_type;
# Needed to check for app permissions.
#line 6
# Call the servicemanager and transfer references to it.
#line 6
allow performanced servicemanager:binder { call transfer };
#line 6
# Allow servicemanager to send out callbacks
#line 6
allow servicemanager performanced:binder { call transfer };
#line 6
# servicemanager performs getpidcon on clients.
#line 6
allow servicemanager performanced:dir search;
#line 6
allow servicemanager performanced:file { read open };
#line 6
allow servicemanager performanced:process getattr;
#line 6
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 6
# all domains in domain.te.
#line 6
#line 7
# Call the server domain and optionally transfer references to it.
#line 7
allow performanced system_server:binder { call transfer };
#line 7
# Allow the serverdomain to transfer references to the client on the reply.
#line 7
allow system_server performanced:binder transfer;
#line 7
# Receive and use open files from the server.
#line 7
allow performanced system_server:fd use;
#line 7
allow performanced permission_service:service_manager find;
#line 10
# Mark the server domain as a PDX server.
#line 10
typeattribute performanced pdx_performance_client_server_type;
#line 10
# Allow the init process to create the initial endpoint socket.
#line 10
allow init pdx_performance_client_endpoint_socket_type:unix_stream_socket { create bind };
#line 10
# Allow the server domain to use the endpoint socket and accept connections on it.
#line 10
# Not using macro like "rw_socket_perms_no_ioctl" because it provides more rights
#line 10
# than we need (e.g. we don"t need "bind" or "connect").
#line 10
allow performanced pdx_performance_client_endpoint_socket_type:unix_stream_socket { read getattr write setattr lock append getopt setopt shutdown listen accept };
#line 10
# Allow the server domain to apply security context label to the channel socket pair (allow process to use setsockcreatecon_raw()).
#line 10
allow performanced self:process setsockcreate;
#line 10
# Allow the server domain to create a client channel socket.
#line 10
allow performanced pdx_performance_client_channel_socket_type:unix_stream_socket { create { { ioctl read getattr write setattr lock append bind connect getopt setopt shutdown map } listen accept } };
#line 10
# Prevent other processes from claiming to be a server for the same service.
#line 10
neverallow {domain -performanced} pdx_performance_client_endpoint_socket_type:unix_stream_socket { listen accept };
#line 10
# TODO: use file caps to obtain sys_nice instead of setuid / setgid.
allow performanced self:{ capability cap_userns } { setuid setgid sys_nice };
# Access /proc to validate we're only affecting threads in the same thread group.
# Performanced also shields unbound kernel threads. It scans every task in the
# root cpu set, but only affects the kernel threads.
#line 18
allow performanced { appdomain bufferhubd kernel surfaceflinger }:dir { open getattr read search ioctl lock watch watch_reads };
#line 18
allow performanced { appdomain bufferhubd kernel surfaceflinger }:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 18
dontaudit performanced domain:dir read;
allow performanced { appdomain bufferhubd kernel surfaceflinger }:process setsched;
# These /proc accesses only show up in permissive mode but they
# generate a lot of noise in the log.
#line 27
# Access /dev/cpuset/cpuset.cpus
#line 30
allow performanced cgroup:dir { open getattr read search ioctl lock watch watch_reads };
#line 30
allow performanced cgroup:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 30
#line 31
allow performanced cgroup_v2:dir { open getattr read search ioctl lock watch watch_reads };
#line 31
allow performanced cgroup_v2:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 31
#line 1 "system/sepolicy/public/platform_app.te"
###
### Apps signed with the platform key.
###
type platform_app, domain;
#line 1 "system/sepolicy/public/postinstall.te"
# Domain where the postinstall program runs during the update.
# Extend the permissions in this domain to allow this program to access other
# files needed by the specific device on your device's sepolicy directory.
type postinstall, domain;
# Allow postinstall to write to its stdout/stderr when redirected via pipes to
# update_engine.
allow postinstall update_engine_common:fd use;
allow postinstall update_engine_common:fifo_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Allow postinstall to read and execute directories and files in the same
# mounted location.
allow postinstall postinstall_file:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow postinstall postinstall_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
allow postinstall postinstall_file:dir { open getattr read search ioctl lock watch watch_reads };
# Allow postinstall to execute the shell or other system executables.
allow postinstall shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow postinstall system_file:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow postinstall toolbox_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Allow postinstall to execute shell in recovery.
#line 25
#
# For OTA dexopt.
#
# Allow postinstall scripts to talk to the system server.
#line 32
# Call the servicemanager and transfer references to it.
#line 32
allow postinstall servicemanager:binder { call transfer };
#line 32
# Allow servicemanager to send out callbacks
#line 32
allow servicemanager postinstall:binder { call transfer };
#line 32
# servicemanager performs getpidcon on clients.
#line 32
allow servicemanager postinstall:dir search;
#line 32
allow servicemanager postinstall:file { read open };
#line 32
allow servicemanager postinstall:process getattr;
#line 32
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 32
# all domains in domain.te.
#line 32
#line 33
# Call the server domain and optionally transfer references to it.
#line 33
allow postinstall system_server:binder { call transfer };
#line 33
# Allow the serverdomain to transfer references to the client on the reply.
#line 33
allow system_server postinstall:binder transfer;
#line 33
# Receive and use open files from the server.
#line 33
allow postinstall system_server:fd use;
#line 33
# Need to talk to the otadexopt service.
allow postinstall otadexopt_service:service_manager find;
# Allow postinstall scripts to trigger f2fs garbage collection
allow postinstall sysfs_fs_f2fs:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow postinstall sysfs_fs_f2fs:dir { open getattr read search ioctl lock watch watch_reads };
# No domain other than update_engine and recovery (via update_engine_sideload)
# should transition to postinstall, as it is only meant to run during the
# update.
neverallow { domain -update_engine -recovery } postinstall:process { transition dyntransition };
#line 1 "system/sepolicy/public/ppp.te"
# Point to Point Protocol daemon
type ppp, domain;
#line 1 "system/sepolicy/public/priv_app.te"
###
### A domain for further sandboxing privileged apps.
###
type priv_app, domain;
#line 1 "system/sepolicy/public/prng_seeder.te"
# PRNG seeder daemon
type prng_seeder, domain;
#line 1 "system/sepolicy/public/profman.te"
# profman
type profman, domain;
type profman_exec, system_file_type, exec_type, file_type;
allow profman user_profile_data_file:file { getattr read write lock map };
# Dumping profile info opens the application APK file for pretty printing.
allow profman asec_apk_file:file { read map };
allow profman apk_data_file:file { getattr read map };
allow profman apk_data_file:dir { getattr read search };
allow profman oemfs:file { read map };
# Reading an APK opens a ZipArchive, which unpack to tmpfs.
allow profman tmpfs:file { read map };
allow profman profman_dump_data_file:file { write map };
# Allow profman to analyze profiles for the secondary dex files. These
# are application dex files reported back to the framework when using
# BaseDexClassLoader.
allow profman { privapp_data_file app_data_file }:file { getattr read write lock map };
allow profman { privapp_data_file app_data_file }:dir { getattr read search };
# Allow query ART device config properties
#line 24
allow profman device_config_runtime_native_prop:file { getattr open read map };
#line 24
#line 25
allow profman device_config_runtime_native_boot_prop:file { getattr open read map };
#line 25
###
### neverallow rules
###
neverallow profman app_data_file_type:{ file lnk_file sock_file fifo_file } open;
#line 1 "system/sepolicy/public/property.te"
# Properties used only in /system
#
# DO NOT ADD system_internal_prop here.
# Instead, add to private/property.te.
# TODO(b/150331497): move these to private/property.te
#line 6
#line 6
type apexd_prop, property_type, system_property_type, system_internal_property_type;
#line 6
#line 6
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 6
#line 6
neverallow { domain -coredomain } apexd_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 6
#line 6
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 6
#line 6
#line 7
#line 7
type bootloader_boot_reason_prop, property_type, system_property_type, system_internal_property_type;
#line 7
#line 7
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 7
#line 7
neverallow { domain -coredomain } bootloader_boot_reason_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 7
#line 7
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 7
#line 7
#line 8
#line 8
type device_config_activity_manager_native_boot_prop, property_type, system_property_type, system_internal_property_type;
#line 8
#line 8
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 8
#line 8
neverallow { domain -coredomain } device_config_activity_manager_native_boot_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 8
#line 8
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 8
#line 8
#line 9
#line 9
type device_config_boot_count_prop, property_type, system_property_type, system_internal_property_type;
#line 9
#line 9
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 9
#line 9
neverallow { domain -coredomain } device_config_boot_count_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 9
#line 9
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 9
#line 9
#line 10
#line 10
type device_config_input_native_boot_prop, property_type, system_property_type, system_internal_property_type;
#line 10
#line 10
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 10
#line 10
neverallow { domain -coredomain } device_config_input_native_boot_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 10
#line 10
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 10
#line 10
#line 11
#line 11
type device_config_netd_native_prop, property_type, system_property_type, system_internal_property_type;
#line 11
#line 11
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 11
#line 11
neverallow { domain -coredomain } device_config_netd_native_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 11
#line 11
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 11
#line 11
#line 12
#line 12
type device_config_reset_performed_prop, property_type, system_property_type, system_internal_property_type;
#line 12
#line 12
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 12
#line 12
neverallow { domain -coredomain } device_config_reset_performed_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 12
#line 12
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 12
#line 12
#line 13
#line 13
type firstboot_prop, property_type, system_property_type, system_internal_property_type;
#line 13
#line 13
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 13
#line 13
neverallow { domain -coredomain } firstboot_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 13
#line 13
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 13
#line 13
# BEGIN_COMPATIBLE_PROPERTY_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
# DO NOT ADD ANY PROPERTIES HERE
#line 15
#line 15
#line 15
type boottime_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } boottime_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type charger_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } charger_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type cold_boot_done_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } cold_boot_done_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type ctl_adbd_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } ctl_adbd_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type ctl_apexd_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } ctl_apexd_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type ctl_bootanim_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } ctl_bootanim_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type ctl_bugreport_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } ctl_bugreport_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type ctl_console_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } ctl_console_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type ctl_dumpstate_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } ctl_dumpstate_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type ctl_fuse_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } ctl_fuse_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type ctl_gsid_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } ctl_gsid_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type ctl_interface_restart_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } ctl_interface_restart_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type ctl_interface_stop_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } ctl_interface_stop_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type ctl_mdnsd_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } ctl_mdnsd_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type ctl_restart_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } ctl_restart_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type ctl_rildaemon_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } ctl_rildaemon_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type ctl_sigstop_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } ctl_sigstop_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type dynamic_system_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } dynamic_system_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type heapprofd_enabled_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } heapprofd_enabled_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type llkd_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } llkd_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type lpdumpd_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } lpdumpd_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type mmc_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } mmc_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type mock_ota_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } mock_ota_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type net_dns_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } net_dns_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type overlay_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } overlay_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type persistent_properties_ready_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } persistent_properties_ready_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type safemode_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } safemode_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type system_lmk_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } system_lmk_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type system_trace_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } system_trace_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type test_boot_reason_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } test_boot_reason_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type time_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } time_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type traced_enabled_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } traced_enabled_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
#line 15
type traced_lazy_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } traced_lazy_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 15
#line 15
# END_COMPATIBLE_PROPERTY_ONLY -- this marker is used by CTS -- do not modify
#line 50
# Properties which can't be written outside system
#line 53
#line 53
type aac_drc_prop, property_type, system_property_type, system_restricted_property_type;
#line 53
#line 53
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 53
#line 53
neverallow { domain -coredomain } aac_drc_prop:property_service set;
#line 53
#line 53
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 53
#line 53
#line 54
#line 54
type adaptive_haptics_prop, property_type, system_property_type, system_restricted_property_type;
#line 54
#line 54
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 54
#line 54
neverallow { domain -coredomain } adaptive_haptics_prop:property_service set;
#line 54
#line 54
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 54
#line 54
#line 55
#line 55
type apex_ready_prop, property_type, system_property_type, system_restricted_property_type;
#line 55
#line 55
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 55
#line 55
neverallow { domain -coredomain } apex_ready_prop:property_service set;
#line 55
#line 55
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 55
#line 55
#line 56
#line 56
type arm64_memtag_prop, property_type, system_property_type, system_restricted_property_type;
#line 56
#line 56
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 56
#line 56
neverallow { domain -coredomain } arm64_memtag_prop:property_service set;
#line 56
#line 56
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 56
#line 56
#line 57
#line 57
type binder_cache_bluetooth_server_prop, property_type, system_property_type, system_restricted_property_type;
#line 57
#line 57
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 57
#line 57
neverallow { domain -coredomain } binder_cache_bluetooth_server_prop:property_service set;
#line 57
#line 57
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 57
#line 57
#line 58
#line 58
type binder_cache_system_server_prop, property_type, system_property_type, system_restricted_property_type;
#line 58
#line 58
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 58
#line 58
neverallow { domain -coredomain } binder_cache_system_server_prop:property_service set;
#line 58
#line 58
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 58
#line 58
#line 59
#line 59
type binder_cache_telephony_server_prop, property_type, system_property_type, system_restricted_property_type;
#line 59
#line 59
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 59
#line 59
neverallow { domain -coredomain } binder_cache_telephony_server_prop:property_service set;
#line 59
#line 59
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 59
#line 59
#line 60
#line 60
type boot_status_prop, property_type, system_property_type, system_restricted_property_type;
#line 60
#line 60
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 60
#line 60
neverallow { domain -coredomain } boot_status_prop:property_service set;
#line 60
#line 60
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 60
#line 60
#line 61
#line 61
type bootanim_system_prop, property_type, system_property_type, system_restricted_property_type;
#line 61
#line 61
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 61
#line 61
neverallow { domain -coredomain } bootanim_system_prop:property_service set;
#line 61
#line 61
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 61
#line 61
#line 62
#line 62
type bootloader_prop, property_type, system_property_type, system_restricted_property_type;
#line 62
#line 62
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 62
#line 62
neverallow { domain -coredomain } bootloader_prop:property_service set;
#line 62
#line 62
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 62
#line 62
#line 63
#line 63
type boottime_public_prop, property_type, system_property_type, system_restricted_property_type;
#line 63
#line 63
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 63
#line 63
neverallow { domain -coredomain } boottime_public_prop:property_service set;
#line 63
#line 63
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 63
#line 63
#line 64
#line 64
type bq_config_prop, property_type, system_property_type, system_restricted_property_type;
#line 64
#line 64
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 64
#line 64
neverallow { domain -coredomain } bq_config_prop:property_service set;
#line 64
#line 64
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 64
#line 64
#line 65
#line 65
type build_bootimage_prop, property_type, system_property_type, system_restricted_property_type;
#line 65
#line 65
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 65
#line 65
neverallow { domain -coredomain } build_bootimage_prop:property_service set;
#line 65
#line 65
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 65
#line 65
#line 66
#line 66
type build_prop, property_type, system_property_type, system_restricted_property_type;
#line 66
#line 66
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 66
#line 66
neverallow { domain -coredomain } build_prop:property_service set;
#line 66
#line 66
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 66
#line 66
#line 67
#line 67
type composd_vm_art_prop, property_type, system_property_type, system_restricted_property_type;
#line 67
#line 67
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 67
#line 67
neverallow { domain -coredomain } composd_vm_art_prop:property_service set;
#line 67
#line 67
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 67
#line 67
#line 68
#line 68
type device_config_aconfig_flags_prop, property_type, system_property_type, system_restricted_property_type;
#line 68
#line 68
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 68
#line 68
neverallow { domain -coredomain } device_config_aconfig_flags_prop:property_service set;
#line 68
#line 68
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 68
#line 68
#line 69
#line 69
type device_config_camera_native_prop, property_type, system_property_type, system_restricted_property_type;
#line 69
#line 69
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 69
#line 69
neverallow { domain -coredomain } device_config_camera_native_prop:property_service set;
#line 69
#line 69
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 69
#line 69
#line 70
#line 70
type device_config_edgetpu_native_prop, property_type, system_property_type, system_restricted_property_type;
#line 70
#line 70
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 70
#line 70
neverallow { domain -coredomain } device_config_edgetpu_native_prop:property_service set;
#line 70
#line 70
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 70
#line 70
#line 71
#line 71
type device_config_media_native_prop, property_type, system_property_type, system_restricted_property_type;
#line 71
#line 71
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 71
#line 71
neverallow { domain -coredomain } device_config_media_native_prop:property_service set;
#line 71
#line 71
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 71
#line 71
#line 72
#line 72
type device_config_nnapi_native_prop, property_type, system_property_type, system_restricted_property_type;
#line 72
#line 72
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 72
#line 72
neverallow { domain -coredomain } device_config_nnapi_native_prop:property_service set;
#line 72
#line 72
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 72
#line 72
#line 73
#line 73
type device_config_runtime_native_boot_prop, property_type, system_property_type, system_restricted_property_type;
#line 73
#line 73
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 73
#line 73
neverallow { domain -coredomain } device_config_runtime_native_boot_prop:property_service set;
#line 73
#line 73
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 73
#line 73
#line 74
#line 74
type device_config_runtime_native_prop, property_type, system_property_type, system_restricted_property_type;
#line 74
#line 74
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 74
#line 74
neverallow { domain -coredomain } device_config_runtime_native_prop:property_service set;
#line 74
#line 74
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 74
#line 74
#line 75
#line 75
type device_config_surface_flinger_native_boot_prop, property_type, system_property_type, system_restricted_property_type;
#line 75
#line 75
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 75
#line 75
neverallow { domain -coredomain } device_config_surface_flinger_native_boot_prop:property_service set;
#line 75
#line 75
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 75
#line 75
#line 76
#line 76
type device_config_vendor_system_native_prop, property_type, system_property_type, system_restricted_property_type;
#line 76
#line 76
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 76
#line 76
neverallow { domain -coredomain } device_config_vendor_system_native_prop:property_service set;
#line 76
#line 76
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 76
#line 76
#line 77
#line 77
type device_config_vendor_system_native_boot_prop, property_type, system_property_type, system_restricted_property_type;
#line 77
#line 77
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 77
#line 77
neverallow { domain -coredomain } device_config_vendor_system_native_boot_prop:property_service set;
#line 77
#line 77
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 77
#line 77
#line 78
#line 78
type drm_forcel3_prop, property_type, system_property_type, system_restricted_property_type;
#line 78
#line 78
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 78
#line 78
neverallow { domain -coredomain } drm_forcel3_prop:property_service set;
#line 78
#line 78
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 78
#line 78
#line 79
#line 79
type fingerprint_prop, property_type, system_property_type, system_restricted_property_type;
#line 79
#line 79
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 79
#line 79
neverallow { domain -coredomain } fingerprint_prop:property_service set;
#line 79
#line 79
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 79
#line 79
#line 80
#line 80
type gwp_asan_prop, property_type, system_property_type, system_restricted_property_type;
#line 80
#line 80
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 80
#line 80
neverallow { domain -coredomain } gwp_asan_prop:property_service set;
#line 80
#line 80
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 80
#line 80
#line 81
#line 81
type hal_instrumentation_prop, property_type, system_property_type, system_restricted_property_type;
#line 81
#line 81
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 81
#line 81
neverallow { domain -coredomain } hal_instrumentation_prop:property_service set;
#line 81
#line 81
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 81
#line 81
#line 82
#line 82
type userdebug_or_eng_prop, property_type, system_property_type, system_restricted_property_type;
#line 82
#line 82
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 82
#line 82
neverallow { domain -coredomain } userdebug_or_eng_prop:property_service set;
#line 82
#line 82
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 82
#line 82
#line 83
#line 83
type init_service_status_prop, property_type, system_property_type, system_restricted_property_type;
#line 83
#line 83
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 83
#line 83
neverallow { domain -coredomain } init_service_status_prop:property_service set;
#line 83
#line 83
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 83
#line 83
#line 84
#line 84
type libc_debug_prop, property_type, system_property_type, system_restricted_property_type;
#line 84
#line 84
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 84
#line 84
neverallow { domain -coredomain } libc_debug_prop:property_service set;
#line 84
#line 84
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 84
#line 84
#line 85
#line 85
type module_sdkextensions_prop, property_type, system_property_type, system_restricted_property_type;
#line 85
#line 85
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 85
#line 85
neverallow { domain -coredomain } module_sdkextensions_prop:property_service set;
#line 85
#line 85
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 85
#line 85
#line 86
#line 86
type nnapi_ext_deny_product_prop, property_type, system_property_type, system_restricted_property_type;
#line 86
#line 86
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 86
#line 86
neverallow { domain -coredomain } nnapi_ext_deny_product_prop:property_service set;
#line 86
#line 86
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 86
#line 86
#line 87
#line 87
type persist_wm_debug_prop, property_type, system_property_type, system_restricted_property_type;
#line 87
#line 87
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 87
#line 87
neverallow { domain -coredomain } persist_wm_debug_prop:property_service set;
#line 87
#line 87
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 87
#line 87
#line 88
#line 88
type power_debug_prop, property_type, system_property_type, system_restricted_property_type;
#line 88
#line 88
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 88
#line 88
neverallow { domain -coredomain } power_debug_prop:property_service set;
#line 88
#line 88
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 88
#line 88
#line 89
#line 89
type property_service_version_prop, property_type, system_property_type, system_restricted_property_type;
#line 89
#line 89
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 89
#line 89
neverallow { domain -coredomain } property_service_version_prop:property_service set;
#line 89
#line 89
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 89
#line 89
#line 90
#line 90
type provisioned_prop, property_type, system_property_type, system_restricted_property_type;
#line 90
#line 90
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 90
#line 90
neverallow { domain -coredomain } provisioned_prop:property_service set;
#line 90
#line 90
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 90
#line 90
#line 91
#line 91
type restorecon_prop, property_type, system_property_type, system_restricted_property_type;
#line 91
#line 91
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 91
#line 91
neverallow { domain -coredomain } restorecon_prop:property_service set;
#line 91
#line 91
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 91
#line 91
#line 92
#line 92
type retaildemo_prop, property_type, system_property_type, system_restricted_property_type;
#line 92
#line 92
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 92
#line 92
neverallow { domain -coredomain } retaildemo_prop:property_service set;
#line 92
#line 92
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 92
#line 92
#line 93
#line 93
type servicemanager_prop, property_type, system_property_type, system_restricted_property_type;
#line 93
#line 93
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 93
#line 93
neverallow { domain -coredomain } servicemanager_prop:property_service set;
#line 93
#line 93
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 93
#line 93
#line 94
#line 94
type smart_idle_maint_enabled_prop, property_type, system_property_type, system_restricted_property_type;
#line 94
#line 94
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 94
#line 94
neverallow { domain -coredomain } smart_idle_maint_enabled_prop:property_service set;
#line 94
#line 94
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 94
#line 94
#line 95
#line 95
type socket_hook_prop, property_type, system_property_type, system_restricted_property_type;
#line 95
#line 95
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 95
#line 95
neverallow { domain -coredomain } socket_hook_prop:property_service set;
#line 95
#line 95
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 95
#line 95
#line 96
#line 96
type sqlite_log_prop, property_type, system_property_type, system_restricted_property_type;
#line 96
#line 96
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 96
#line 96
neverallow { domain -coredomain } sqlite_log_prop:property_service set;
#line 96
#line 96
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 96
#line 96
#line 97
#line 97
type surfaceflinger_display_prop, property_type, system_property_type, system_restricted_property_type;
#line 97
#line 97
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 97
#line 97
neverallow { domain -coredomain } surfaceflinger_display_prop:property_service set;
#line 97
#line 97
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 97
#line 97
#line 98
#line 98
type system_boot_reason_prop, property_type, system_property_type, system_restricted_property_type;
#line 98
#line 98
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 98
#line 98
neverallow { domain -coredomain } system_boot_reason_prop:property_service set;
#line 98
#line 98
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 98
#line 98
#line 99
#line 99
type system_jvmti_agent_prop, property_type, system_property_type, system_restricted_property_type;
#line 99
#line 99
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 99
#line 99
neverallow { domain -coredomain } system_jvmti_agent_prop:property_service set;
#line 99
#line 99
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 99
#line 99
#line 100
#line 100
type traced_oome_heap_session_count_prop, property_type, system_property_type, system_restricted_property_type;
#line 100
#line 100
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 100
#line 100
neverallow { domain -coredomain } traced_oome_heap_session_count_prop:property_service set;
#line 100
#line 100
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 100
#line 100
#line 101
#line 101
type ab_update_gki_prop, property_type, system_property_type, system_restricted_property_type;
#line 101
#line 101
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 101
#line 101
neverallow { domain -coredomain } ab_update_gki_prop:property_service set;
#line 101
#line 101
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 101
#line 101
#line 102
#line 102
type usb_prop, property_type, system_property_type, system_restricted_property_type;
#line 102
#line 102
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 102
#line 102
neverallow { domain -coredomain } usb_prop:property_service set;
#line 102
#line 102
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 102
#line 102
#line 103
#line 103
type userspace_reboot_exported_prop, property_type, system_property_type, system_restricted_property_type;
#line 103
#line 103
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 103
#line 103
neverallow { domain -coredomain } userspace_reboot_exported_prop:property_service set;
#line 103
#line 103
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 103
#line 103
#line 104
#line 104
type vold_status_prop, property_type, system_property_type, system_restricted_property_type;
#line 104
#line 104
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 104
#line 104
neverallow { domain -coredomain } vold_status_prop:property_service set;
#line 104
#line 104
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 104
#line 104
#line 105
#line 105
type vts_status_prop, property_type, system_property_type, system_restricted_property_type;
#line 105
#line 105
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 105
#line 105
neverallow { domain -coredomain } vts_status_prop:property_service set;
#line 105
#line 105
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 105
#line 105
# BEGIN_COMPATIBLE_PROPERTY_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
# DO NOT ADD ANY PROPERTIES HERE
#line 107
#line 107
#line 107
type config_prop, property_type, system_property_type, system_restricted_property_type;
#line 107
#line 107
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
neverallow { domain -coredomain } config_prop:property_service set;
#line 107
#line 107
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
#line 107
#line 107
#line 107
type cppreopt_prop, property_type, system_property_type, system_restricted_property_type;
#line 107
#line 107
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
neverallow { domain -coredomain } cppreopt_prop:property_service set;
#line 107
#line 107
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
#line 107
#line 107
#line 107
type dalvik_prop, property_type, system_property_type, system_restricted_property_type;
#line 107
#line 107
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
neverallow { domain -coredomain } dalvik_prop:property_service set;
#line 107
#line 107
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
#line 107
#line 107
#line 107
type debuggerd_prop, property_type, system_property_type, system_restricted_property_type;
#line 107
#line 107
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
neverallow { domain -coredomain } debuggerd_prop:property_service set;
#line 107
#line 107
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
#line 107
#line 107
#line 107
type device_logging_prop, property_type, system_property_type, system_restricted_property_type;
#line 107
#line 107
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
neverallow { domain -coredomain } device_logging_prop:property_service set;
#line 107
#line 107
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
#line 107
#line 107
#line 107
type dhcp_prop, property_type, system_property_type, system_restricted_property_type;
#line 107
#line 107
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
neverallow { domain -coredomain } dhcp_prop:property_service set;
#line 107
#line 107
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
#line 107
#line 107
#line 107
type dumpstate_prop, property_type, system_property_type, system_restricted_property_type;
#line 107
#line 107
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
neverallow { domain -coredomain } dumpstate_prop:property_service set;
#line 107
#line 107
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
#line 107
#line 107
#line 107
type exported3_system_prop, property_type, system_property_type, system_restricted_property_type;
#line 107
#line 107
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
neverallow { domain -coredomain } exported3_system_prop:property_service set;
#line 107
#line 107
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
#line 107
#line 107
#line 107
type exported_dumpstate_prop, property_type, system_property_type, system_restricted_property_type;
#line 107
#line 107
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
neverallow { domain -coredomain } exported_dumpstate_prop:property_service set;
#line 107
#line 107
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
#line 107
#line 107
#line 107
type exported_secure_prop, property_type, system_property_type, system_restricted_property_type;
#line 107
#line 107
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
neverallow { domain -coredomain } exported_secure_prop:property_service set;
#line 107
#line 107
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
#line 107
#line 107
#line 107
type heapprofd_prop, property_type, system_property_type, system_restricted_property_type;
#line 107
#line 107
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
neverallow { domain -coredomain } heapprofd_prop:property_service set;
#line 107
#line 107
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
#line 107
#line 107
#line 107
type net_radio_prop, property_type, system_property_type, system_restricted_property_type;
#line 107
#line 107
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
neverallow { domain -coredomain } net_radio_prop:property_service set;
#line 107
#line 107
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
#line 107
#line 107
#line 107
type pan_result_prop, property_type, system_property_type, system_restricted_property_type;
#line 107
#line 107
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
neverallow { domain -coredomain } pan_result_prop:property_service set;
#line 107
#line 107
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
#line 107
#line 107
#line 107
type persist_debug_prop, property_type, system_property_type, system_restricted_property_type;
#line 107
#line 107
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
neverallow { domain -coredomain } persist_debug_prop:property_service set;
#line 107
#line 107
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
#line 107
#line 107
#line 107
type shell_prop, property_type, system_property_type, system_restricted_property_type;
#line 107
#line 107
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
neverallow { domain -coredomain } shell_prop:property_service set;
#line 107
#line 107
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
#line 107
#line 107
#line 107
type test_harness_prop, property_type, system_property_type, system_restricted_property_type;
#line 107
#line 107
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
neverallow { domain -coredomain } test_harness_prop:property_service set;
#line 107
#line 107
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
#line 107
#line 107
#line 107
type theme_prop, property_type, system_property_type, system_restricted_property_type;
#line 107
#line 107
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
neverallow { domain -coredomain } theme_prop:property_service set;
#line 107
#line 107
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
#line 107
#line 107
#line 107
type use_memfd_prop, property_type, system_property_type, system_restricted_property_type;
#line 107
#line 107
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
neverallow { domain -coredomain } use_memfd_prop:property_service set;
#line 107
#line 107
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
#line 107
#line 107
#line 107
type vold_prop, property_type, system_property_type, system_restricted_property_type;
#line 107
#line 107
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
neverallow { domain -coredomain } vold_prop:property_service set;
#line 107
#line 107
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 107
#line 107
#line 107
#line 107
# END_COMPATIBLE_PROPERTY_ONLY -- this marker is used by CTS -- do not modify
#line 128
# Properties which can be written only by vendor_init
#line 131
#line 131
type apexd_config_prop, property_type, system_property_type, system_public_property_type;
#line 131
#line 131
#line 131
#line 131
allow vendor_init property_socket:sock_file write;
#line 131
allow vendor_init init:unix_stream_socket connectto;
#line 131
#line 131
allow vendor_init apexd_config_prop:property_service set;
#line 131
#line 131
allow vendor_init apexd_config_prop:file { getattr open read map };
#line 131
#line 131
#line 131
neverallow { domain -init -vendor_init } apexd_config_prop:property_service set;
#line 131
#line 132
#line 132
type apexd_select_prop, property_type, system_property_type, system_public_property_type;
#line 132
#line 132
#line 132
#line 132
allow vendor_init property_socket:sock_file write;
#line 132
allow vendor_init init:unix_stream_socket connectto;
#line 132
#line 132
allow vendor_init apexd_select_prop:property_service set;
#line 132
#line 132
allow vendor_init apexd_select_prop:file { getattr open read map };
#line 132
#line 132
#line 132
neverallow { domain -init -vendor_init } apexd_select_prop:property_service set;
#line 132
#line 133
#line 133
type aaudio_config_prop, property_type, system_property_type, system_public_property_type;
#line 133
#line 133
#line 133
#line 133
allow vendor_init property_socket:sock_file write;
#line 133
allow vendor_init init:unix_stream_socket connectto;
#line 133
#line 133
allow vendor_init aaudio_config_prop:property_service set;
#line 133
#line 133
allow vendor_init aaudio_config_prop:file { getattr open read map };
#line 133
#line 133
#line 133
neverallow { domain -init -vendor_init } aaudio_config_prop:property_service set;
#line 133
#line 134
#line 134
type apk_verity_prop, property_type, system_property_type, system_public_property_type;
#line 134
#line 134
#line 134
#line 134
allow vendor_init property_socket:sock_file write;
#line 134
allow vendor_init init:unix_stream_socket connectto;
#line 134
#line 134
allow vendor_init apk_verity_prop:property_service set;
#line 134
#line 134
allow vendor_init apk_verity_prop:file { getattr open read map };
#line 134
#line 134
#line 134
neverallow { domain -init -vendor_init } apk_verity_prop:property_service set;
#line 134
#line 135
#line 135
type audio_config_prop, property_type, system_property_type, system_public_property_type;
#line 135
#line 135
#line 135
#line 135
allow vendor_init property_socket:sock_file write;
#line 135
allow vendor_init init:unix_stream_socket connectto;
#line 135
#line 135
allow vendor_init audio_config_prop:property_service set;
#line 135
#line 135
allow vendor_init audio_config_prop:file { getattr open read map };
#line 135
#line 135
#line 135
neverallow { domain -init -vendor_init } audio_config_prop:property_service set;
#line 135
#line 136
#line 136
type bootanim_config_prop, property_type, system_property_type, system_public_property_type;
#line 136
#line 136
#line 136
#line 136
allow vendor_init property_socket:sock_file write;
#line 136
allow vendor_init init:unix_stream_socket connectto;
#line 136
#line 136
allow vendor_init bootanim_config_prop:property_service set;
#line 136
#line 136
allow vendor_init bootanim_config_prop:file { getattr open read map };
#line 136
#line 136
#line 136
neverallow { domain -init -vendor_init } bootanim_config_prop:property_service set;
#line 136
#line 137
#line 137
type bluetooth_config_prop, property_type, system_property_type, system_public_property_type;
#line 137
#line 137
#line 137
#line 137
allow vendor_init property_socket:sock_file write;
#line 137
allow vendor_init init:unix_stream_socket connectto;
#line 137
#line 137
allow vendor_init bluetooth_config_prop:property_service set;
#line 137
#line 137
allow vendor_init bluetooth_config_prop:file { getattr open read map };
#line 137
#line 137
#line 137
neverallow { domain -init -vendor_init } bluetooth_config_prop:property_service set;
#line 137
#line 138
#line 138
type build_attestation_prop, property_type, system_property_type, system_public_property_type;
#line 138
#line 138
#line 138
#line 138
allow vendor_init property_socket:sock_file write;
#line 138
allow vendor_init init:unix_stream_socket connectto;
#line 138
#line 138
allow vendor_init build_attestation_prop:property_service set;
#line 138
#line 138
allow vendor_init build_attestation_prop:file { getattr open read map };
#line 138
#line 138
#line 138
neverallow { domain -init -vendor_init } build_attestation_prop:property_service set;
#line 138
#line 139
#line 139
type build_config_prop, property_type, system_property_type, system_public_property_type;
#line 139
#line 139
#line 139
#line 139
allow vendor_init property_socket:sock_file write;
#line 139
allow vendor_init init:unix_stream_socket connectto;
#line 139
#line 139
allow vendor_init build_config_prop:property_service set;
#line 139
#line 139
allow vendor_init build_config_prop:file { getattr open read map };
#line 139
#line 139
#line 139
neverallow { domain -init -vendor_init } build_config_prop:property_service set;
#line 139
#line 140
#line 140
type build_odm_prop, property_type, system_property_type, system_public_property_type;
#line 140
#line 140
#line 140
#line 140
allow vendor_init property_socket:sock_file write;
#line 140
allow vendor_init init:unix_stream_socket connectto;
#line 140
#line 140
allow vendor_init build_odm_prop:property_service set;
#line 140
#line 140
allow vendor_init build_odm_prop:file { getattr open read map };
#line 140
#line 140
#line 140
neverallow { domain -init -vendor_init } build_odm_prop:property_service set;
#line 140
#line 141
#line 141
type build_vendor_prop, property_type, system_property_type, system_public_property_type;
#line 141
#line 141
#line 141
#line 141
allow vendor_init property_socket:sock_file write;
#line 141
allow vendor_init init:unix_stream_socket connectto;
#line 141
#line 141
allow vendor_init build_vendor_prop:property_service set;
#line 141
#line 141
allow vendor_init build_vendor_prop:file { getattr open read map };
#line 141
#line 141
#line 141
neverallow { domain -init -vendor_init } build_vendor_prop:property_service set;
#line 141
#line 142
#line 142
type camera_calibration_prop, property_type, system_property_type, system_public_property_type;
#line 142
#line 142
#line 142
#line 142
allow vendor_init property_socket:sock_file write;
#line 142
allow vendor_init init:unix_stream_socket connectto;
#line 142
#line 142
allow vendor_init camera_calibration_prop:property_service set;
#line 142
#line 142
allow vendor_init camera_calibration_prop:file { getattr open read map };
#line 142
#line 142
#line 142
neverallow { domain -init -vendor_init } camera_calibration_prop:property_service set;
#line 142
#line 143
#line 143
type camera_config_prop, property_type, system_property_type, system_public_property_type;
#line 143
#line 143
#line 143
#line 143
allow vendor_init property_socket:sock_file write;
#line 143
allow vendor_init init:unix_stream_socket connectto;
#line 143
#line 143
allow vendor_init camera_config_prop:property_service set;
#line 143
#line 143
allow vendor_init camera_config_prop:file { getattr open read map };
#line 143
#line 143
#line 143
neverallow { domain -init -vendor_init } camera_config_prop:property_service set;
#line 143
#line 144
#line 144
type camera2_extensions_prop, property_type, system_property_type, system_public_property_type;
#line 144
#line 144
#line 144
#line 144
allow vendor_init property_socket:sock_file write;
#line 144
allow vendor_init init:unix_stream_socket connectto;
#line 144
#line 144
allow vendor_init camera2_extensions_prop:property_service set;
#line 144
#line 144
allow vendor_init camera2_extensions_prop:file { getattr open read map };
#line 144
#line 144
#line 144
neverallow { domain -init -vendor_init } camera2_extensions_prop:property_service set;
#line 144
#line 145
#line 145
type camerax_extensions_prop, property_type, system_property_type, system_public_property_type;
#line 145
#line 145
#line 145
#line 145
allow vendor_init property_socket:sock_file write;
#line 145
allow vendor_init init:unix_stream_socket connectto;
#line 145
#line 145
allow vendor_init camerax_extensions_prop:property_service set;
#line 145
#line 145
allow vendor_init camerax_extensions_prop:file { getattr open read map };
#line 145
#line 145
#line 145
neverallow { domain -init -vendor_init } camerax_extensions_prop:property_service set;
#line 145
#line 146
#line 146
type charger_config_prop, property_type, system_property_type, system_public_property_type;
#line 146
#line 146
#line 146
#line 146
allow vendor_init property_socket:sock_file write;
#line 146
allow vendor_init init:unix_stream_socket connectto;
#line 146
#line 146
allow vendor_init charger_config_prop:property_service set;
#line 146
#line 146
allow vendor_init charger_config_prop:file { getattr open read map };
#line 146
#line 146
#line 146
neverallow { domain -init -vendor_init } charger_config_prop:property_service set;
#line 146
#line 147
#line 147
type codec2_config_prop, property_type, system_property_type, system_public_property_type;
#line 147
#line 147
#line 147
#line 147
allow vendor_init property_socket:sock_file write;
#line 147
allow vendor_init init:unix_stream_socket connectto;
#line 147
#line 147
allow vendor_init codec2_config_prop:property_service set;
#line 147
#line 147
allow vendor_init codec2_config_prop:file { getattr open read map };
#line 147
#line 147
#line 147
neverallow { domain -init -vendor_init } codec2_config_prop:property_service set;
#line 147
#line 148
#line 148
type composd_vm_vendor_prop, property_type, system_property_type, system_public_property_type;
#line 148
#line 148
#line 148
#line 148
allow vendor_init property_socket:sock_file write;
#line 148
allow vendor_init init:unix_stream_socket connectto;
#line 148
#line 148
allow vendor_init composd_vm_vendor_prop:property_service set;
#line 148
#line 148
allow vendor_init composd_vm_vendor_prop:file { getattr open read map };
#line 148
#line 148
#line 148
neverallow { domain -init -vendor_init } composd_vm_vendor_prop:property_service set;
#line 148
#line 149
#line 149
type cpu_variant_prop, property_type, system_property_type, system_public_property_type;
#line 149
#line 149
#line 149
#line 149
allow vendor_init property_socket:sock_file write;
#line 149
allow vendor_init init:unix_stream_socket connectto;
#line 149
#line 149
allow vendor_init cpu_variant_prop:property_service set;
#line 149
#line 149
allow vendor_init cpu_variant_prop:file { getattr open read map };
#line 149
#line 149
#line 149
neverallow { domain -init -vendor_init } cpu_variant_prop:property_service set;
#line 149
#line 150
#line 150
type debugfs_restriction_prop, property_type, system_property_type, system_public_property_type;
#line 150
#line 150
#line 150
#line 150
allow vendor_init property_socket:sock_file write;
#line 150
allow vendor_init init:unix_stream_socket connectto;
#line 150
#line 150
allow vendor_init debugfs_restriction_prop:property_service set;
#line 150
#line 150
allow vendor_init debugfs_restriction_prop:file { getattr open read map };
#line 150
#line 150
#line 150
neverallow { domain -init -vendor_init } debugfs_restriction_prop:property_service set;
#line 150
#line 151
#line 151
type drm_service_config_prop, property_type, system_property_type, system_public_property_type;
#line 151
#line 151
#line 151
#line 151
allow vendor_init property_socket:sock_file write;
#line 151
allow vendor_init init:unix_stream_socket connectto;
#line 151
#line 151
allow vendor_init drm_service_config_prop:property_service set;
#line 151
#line 151
allow vendor_init drm_service_config_prop:file { getattr open read map };
#line 151
#line 151
#line 151
neverallow { domain -init -vendor_init } drm_service_config_prop:property_service set;
#line 151
#line 152
#line 152
type exported_camera_prop, property_type, system_property_type, system_public_property_type;
#line 152
#line 152
#line 152
#line 152
allow vendor_init property_socket:sock_file write;
#line 152
allow vendor_init init:unix_stream_socket connectto;
#line 152
#line 152
allow vendor_init exported_camera_prop:property_service set;
#line 152
#line 152
allow vendor_init exported_camera_prop:file { getattr open read map };
#line 152
#line 152
#line 152
neverallow { domain -init -vendor_init } exported_camera_prop:property_service set;
#line 152
#line 153
#line 153
type exported_config_prop, property_type, system_property_type, system_public_property_type;
#line 153
#line 153
#line 153
#line 153
allow vendor_init property_socket:sock_file write;
#line 153
allow vendor_init init:unix_stream_socket connectto;
#line 153
#line 153
allow vendor_init exported_config_prop:property_service set;
#line 153
#line 153
allow vendor_init exported_config_prop:file { getattr open read map };
#line 153
#line 153
#line 153
neverallow { domain -init -vendor_init } exported_config_prop:property_service set;
#line 153
#line 154
#line 154
type exported_default_prop, property_type, system_property_type, system_public_property_type;
#line 154
#line 154
#line 154
#line 154
allow vendor_init property_socket:sock_file write;
#line 154
allow vendor_init init:unix_stream_socket connectto;
#line 154
#line 154
allow vendor_init exported_default_prop:property_service set;
#line 154
#line 154
allow vendor_init exported_default_prop:file { getattr open read map };
#line 154
#line 154
#line 154
neverallow { domain -init -vendor_init } exported_default_prop:property_service set;
#line 154
#line 155
#line 155
type ffs_config_prop, property_type, system_property_type, system_public_property_type;
#line 155
#line 155
#line 155
#line 155
allow vendor_init property_socket:sock_file write;
#line 155
allow vendor_init init:unix_stream_socket connectto;
#line 155
#line 155
allow vendor_init ffs_config_prop:property_service set;
#line 155
#line 155
allow vendor_init ffs_config_prop:file { getattr open read map };
#line 155
#line 155
#line 155
neverallow { domain -init -vendor_init } ffs_config_prop:property_service set;
#line 155
#line 156
#line 156
type framework_watchdog_config_prop, property_type, system_property_type, system_public_property_type;
#line 156
#line 156
#line 156
#line 156
allow vendor_init property_socket:sock_file write;
#line 156
allow vendor_init init:unix_stream_socket connectto;
#line 156
#line 156
allow vendor_init framework_watchdog_config_prop:property_service set;
#line 156
#line 156
allow vendor_init framework_watchdog_config_prop:file { getattr open read map };
#line 156
#line 156
#line 156
neverallow { domain -init -vendor_init } framework_watchdog_config_prop:property_service set;
#line 156
#line 157
#line 157
type graphics_config_prop, property_type, system_property_type, system_public_property_type;
#line 157
#line 157
#line 157
#line 157
allow vendor_init property_socket:sock_file write;
#line 157
allow vendor_init init:unix_stream_socket connectto;
#line 157
#line 157
allow vendor_init graphics_config_prop:property_service set;
#line 157
#line 157
allow vendor_init graphics_config_prop:file { getattr open read map };
#line 157
#line 157
#line 157
neverallow { domain -init -vendor_init } graphics_config_prop:property_service set;
#line 157
#line 158
#line 158
type hdmi_config_prop, property_type, system_property_type, system_public_property_type;
#line 158
#line 158
#line 158
#line 158
allow vendor_init property_socket:sock_file write;
#line 158
allow vendor_init init:unix_stream_socket connectto;
#line 158
#line 158
allow vendor_init hdmi_config_prop:property_service set;
#line 158
#line 158
allow vendor_init hdmi_config_prop:file { getattr open read map };
#line 158
#line 158
#line 158
neverallow { domain -init -vendor_init } hdmi_config_prop:property_service set;
#line 158
#line 159
#line 159
type hw_timeout_multiplier_prop, property_type, system_property_type, system_public_property_type;
#line 159
#line 159
#line 159
#line 159
allow vendor_init property_socket:sock_file write;
#line 159
allow vendor_init init:unix_stream_socket connectto;
#line 159
#line 159
allow vendor_init hw_timeout_multiplier_prop:property_service set;
#line 159
#line 159
allow vendor_init hw_timeout_multiplier_prop:file { getattr open read map };
#line 159
#line 159
#line 159
neverallow { domain -init -vendor_init } hw_timeout_multiplier_prop:property_service set;
#line 159
#line 160
#line 160
type hypervisor_prop, property_type, system_property_type, system_public_property_type;
#line 160
#line 160
#line 160
#line 160
allow vendor_init property_socket:sock_file write;
#line 160
allow vendor_init init:unix_stream_socket connectto;
#line 160
#line 160
allow vendor_init hypervisor_prop:property_service set;
#line 160
#line 160
allow vendor_init hypervisor_prop:file { getattr open read map };
#line 160
#line 160
#line 160
neverallow { domain -init -vendor_init } hypervisor_prop:property_service set;
#line 160
#line 161
#line 161
type hypervisor_restricted_prop, property_type, system_property_type, system_public_property_type;
#line 161
#line 161
#line 161
#line 161
allow vendor_init property_socket:sock_file write;
#line 161
allow vendor_init init:unix_stream_socket connectto;
#line 161
#line 161
allow vendor_init hypervisor_restricted_prop:property_service set;
#line 161
#line 161
allow vendor_init hypervisor_restricted_prop:file { getattr open read map };
#line 161
#line 161
#line 161
neverallow { domain -init -vendor_init } hypervisor_restricted_prop:property_service set;
#line 161
#line 162
#line 162
type incremental_prop, property_type, system_property_type, system_public_property_type;
#line 162
#line 162
#line 162
#line 162
allow vendor_init property_socket:sock_file write;
#line 162
allow vendor_init init:unix_stream_socket connectto;
#line 162
#line 162
allow vendor_init incremental_prop:property_service set;
#line 162
#line 162
allow vendor_init incremental_prop:file { getattr open read map };
#line 162
#line 162
#line 162
neverallow { domain -init -vendor_init } incremental_prop:property_service set;
#line 162
#line 163
#line 163
type input_device_config_prop, property_type, system_property_type, system_public_property_type;
#line 163
#line 163
#line 163
#line 163
allow vendor_init property_socket:sock_file write;
#line 163
allow vendor_init init:unix_stream_socket connectto;
#line 163
#line 163
allow vendor_init input_device_config_prop:property_service set;
#line 163
#line 163
allow vendor_init input_device_config_prop:file { getattr open read map };
#line 163
#line 163
#line 163
neverallow { domain -init -vendor_init } input_device_config_prop:property_service set;
#line 163
#line 164
#line 164
type keyguard_config_prop, property_type, system_property_type, system_public_property_type;
#line 164
#line 164
#line 164
#line 164
allow vendor_init property_socket:sock_file write;
#line 164
allow vendor_init init:unix_stream_socket connectto;
#line 164
#line 164
allow vendor_init keyguard_config_prop:property_service set;
#line 164
#line 164
allow vendor_init keyguard_config_prop:file { getattr open read map };
#line 164
#line 164
#line 164
neverallow { domain -init -vendor_init } keyguard_config_prop:property_service set;
#line 164
#line 165
#line 165
type keystore_config_prop, property_type, system_property_type, system_public_property_type;
#line 165
#line 165
#line 165
#line 165
allow vendor_init property_socket:sock_file write;
#line 165
allow vendor_init init:unix_stream_socket connectto;
#line 165
#line 165
allow vendor_init keystore_config_prop:property_service set;
#line 165
#line 165
allow vendor_init keystore_config_prop:file { getattr open read map };
#line 165
#line 165
#line 165
neverallow { domain -init -vendor_init } keystore_config_prop:property_service set;
#line 165
#line 166
#line 166
type lmkd_config_prop, property_type, system_property_type, system_public_property_type;
#line 166
#line 166
#line 166
#line 166
allow vendor_init property_socket:sock_file write;
#line 166
allow vendor_init init:unix_stream_socket connectto;
#line 166
#line 166
allow vendor_init lmkd_config_prop:property_service set;
#line 166
#line 166
allow vendor_init lmkd_config_prop:file { getattr open read map };
#line 166
#line 166
#line 166
neverallow { domain -init -vendor_init } lmkd_config_prop:property_service set;
#line 166
#line 167
#line 167
type media_config_prop, property_type, system_property_type, system_public_property_type;
#line 167
#line 167
#line 167
#line 167
allow vendor_init property_socket:sock_file write;
#line 167
allow vendor_init init:unix_stream_socket connectto;
#line 167
#line 167
allow vendor_init media_config_prop:property_service set;
#line 167
#line 167
allow vendor_init media_config_prop:file { getattr open read map };
#line 167
#line 167
#line 167
neverallow { domain -init -vendor_init } media_config_prop:property_service set;
#line 167
#line 168
#line 168
type media_variant_prop, property_type, system_property_type, system_public_property_type;
#line 168
#line 168
#line 168
#line 168
allow vendor_init property_socket:sock_file write;
#line 168
allow vendor_init init:unix_stream_socket connectto;
#line 168
#line 168
allow vendor_init media_variant_prop:property_service set;
#line 168
#line 168
allow vendor_init media_variant_prop:file { getattr open read map };
#line 168
#line 168
#line 168
neverallow { domain -init -vendor_init } media_variant_prop:property_service set;
#line 168
#line 169
#line 169
type mediadrm_config_prop, property_type, system_property_type, system_public_property_type;
#line 169
#line 169
#line 169
#line 169
allow vendor_init property_socket:sock_file write;
#line 169
allow vendor_init init:unix_stream_socket connectto;
#line 169
#line 169
allow vendor_init mediadrm_config_prop:property_service set;
#line 169
#line 169
allow vendor_init mediadrm_config_prop:file { getattr open read map };
#line 169
#line 169
#line 169
neverallow { domain -init -vendor_init } mediadrm_config_prop:property_service set;
#line 169
#line 170
#line 170
type mm_events_config_prop, property_type, system_property_type, system_public_property_type;
#line 170
#line 170
#line 170
#line 170
allow vendor_init property_socket:sock_file write;
#line 170
allow vendor_init init:unix_stream_socket connectto;
#line 170
#line 170
allow vendor_init mm_events_config_prop:property_service set;
#line 170
#line 170
allow vendor_init mm_events_config_prop:file { getattr open read map };
#line 170
#line 170
#line 170
neverallow { domain -init -vendor_init } mm_events_config_prop:property_service set;
#line 170
#line 171
#line 171
type oem_unlock_prop, property_type, system_property_type, system_public_property_type;
#line 171
#line 171
#line 171
#line 171
allow vendor_init property_socket:sock_file write;
#line 171
allow vendor_init init:unix_stream_socket connectto;
#line 171
#line 171
allow vendor_init oem_unlock_prop:property_service set;
#line 171
#line 171
allow vendor_init oem_unlock_prop:file { getattr open read map };
#line 171
#line 171
#line 171
neverallow { domain -init -vendor_init } oem_unlock_prop:property_service set;
#line 171
#line 172
#line 172
type ota_build_prop, property_type, system_property_type, system_public_property_type;
#line 172
#line 172
#line 172
#line 172
allow vendor_init property_socket:sock_file write;
#line 172
allow vendor_init init:unix_stream_socket connectto;
#line 172
#line 172
allow vendor_init ota_build_prop:property_service set;
#line 172
#line 172
allow vendor_init ota_build_prop:file { getattr open read map };
#line 172
#line 172
#line 172
neverallow { domain -init -vendor_init } ota_build_prop:property_service set;
#line 172
#line 173
#line 173
type packagemanager_config_prop, property_type, system_property_type, system_public_property_type;
#line 173
#line 173
#line 173
#line 173
allow vendor_init property_socket:sock_file write;
#line 173
allow vendor_init init:unix_stream_socket connectto;
#line 173
#line 173
allow vendor_init packagemanager_config_prop:property_service set;
#line 173
#line 173
allow vendor_init packagemanager_config_prop:file { getattr open read map };
#line 173
#line 173
#line 173
neverallow { domain -init -vendor_init } packagemanager_config_prop:property_service set;
#line 173
#line 174
#line 174
type quick_start_prop, property_type, system_property_type, system_public_property_type;
#line 174
#line 174
#line 174
#line 174
allow vendor_init property_socket:sock_file write;
#line 174
allow vendor_init init:unix_stream_socket connectto;
#line 174
#line 174
allow vendor_init quick_start_prop:property_service set;
#line 174
#line 174
allow vendor_init quick_start_prop:file { getattr open read map };
#line 174
#line 174
#line 174
neverallow { domain -init -vendor_init } quick_start_prop:property_service set;
#line 174
#line 175
#line 175
type recovery_config_prop, property_type, system_property_type, system_public_property_type;
#line 175
#line 175
#line 175
#line 175
allow vendor_init property_socket:sock_file write;
#line 175
allow vendor_init init:unix_stream_socket connectto;
#line 175
#line 175
allow vendor_init recovery_config_prop:property_service set;
#line 175
#line 175
allow vendor_init recovery_config_prop:file { getattr open read map };
#line 175
#line 175
#line 175
neverallow { domain -init -vendor_init } recovery_config_prop:property_service set;
#line 175
#line 176
#line 176
type recovery_usb_config_prop, property_type, system_property_type, system_public_property_type;
#line 176
#line 176
#line 176
#line 176
allow vendor_init property_socket:sock_file write;
#line 176
allow vendor_init init:unix_stream_socket connectto;
#line 176
#line 176
allow vendor_init recovery_usb_config_prop:property_service set;
#line 176
#line 176
allow vendor_init recovery_usb_config_prop:file { getattr open read map };
#line 176
#line 176
#line 176
neverallow { domain -init -vendor_init } recovery_usb_config_prop:property_service set;
#line 176
#line 177
#line 177
type sendbug_config_prop, property_type, system_property_type, system_public_property_type;
#line 177
#line 177
#line 177
#line 177
allow vendor_init property_socket:sock_file write;
#line 177
allow vendor_init init:unix_stream_socket connectto;
#line 177
#line 177
allow vendor_init sendbug_config_prop:property_service set;
#line 177
#line 177
allow vendor_init sendbug_config_prop:file { getattr open read map };
#line 177
#line 177
#line 177
neverallow { domain -init -vendor_init } sendbug_config_prop:property_service set;
#line 177
#line 178
#line 178
type soc_prop, property_type, system_property_type, system_public_property_type;
#line 178
#line 178
#line 178
#line 178
allow vendor_init property_socket:sock_file write;
#line 178
allow vendor_init init:unix_stream_socket connectto;
#line 178
#line 178
allow vendor_init soc_prop:property_service set;
#line 178
#line 178
allow vendor_init soc_prop:file { getattr open read map };
#line 178
#line 178
#line 178
neverallow { domain -init -vendor_init } soc_prop:property_service set;
#line 178
#line 179
#line 179
type storage_config_prop, property_type, system_property_type, system_public_property_type;
#line 179
#line 179
#line 179
#line 179
allow vendor_init property_socket:sock_file write;
#line 179
allow vendor_init init:unix_stream_socket connectto;
#line 179
#line 179
allow vendor_init storage_config_prop:property_service set;
#line 179
#line 179
allow vendor_init storage_config_prop:file { getattr open read map };
#line 179
#line 179
#line 179
neverallow { domain -init -vendor_init } storage_config_prop:property_service set;
#line 179
#line 180
#line 180
type storagemanager_config_prop, property_type, system_property_type, system_public_property_type;
#line 180
#line 180
#line 180
#line 180
allow vendor_init property_socket:sock_file write;
#line 180
allow vendor_init init:unix_stream_socket connectto;
#line 180
#line 180
allow vendor_init storagemanager_config_prop:property_service set;
#line 180
#line 180
allow vendor_init storagemanager_config_prop:file { getattr open read map };
#line 180
#line 180
#line 180
neverallow { domain -init -vendor_init } storagemanager_config_prop:property_service set;
#line 180
#line 181
#line 181
type surfaceflinger_prop, property_type, system_property_type, system_public_property_type;
#line 181
#line 181
#line 181
#line 181
allow vendor_init property_socket:sock_file write;
#line 181
allow vendor_init init:unix_stream_socket connectto;
#line 181
#line 181
allow vendor_init surfaceflinger_prop:property_service set;
#line 181
#line 181
allow vendor_init surfaceflinger_prop:file { getattr open read map };
#line 181
#line 181
#line 181
neverallow { domain -init -vendor_init } surfaceflinger_prop:property_service set;
#line 181
#line 182
#line 182
type suspend_prop, property_type, system_property_type, system_public_property_type;
#line 182
#line 182
#line 182
#line 182
allow vendor_init property_socket:sock_file write;
#line 182
allow vendor_init init:unix_stream_socket connectto;
#line 182
#line 182
allow vendor_init suspend_prop:property_service set;
#line 182
#line 182
allow vendor_init suspend_prop:file { getattr open read map };
#line 182
#line 182
#line 182
neverallow { domain -init -vendor_init } suspend_prop:property_service set;
#line 182
#line 183
#line 183
type systemsound_config_prop, property_type, system_property_type, system_public_property_type;
#line 183
#line 183
#line 183
#line 183
allow vendor_init property_socket:sock_file write;
#line 183
allow vendor_init init:unix_stream_socket connectto;
#line 183
#line 183
allow vendor_init systemsound_config_prop:property_service set;
#line 183
#line 183
allow vendor_init systemsound_config_prop:file { getattr open read map };
#line 183
#line 183
#line 183
neverallow { domain -init -vendor_init } systemsound_config_prop:property_service set;
#line 183
#line 184
#line 184
type telephony_config_prop, property_type, system_property_type, system_public_property_type;
#line 184
#line 184
#line 184
#line 184
allow vendor_init property_socket:sock_file write;
#line 184
allow vendor_init init:unix_stream_socket connectto;
#line 184
#line 184
allow vendor_init telephony_config_prop:property_service set;
#line 184
#line 184
allow vendor_init telephony_config_prop:file { getattr open read map };
#line 184
#line 184
#line 184
neverallow { domain -init -vendor_init } telephony_config_prop:property_service set;
#line 184
#line 185
#line 185
type threadnetwork_config_prop, property_type, system_property_type, system_public_property_type;
#line 185
#line 185
#line 185
#line 185
allow vendor_init property_socket:sock_file write;
#line 185
allow vendor_init init:unix_stream_socket connectto;
#line 185
#line 185
allow vendor_init threadnetwork_config_prop:property_service set;
#line 185
#line 185
allow vendor_init threadnetwork_config_prop:file { getattr open read map };
#line 185
#line 185
#line 185
neverallow { domain -init -vendor_init } threadnetwork_config_prop:property_service set;
#line 185
#line 186
#line 186
type tombstone_config_prop, property_type, system_property_type, system_public_property_type;
#line 186
#line 186
#line 186
#line 186
allow vendor_init property_socket:sock_file write;
#line 186
allow vendor_init init:unix_stream_socket connectto;
#line 186
#line 186
allow vendor_init tombstone_config_prop:property_service set;
#line 186
#line 186
allow vendor_init tombstone_config_prop:file { getattr open read map };
#line 186
#line 186
#line 186
neverallow { domain -init -vendor_init } tombstone_config_prop:property_service set;
#line 186
#line 187
#line 187
type usb_config_prop, property_type, system_property_type, system_public_property_type;
#line 187
#line 187
#line 187
#line 187
allow vendor_init property_socket:sock_file write;
#line 187
allow vendor_init init:unix_stream_socket connectto;
#line 187
#line 187
allow vendor_init usb_config_prop:property_service set;
#line 187
#line 187
allow vendor_init usb_config_prop:file { getattr open read map };
#line 187
#line 187
#line 187
neverallow { domain -init -vendor_init } usb_config_prop:property_service set;
#line 187
#line 188
#line 188
type userspace_reboot_config_prop, property_type, system_property_type, system_public_property_type;
#line 188
#line 188
#line 188
#line 188
allow vendor_init property_socket:sock_file write;
#line 188
allow vendor_init init:unix_stream_socket connectto;
#line 188
#line 188
allow vendor_init userspace_reboot_config_prop:property_service set;
#line 188
#line 188
allow vendor_init userspace_reboot_config_prop:file { getattr open read map };
#line 188
#line 188
#line 188
neverallow { domain -init -vendor_init } userspace_reboot_config_prop:property_service set;
#line 188
#line 189
#line 189
type vehicle_hal_prop, property_type, system_property_type, system_public_property_type;
#line 189
#line 189
#line 189
#line 189
allow vendor_init property_socket:sock_file write;
#line 189
allow vendor_init init:unix_stream_socket connectto;
#line 189
#line 189
allow vendor_init vehicle_hal_prop:property_service set;
#line 189
#line 189
allow vendor_init vehicle_hal_prop:file { getattr open read map };
#line 189
#line 189
#line 189
neverallow { domain -init -vendor_init } vehicle_hal_prop:property_service set;
#line 189
#line 190
#line 190
type vendor_security_patch_level_prop, property_type, system_property_type, system_public_property_type;
#line 190
#line 190
#line 190
#line 190
allow vendor_init property_socket:sock_file write;
#line 190
allow vendor_init init:unix_stream_socket connectto;
#line 190
#line 190
allow vendor_init vendor_security_patch_level_prop:property_service set;
#line 190
#line 190
allow vendor_init vendor_security_patch_level_prop:file { getattr open read map };
#line 190
#line 190
#line 190
neverallow { domain -init -vendor_init } vendor_security_patch_level_prop:property_service set;
#line 190
#line 191
#line 191
type vendor_socket_hook_prop, property_type, system_property_type, system_public_property_type;
#line 191
#line 191
#line 191
#line 191
allow vendor_init property_socket:sock_file write;
#line 191
allow vendor_init init:unix_stream_socket connectto;
#line 191
#line 191
allow vendor_init vendor_socket_hook_prop:property_service set;
#line 191
#line 191
allow vendor_init vendor_socket_hook_prop:file { getattr open read map };
#line 191
#line 191
#line 191
neverallow { domain -init -vendor_init } vendor_socket_hook_prop:property_service set;
#line 191
#line 192
#line 192
type virtual_ab_prop, property_type, system_property_type, system_public_property_type;
#line 192
#line 192
#line 192
#line 192
allow vendor_init property_socket:sock_file write;
#line 192
allow vendor_init init:unix_stream_socket connectto;
#line 192
#line 192
allow vendor_init virtual_ab_prop:property_service set;
#line 192
#line 192
allow vendor_init virtual_ab_prop:file { getattr open read map };
#line 192
#line 192
#line 192
neverallow { domain -init -vendor_init } virtual_ab_prop:property_service set;
#line 192
#line 193
#line 193
type vndk_prop, property_type, system_property_type, system_public_property_type;
#line 193
#line 193
#line 193
#line 193
allow vendor_init property_socket:sock_file write;
#line 193
allow vendor_init init:unix_stream_socket connectto;
#line 193
#line 193
allow vendor_init vndk_prop:property_service set;
#line 193
#line 193
allow vendor_init vndk_prop:file { getattr open read map };
#line 193
#line 193
#line 193
neverallow { domain -init -vendor_init } vndk_prop:property_service set;
#line 193
#line 194
#line 194
type vts_config_prop, property_type, system_property_type, system_public_property_type;
#line 194
#line 194
#line 194
#line 194
allow vendor_init property_socket:sock_file write;
#line 194
allow vendor_init init:unix_stream_socket connectto;
#line 194
#line 194
allow vendor_init vts_config_prop:property_service set;
#line 194
#line 194
allow vendor_init vts_config_prop:file { getattr open read map };
#line 194
#line 194
#line 194
neverallow { domain -init -vendor_init } vts_config_prop:property_service set;
#line 194
#line 195
#line 195
type vold_config_prop, property_type, system_property_type, system_public_property_type;
#line 195
#line 195
#line 195
#line 195
allow vendor_init property_socket:sock_file write;
#line 195
allow vendor_init init:unix_stream_socket connectto;
#line 195
#line 195
allow vendor_init vold_config_prop:property_service set;
#line 195
#line 195
allow vendor_init vold_config_prop:file { getattr open read map };
#line 195
#line 195
#line 195
neverallow { domain -init -vendor_init } vold_config_prop:property_service set;
#line 195
#line 196
#line 196
type wifi_config_prop, property_type, system_property_type, system_public_property_type;
#line 196
#line 196
#line 196
#line 196
allow vendor_init property_socket:sock_file write;
#line 196
allow vendor_init init:unix_stream_socket connectto;
#line 196
#line 196
allow vendor_init wifi_config_prop:property_service set;
#line 196
#line 196
allow vendor_init wifi_config_prop:file { getattr open read map };
#line 196
#line 196
#line 196
neverallow { domain -init -vendor_init } wifi_config_prop:property_service set;
#line 196
#line 197
#line 197
type zram_config_prop, property_type, system_property_type, system_public_property_type;
#line 197
#line 197
#line 197
#line 197
allow vendor_init property_socket:sock_file write;
#line 197
allow vendor_init init:unix_stream_socket connectto;
#line 197
#line 197
allow vendor_init zram_config_prop:property_service set;
#line 197
#line 197
allow vendor_init zram_config_prop:file { getattr open read map };
#line 197
#line 197
#line 197
neverallow { domain -init -vendor_init } zram_config_prop:property_service set;
#line 197
#line 198
#line 198
type zygote_config_prop, property_type, system_property_type, system_public_property_type;
#line 198
#line 198
#line 198
#line 198
allow vendor_init property_socket:sock_file write;
#line 198
allow vendor_init init:unix_stream_socket connectto;
#line 198
#line 198
allow vendor_init zygote_config_prop:property_service set;
#line 198
#line 198
allow vendor_init zygote_config_prop:file { getattr open read map };
#line 198
#line 198
#line 198
neverallow { domain -init -vendor_init } zygote_config_prop:property_service set;
#line 198
#line 199
#line 199
type dck_prop, property_type, system_property_type, system_public_property_type;
#line 199
#line 199
#line 199
#line 199
allow vendor_init property_socket:sock_file write;
#line 199
allow vendor_init init:unix_stream_socket connectto;
#line 199
#line 199
allow vendor_init dck_prop:property_service set;
#line 199
#line 199
allow vendor_init dck_prop:file { getattr open read map };
#line 199
#line 199
#line 199
neverallow { domain -init -vendor_init } dck_prop:property_service set;
#line 199
#line 200
#line 200
type tuner_config_prop, property_type, system_property_type, system_public_property_type;
#line 200
#line 200
#line 200
#line 200
allow vendor_init property_socket:sock_file write;
#line 200
allow vendor_init init:unix_stream_socket connectto;
#line 200
#line 200
allow vendor_init tuner_config_prop:property_service set;
#line 200
#line 200
allow vendor_init tuner_config_prop:file { getattr open read map };
#line 200
#line 200
#line 200
neverallow { domain -init -vendor_init } tuner_config_prop:property_service set;
#line 200
#line 201
#line 201
type usb_uvc_enabled_prop, property_type, system_property_type, system_public_property_type;
#line 201
#line 201
#line 201
#line 201
allow vendor_init property_socket:sock_file write;
#line 201
allow vendor_init init:unix_stream_socket connectto;
#line 201
#line 201
allow vendor_init usb_uvc_enabled_prop:property_service set;
#line 201
#line 201
allow vendor_init usb_uvc_enabled_prop:file { getattr open read map };
#line 201
#line 201
#line 201
neverallow { domain -init -vendor_init } usb_uvc_enabled_prop:property_service set;
#line 201
#line 202
#line 202
type setupwizard_mode_prop, property_type, system_property_type, system_public_property_type;
#line 202
#line 202
#line 202
#line 202
allow vendor_init property_socket:sock_file write;
#line 202
allow vendor_init init:unix_stream_socket connectto;
#line 202
#line 202
allow vendor_init setupwizard_mode_prop:property_service set;
#line 202
#line 202
allow vendor_init setupwizard_mode_prop:file { getattr open read map };
#line 202
#line 202
#line 202
neverallow { domain -init -vendor_init } setupwizard_mode_prop:property_service set;
#line 202
#line 203
#line 203
type pm_archiving_enabled_prop, property_type, system_property_type, system_public_property_type;
#line 203
#line 203
#line 203
#line 203
allow vendor_init property_socket:sock_file write;
#line 203
allow vendor_init init:unix_stream_socket connectto;
#line 203
#line 203
allow vendor_init pm_archiving_enabled_prop:property_service set;
#line 203
#line 203
allow vendor_init pm_archiving_enabled_prop:file { getattr open read map };
#line 203
#line 203
#line 203
neverallow { domain -init -vendor_init } pm_archiving_enabled_prop:property_service set;
#line 203
# Properties with no restrictions
#line 206
type adbd_config_prop, property_type, system_property_type, system_public_property_type;
#line 206
#line 207
type audio_prop, property_type, system_property_type, system_public_property_type;
#line 207
#line 208
type bluetooth_a2dp_offload_prop, property_type, system_property_type, system_public_property_type;
#line 208
#line 209
type bluetooth_audio_hal_prop, property_type, system_property_type, system_public_property_type;
#line 209
#line 210
type bluetooth_prop, property_type, system_property_type, system_public_property_type;
#line 210
#line 211
type bpf_progs_loaded_prop, property_type, system_property_type, system_public_property_type;
#line 211
#line 212
type charger_status_prop, property_type, system_property_type, system_public_property_type;
#line 212
#line 213
type ctl_default_prop, property_type, system_property_type, system_public_property_type;
#line 213
#line 214
type ctl_interface_start_prop, property_type, system_property_type, system_public_property_type;
#line 214
#line 215
type ctl_start_prop, property_type, system_property_type, system_public_property_type;
#line 215
#line 216
type ctl_stop_prop, property_type, system_property_type, system_public_property_type;
#line 216
#line 217
type dalvik_config_prop, property_type, system_property_type, system_public_property_type;
#line 217
#line 218
type dalvik_dynamic_config_prop, property_type, system_property_type, system_public_property_type;
#line 218
#line 219
type dalvik_runtime_prop, property_type, system_property_type, system_public_property_type;
#line 219
#line 220
type debug_prop, property_type, system_property_type, system_public_property_type;
#line 220
#line 221
type device_config_memory_safety_native_boot_prop, property_type, system_property_type, system_public_property_type;
#line 221
#line 222
type device_config_memory_safety_native_prop, property_type, system_property_type, system_public_property_type;
#line 222
#line 223
type dumpstate_options_prop, property_type, system_property_type, system_public_property_type;
#line 223
#line 224
type exported_system_prop, property_type, system_property_type, system_public_property_type;
#line 224
#line 225
type exported_bluetooth_prop, property_type, system_property_type, system_public_property_type;
#line 225
#line 226
type exported_overlay_prop, property_type, system_property_type, system_public_property_type;
#line 226
#line 227
type exported_pm_prop, property_type, system_property_type, system_public_property_type;
#line 227
#line 228
type future_pm_prop, property_type, system_property_type, system_public_property_type;
#line 228
#line 229
type ffs_control_prop, property_type, system_property_type, system_public_property_type;
#line 229
#line 230
type framework_status_prop, property_type, system_property_type, system_public_property_type;
#line 230
#line 231
type gesture_prop, property_type, system_property_type, system_public_property_type;
#line 231
#line 232
type graphics_config_writable_prop, property_type, system_property_type, system_public_property_type;
#line 232
#line 233
type hal_dumpstate_config_prop, property_type, system_property_type, system_public_property_type;
#line 233
#line 234
type sota_prop, property_type, system_property_type, system_public_property_type;
#line 234
#line 235
type hwservicemanager_prop, property_type, system_property_type, system_public_property_type;
#line 235
#line 236
type lmkd_prop, property_type, system_property_type, system_public_property_type;
#line 236
#line 237
type locale_prop, property_type, system_property_type, system_public_property_type;
#line 237
#line 238
type logd_prop, property_type, system_property_type, system_public_property_type;
#line 238
#line 239
type logpersistd_logging_prop, property_type, system_property_type, system_public_property_type;
#line 239
#line 240
type log_prop, property_type, system_property_type, system_public_property_type;
#line 240
#line 241
type log_tag_prop, property_type, system_property_type, system_public_property_type;
#line 241
#line 242
type lowpan_prop, property_type, system_property_type, system_public_property_type;
#line 242
#line 243
type nfc_prop, property_type, system_property_type, system_public_property_type;
#line 243
#line 244
type ota_prop, property_type, system_property_type, system_public_property_type;
#line 244
#line 245
type permissive_mte_prop, property_type, system_property_type, system_public_property_type;
#line 245
#line 246
type powerctl_prop, property_type, system_property_type, system_public_property_type;
#line 246
#line 247
type qemu_hw_prop, property_type, system_property_type, system_public_property_type;
#line 247
#line 248
type qemu_sf_lcd_density_prop, property_type, system_property_type, system_public_property_type;
#line 248
#line 249
type radio_control_prop, property_type, system_property_type, system_public_property_type;
#line 249
#line 250
type radio_prop, property_type, system_property_type, system_public_property_type;
#line 250
#line 251
type serialno_prop, property_type, system_property_type, system_public_property_type;
#line 251
#line 252
type surfaceflinger_color_prop, property_type, system_property_type, system_public_property_type;
#line 252
#line 253
type system_prop, property_type, system_property_type, system_public_property_type;
#line 253
#line 254
type system_user_mode_emulation_prop, property_type, system_property_type, system_public_property_type;
#line 254
#line 255
type telephony_status_prop, property_type, system_property_type, system_public_property_type;
#line 255
#line 256
type timezone_prop, property_type, system_property_type, system_public_property_type;
#line 256
#line 257
type usb_control_prop, property_type, system_property_type, system_public_property_type;
#line 257
#line 258
type vold_post_fs_data_prop, property_type, system_property_type, system_public_property_type;
#line 258
#line 259
type wifi_hal_prop, property_type, system_property_type, system_public_property_type;
#line 259
#line 260
type wifi_log_prop, property_type, system_property_type, system_public_property_type;
#line 260
#line 261
type wifi_prop, property_type, system_property_type, system_public_property_type;
#line 261
#line 262
type zram_control_prop, property_type, system_property_type, system_public_property_type;
#line 262
# Properties which don't have entries on property_contexts
#line 265
#line 265
type default_prop, property_type, system_property_type, system_internal_property_type;
#line 265
#line 265
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 265
#line 265
neverallow { domain -coredomain } default_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 265
#line 265
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 265
#line 265
# Properties used in default HAL implementations
#line 268
#line 268
type rebootescrow_hal_prop, property_type, vendor_property_type, vendor_internal_property_type;
#line 268
#line 268
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 268
#line 268
# init and dumpstate are in coredomain, but should be able to read all props.
#line 268
neverallow { coredomain -init -dumpstate } rebootescrow_hal_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 268
#line 268
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 268
#line 268
# Properties used in the default Face HAL implementations
#line 271
#line 271
type virtual_face_hal_prop, property_type, vendor_property_type, vendor_internal_property_type;
#line 271
#line 271
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 271
#line 271
# init and dumpstate are in coredomain, but should be able to read all props.
#line 271
neverallow { coredomain -init -dumpstate } virtual_face_hal_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 271
#line 271
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 271
#line 271
# Properties used in the default Fingerprint HAL implementations
#line 274
#line 274
type virtual_fingerprint_hal_prop, property_type, vendor_property_type, vendor_internal_property_type;
#line 274
#line 274
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 274
#line 274
# init and dumpstate are in coredomain, but should be able to read all props.
#line 274
neverallow { coredomain -init -dumpstate } virtual_fingerprint_hal_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 274
#line 274
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 274
#line 274
#line 276
type persist_vendor_debug_wifi_prop, property_type, vendor_property_type, vendor_public_property_type;
#line 276
# Properties which are public for devices launching with Android O or earlier
# This should not be used for any new properties.
#line 280
# DO NOT ADD ANY PROPERTIES HERE
#line 280
#line 280
type boottime_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type charger_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type cold_boot_done_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type ctl_adbd_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type ctl_apexd_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type ctl_bootanim_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type ctl_bugreport_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type ctl_console_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type ctl_dumpstate_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type ctl_fuse_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type ctl_gsid_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type ctl_interface_restart_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type ctl_interface_stop_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type ctl_mdnsd_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type ctl_restart_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type ctl_rildaemon_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type ctl_sigstop_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type dynamic_system_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type heapprofd_enabled_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type llkd_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type lpdumpd_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type mmc_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type mock_ota_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type net_dns_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type overlay_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type persistent_properties_ready_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type safemode_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type system_lmk_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type system_trace_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type test_boot_reason_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type time_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type traced_enabled_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type traced_lazy_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
#line 280
type config_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type cppreopt_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type dalvik_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type debuggerd_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type device_logging_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type dhcp_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type dumpstate_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type exported3_system_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type exported_dumpstate_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type exported_secure_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type heapprofd_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type net_radio_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type pan_result_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type persist_debug_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type shell_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type test_harness_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type theme_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type use_memfd_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 280
#line 280
type vold_prop, property_type, system_property_type, system_public_property_type;
#line 280
#line 335
#line 337
#line 337
type vendor_default_prop, property_type, vendor_property_type, vendor_public_property_type;
#line 337
#line 339
# BEGIN_COMPATIBLE_PROPERTY_ONLY -- this marker is used by CTS -- do not modify
#line 341
#line 341
#line 341
#line 341
type vendor_default_prop, property_type, vendor_property_type, vendor_internal_property_type;
#line 341
#line 341
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 341
#line 341
# init and dumpstate are in coredomain, but should be able to read all props.
#line 341
neverallow { coredomain -init -dumpstate } vendor_default_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 341
#line 341
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 341
#line 341
#line 341
#line 341
# END_COMPATIBLE_PROPERTY_ONLY -- this marker is used by CTS -- do not modify
#line 343
typeattribute log_prop log_property_type;
typeattribute log_tag_prop log_property_type;
typeattribute wifi_log_prop log_property_type;
allow property_type tmpfs:filesystem associate;
# core_property_type should not be used for new properties or
# device specific properties. Properties with this attribute
# are readable to everyone, which is overly broad and should
# be avoided.
# New properties should have appropriate read / write access
# control rules written.
typeattribute audio_prop core_property_type;
typeattribute config_prop core_property_type;
typeattribute cppreopt_prop core_property_type;
typeattribute dalvik_prop core_property_type;
typeattribute debuggerd_prop core_property_type;
typeattribute debug_prop core_property_type;
typeattribute dhcp_prop core_property_type;
typeattribute dumpstate_prop core_property_type;
typeattribute logd_prop core_property_type;
typeattribute net_radio_prop core_property_type;
typeattribute nfc_prop core_property_type;
typeattribute ota_prop core_property_type;
typeattribute pan_result_prop core_property_type;
typeattribute persist_debug_prop core_property_type;
typeattribute powerctl_prop core_property_type;
typeattribute radio_prop core_property_type;
typeattribute restorecon_prop core_property_type;
typeattribute shell_prop core_property_type;
typeattribute system_prop core_property_type;
typeattribute usb_prop core_property_type;
typeattribute vold_prop core_property_type;
typeattribute dalvik_config_prop dalvik_config_prop_type;
typeattribute dalvik_dynamic_config_prop dalvik_config_prop_type;
#line 1 "system/sepolicy/public/radio.te"
# phone subsystem
type radio, domain, mlstrustedsubject;
#line 4
typeattribute radio netdomain;
#line 4
#line 5
typeattribute radio bluetoothdomain;
#line 5
#line 6
typeattribute radio binderservicedomain;
#line 6
# Talks to hal_telephony_server via the rild socket only for devices without full treble
#line 9
allow radio rild_socket:sock_file write;
#line 9
allow radio hal_telephony_server:unix_stream_socket connectto;
#line 9
# Data file accesses.
allow radio radio_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow radio radio_data_file:{ file lnk_file sock_file fifo_file } { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow radio radio_core_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow radio radio_core_data_file:file { getattr open read ioctl lock map watch watch_reads };
allow radio net_data_file:dir search;
allow radio net_data_file:file { getattr open read ioctl lock map watch watch_reads };
#line 20
allow radio radio_service:service_manager { add find };
#line 20
neverallow { domain -radio } radio_service:service_manager add;
#line 20
#line 20
# On debug builds with root, allow binder services to use binder over TCP.
#line 20
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 20
#line 20
allow radio audioserver_service:service_manager find;
allow radio cameraserver_service:service_manager find;
allow radio drmserver_service:service_manager find;
allow radio mediaserver_service:service_manager find;
allow radio nfc_service:service_manager find;
allow radio app_api_service:service_manager find;
allow radio system_api_service:service_manager find;
allow radio timedetector_service:service_manager find;
allow radio timezonedetector_service:service_manager find;
# Perform HwBinder IPC.
#line 32
# Call the hwservicemanager and transfer references to it.
#line 32
allow radio hwservicemanager:binder { call transfer };
#line 32
# Allow hwservicemanager to send out callbacks
#line 32
allow hwservicemanager radio:binder { call transfer };
#line 32
# hwservicemanager performs getpidcon on clients.
#line 32
allow hwservicemanager radio:dir search;
#line 32
allow hwservicemanager radio:file { read open map };
#line 32
allow hwservicemanager radio:process getattr;
#line 32
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 32
# all domains in domain.te.
#line 32
#line 33
typeattribute radio halclientdomain;
#line 33
typeattribute radio hal_telephony_client;
#line 33
#line 33
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 33
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 33
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 33
#line 33
typeattribute radio hal_telephony;
#line 33
# Find passthrough HAL implementations
#line 33
allow hal_telephony system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 33
allow hal_telephony vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 33
allow hal_telephony vendor_file:file { read open getattr execute map };
#line 33
#line 33
# Used by TelephonyManager
allow radio proc_cmdline:file { getattr open read ioctl lock map watch watch_reads };
#line 1 "system/sepolicy/public/recovery.te"
# recovery console (used in recovery init.rc for /sbin/recovery)
# Declare the domain unconditionally so we can always reference it
# in neverallow rules.
type recovery, domain;
# But the allow rules are only included in the recovery policy.
# Otherwise recovery is only allowed the domain rules.
#line 144
###
### neverallow rules
###
# Recovery should never touch /data.
#
# In particular, if /data is encrypted, it is not accessible
# to recovery anyway.
#
# For now, we only enforce write/execute restrictions, as domain.te
# contains a number of read-only rules that apply to all
# domains, including recovery.
#
# TODO: tighten this up further.
neverallow recovery {
data_file_type
-cache_file
-cache_recovery_file
}:file { { append create link unlink relabelfrom rename setattr write } { execute execute_no_trans } };
neverallow recovery {
data_file_type
-cache_file
-cache_recovery_file
}:dir { add_name create link relabelfrom remove_name rename reparent rmdir setattr write };
#line 1 "system/sepolicy/public/recovery_persist.te"
# android recovery persistent log manager
type recovery_persist, domain;
type recovery_persist_exec, system_file_type, exec_type, file_type;
allow recovery_persist pstorefs:dir search;
allow recovery_persist pstorefs:file { getattr open read ioctl lock map watch watch_reads };
allow recovery_persist recovery_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow recovery_persist recovery_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow recovery_persist cache_file:dir search;
allow recovery_persist cache_file:lnk_file read;
allow recovery_persist cache_recovery_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow recovery_persist cache_recovery_file:file { { getattr open read ioctl lock map watch watch_reads } unlink };
###
### Neverallow rules
###
### recovery_persist should NEVER do any of this
# Block device access.
neverallow recovery_persist dev_type:blk_file { read write };
# ptrace any other app
neverallow recovery_persist domain:process ptrace;
# Write to /system.
neverallow recovery_persist system_file_type:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } write;
# Write to files in /data/data
neverallow recovery_persist { app_data_file_type system_data_file }:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } write;
#line 1 "system/sepolicy/public/recovery_refresh.te"
# android recovery refresh log manager
type recovery_refresh, domain;
type recovery_refresh_exec, system_file_type, exec_type, file_type;
allow recovery_refresh pstorefs:dir search;
allow recovery_refresh pstorefs:file { getattr open read ioctl lock map watch watch_reads };
# NB: domain inherits write_logd which hands us write to pmsg_device
###
### Neverallow rules
###
### recovery_refresh should NEVER do any of this
# Block device access.
neverallow recovery_refresh dev_type:blk_file { read write };
# ptrace any other app
neverallow recovery_refresh domain:process ptrace;
# Write to /system.
neverallow recovery_refresh system_file_type:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } write;
# Write to files in /data/data or system files on /data
neverallow recovery_refresh { app_data_file_type system_data_file }:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } write;
#line 1 "system/sepolicy/public/remote_provisioning_service_server.te"
# This service is hosted by system server, and provides a stable aidl
# front-end for a mainline module that is loaded into system server.
#line 3
allow remote_provisioning_service_server remote_provisioning_service:service_manager { add find };
#line 3
neverallow { domain -remote_provisioning_service_server } remote_provisioning_service:service_manager add;
#line 3
#line 3
# On debug builds with root, allow binder services to use binder over TCP.
#line 3
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 3
#line 3
#line 5
# Call the servicemanager and transfer references to it.
#line 5
allow remote_provisioning_service_server servicemanager:binder { call transfer };
#line 5
# Allow servicemanager to send out callbacks
#line 5
allow servicemanager remote_provisioning_service_server:binder { call transfer };
#line 5
# servicemanager performs getpidcon on clients.
#line 5
allow servicemanager remote_provisioning_service_server:dir search;
#line 5
allow servicemanager remote_provisioning_service_server:file { read open };
#line 5
allow servicemanager remote_provisioning_service_server:process getattr;
#line 5
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 5
# all domains in domain.te.
#line 5
#line 1 "system/sepolicy/public/rkpd_app.te"
###
### A domain for sandboxing the remote key provisioning daemon
### app that is shipped via mainline.
###
type rkpdapp, domain;
#line 1 "system/sepolicy/public/rootdisk_sysdev.te"
allow rootdisk_sysdev sysfs:filesystem associate;
#line 1 "system/sepolicy/public/rs.te"
type rs, domain, coredomain;
type rs_exec, system_file_type, exec_type, file_type;
#line 1 "system/sepolicy/public/rss_hwm_reset.te"
# rss_hwm_reset resets RSS high-water mark counters for all procesess.
type rss_hwm_reset, domain, coredomain, mlstrustedsubject;
#line 1 "system/sepolicy/public/runas.te"
type runas, domain, mlstrustedsubject;
type runas_exec, system_file_type, exec_type, file_type;
allow runas adbd:fd use;
allow runas adbd:process sigchld;
allow runas adbd:unix_stream_socket { read write };
allow runas shell:fd use;
allow runas shell:fifo_file { read write };
allow runas shell:unix_stream_socket { read write };
allow runas devpts:chr_file { read write ioctl };
allow runas shell_data_file:file { read write };
# run-as reads package information.
allow runas system_data_file:file { getattr open read ioctl lock map watch watch_reads };
allow runas system_data_file:lnk_file getattr;
allow runas packages_list_file:file { getattr open read ioctl lock map watch watch_reads };
# The app's data dir may be accessed through a symlink.
allow runas system_data_file:lnk_file read;
# run-as checks and changes to the app data dir.
dontaudit runas self:{ capability cap_userns } { dac_override dac_read_search };
allow runas app_data_file:dir { getattr search };
# run-as switches to the app UID/GID.
allow runas self:{ capability cap_userns } { setuid setgid };
# run-as switches to the app security context.
#line 29
#line 29
allow runas selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 29
allow runas selinuxfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 29
#line 29
allow runas selinuxfs:file { open append write lock map };
#line 29
allow runas kernel:security check_context;
#line 29
# validate context
allow runas self:process setcurrent;
allow runas { appdomain -system_app }:process dyntransition; # setcon
# runas/libselinux needs access to seapp_contexts_file to
# determine which domain to transition to.
allow runas seapp_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
###
### neverallow rules
###
# run-as cannot have capabilities other than CAP_SETUID and CAP_SETGID
neverallow runas self:{ capability cap_userns } ~{ setuid setgid };
neverallow runas self:{ capability2 cap2_userns } *;
#line 1 "system/sepolicy/public/runas_app.te"
type runas_app, domain;
#line 1 "system/sepolicy/public/scheduler_service_server.te"
#line 1
allow scheduler_service_server fwk_scheduler_hwservice:hwservice_manager { add find };
#line 1
allow scheduler_service_server hidl_base_hwservice:hwservice_manager add;
#line 1
neverallow { domain -scheduler_service_server } fwk_scheduler_hwservice:hwservice_manager add;
#line 1
#line 1 "system/sepolicy/public/sdcardd.te"
type sdcardd, domain;
type sdcardd_exec, system_file_type, exec_type, file_type;
allow sdcardd cgroup:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow sdcardd cgroup_v2:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow sdcardd fuse_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow sdcardd rootfs:dir mounton; # TODO: deprecated in M
allow sdcardd sdcardfs:filesystem remount;
allow sdcardd tmpfs:dir { open getattr read search ioctl lock watch watch_reads };
allow sdcardd mnt_media_rw_file:dir { open getattr read search ioctl lock watch watch_reads };
allow sdcardd storage_file:dir search;
allow sdcardd storage_stub_file:dir { search mounton };
allow sdcardd { sdcard_type fuse }:filesystem { mount unmount };
allow sdcardd self:{ capability cap_userns } { setuid setgid dac_override dac_read_search sys_admin sys_resource };
allow sdcardd { sdcard_type fuse }:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow sdcardd { sdcard_type fuse }:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow sdcardd media_rw_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow sdcardd media_rw_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Read /data/system/packages.list.
allow sdcardd system_data_file:file { getattr open read ioctl lock map watch watch_reads };
allow sdcardd packages_list_file:file { getattr open read ioctl lock map watch watch_reads };
# Read /data/misc/installd/layout_version
allow sdcardd install_data_file:file { getattr open read ioctl lock map watch watch_reads };
allow sdcardd install_data_file:dir search;
# Allow stdin/out back to vold
allow sdcardd vold:fd use;
allow sdcardd vold:fifo_file { read write getattr };
# Allow running on top of expanded storage
allow sdcardd mnt_expand_file:dir search;
# access /proc/filesystems
allow sdcardd proc_filesystems:file { getattr open read ioctl lock map watch watch_reads };
###
### neverallow rules
###
# The sdcard daemon should no longer be started from init
neverallow init sdcardd_exec:file execute;
neverallow init sdcardd:process { transition dyntransition };
#line 1 "system/sepolicy/public/secure_element.te"
# secure_element subsystem
type secure_element, domain;
#line 1 "system/sepolicy/public/sensor_service_server.te"
#line 1
allow sensor_service_server fwk_sensor_hwservice:hwservice_manager { add find };
#line 1
allow sensor_service_server hidl_base_hwservice:hwservice_manager add;
#line 1
neverallow { domain -sensor_service_server } fwk_sensor_hwservice:hwservice_manager add;
#line 1
#line 1 "system/sepolicy/public/service.te"
type aidl_lazy_test_service, service_manager_type;
type apc_service, service_manager_type;
type apex_service, service_manager_type;
type artd_service, service_manager_type;
type artd_pre_reboot_service, service_manager_type;
type audioserver_service, service_manager_type, isolated_compute_allowed_service;
type authorization_service, service_manager_type;
type batteryproperties_service, app_api_service, ephemeral_app_api_service, service_manager_type;
type bluetooth_service, service_manager_type;
type cameraserver_service, service_manager_type, isolated_compute_allowed_service;
type fwk_camera_service, service_manager_type;
type default_android_service, service_manager_type;
type device_config_updatable_service, system_api_service, system_server_service,service_manager_type;
type dexopt_chroot_setup_service, service_manager_type;
type dnsresolver_service, service_manager_type;
type drmserver_service, service_manager_type;
type dumpstate_service, service_manager_type;
type evsmanagerd_service, service_manager_type;
type fingerprintd_service, service_manager_type;
type fwk_automotive_display_service, service_manager_type;
type gatekeeper_service, app_api_service, service_manager_type;
type gpu_service, app_api_service, ephemeral_app_api_service, service_manager_type;
type idmap_service, service_manager_type;
type incident_service, service_manager_type;
type installd_service, service_manager_type;
type credstore_service, app_api_service, service_manager_type;
type keystore_compat_hal_service, service_manager_type;
type keystore_maintenance_service, service_manager_type;
type keystore_metrics_service, service_manager_type;
type keystore_service, service_manager_type;
type legacykeystore_service, service_manager_type;
type lpdump_service, service_manager_type;
type mdns_service, service_manager_type;
type mediaserver_service, service_manager_type, isolated_compute_allowed_service;
type mediametrics_service, service_manager_type;
type mediaextractor_service, service_manager_type;
type mediadrmserver_service, service_manager_type;
type mediatranscoding_service, app_api_service, service_manager_type;
type netd_service, service_manager_type;
type nfc_service, service_manager_type;
type ondevicepersonalization_system_service, system_api_service, system_server_service, service_manager_type;
type ot_daemon_service, service_manager_type;
type profiling_service, app_api_service, system_server_service, service_manager_type;
type radio_service, service_manager_type;
type secure_element_service, service_manager_type;
type service_manager_service, service_manager_type;
type storaged_service, service_manager_type;
type surfaceflinger_service, app_api_service, ephemeral_app_api_service, service_manager_type;
type system_app_service, service_manager_type;
type system_net_netd_service, service_manager_type;
type system_suspend_control_internal_service, service_manager_type;
type system_suspend_control_service, service_manager_type;
type update_engine_service, service_manager_type;
type update_engine_stable_service, service_manager_type;
type virtualization_service, service_manager_type;
type virtual_camera_service, service_manager_type;
type virtual_touchpad_service, service_manager_type;
type vold_service, service_manager_type;
type vr_hwc_service, service_manager_type;
type vrflinger_vsync_service, service_manager_type;
# system_server_services broken down
type accessibility_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type account_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type activity_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type activity_task_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type adb_service, system_api_service, system_server_service, service_manager_type;
type adservices_manager_service, system_api_service, system_server_service, service_manager_type;
type alarm_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type app_binding_service, system_server_service, service_manager_type;
type app_hibernation_service, app_api_service, system_api_service, system_server_service, service_manager_type;
type app_integrity_service, system_api_service, system_server_service, service_manager_type;
type app_prediction_service, app_api_service, system_server_service, service_manager_type;
type app_search_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type appops_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type appwidget_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type archive_service, app_api_service, system_server_service, service_manager_type;
type assetatlas_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type attestation_verification_service, app_api_service, system_server_service, service_manager_type;
type audio_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type auth_service, app_api_service, system_server_service, service_manager_type;
type autofill_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type backup_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type batterystats_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type battery_service, system_server_service, service_manager_type;
type binder_calls_stats_service, system_server_service, service_manager_type;
type blob_store_service, app_api_service, system_server_service, service_manager_type;
type bluetooth_manager_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type broadcastradio_service, app_api_service, system_server_service, service_manager_type;
type cacheinfo_service, system_api_service, system_server_service, service_manager_type;
type cameraproxy_service, system_server_service, service_manager_type;
type clipboard_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type cloudsearch_service, app_api_service, system_server_service, service_manager_type;
type contexthub_service, app_api_service, system_server_service, service_manager_type;
type contextual_search_service, app_api_service, system_server_service, service_manager_type;
type crossprofileapps_service, app_api_service, system_server_service, service_manager_type;
type IProxyService_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type companion_device_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type connectivity_native_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type connectivity_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type connmetrics_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type consumer_ir_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type content_capture_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type, isolated_compute_allowed_service;
type content_suggestions_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type content_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type country_detector_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
# Note: The coverage_service should only be enabled for userdebug / eng builds that were compiled
# with EMMA_INSTRUMENT=true. We should consider locking this down in the future.
type coverage_service, system_server_service, service_manager_type;
type cpuinfo_service, system_api_service, system_server_service, service_manager_type;
type cpu_monitor_service, system_server_service, service_manager_type;
type credential_service, app_api_service, ephemeral_app_api_service, system_api_service, system_server_service, service_manager_type;
type dataloader_manager_service, system_server_service, service_manager_type;
type dbinfo_service, system_api_service, system_server_service, service_manager_type;
type device_config_service, system_server_service, service_manager_type;
type device_policy_service, app_api_service, system_server_service, service_manager_type;
type device_state_service, app_api_service, system_api_service, system_server_service, service_manager_type, isolated_compute_allowed_service;
type deviceidle_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type device_identifiers_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type devicestoragemonitor_service, system_server_service, service_manager_type;
type diskstats_service, system_api_service, system_server_service, service_manager_type;
type display_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type domain_verification_service, app_api_service, system_server_service, service_manager_type;
type color_display_service, app_api_service, system_api_service, system_server_service, service_manager_type;
type ecm_enhanced_confirmation_service, app_api_service, system_server_service, service_manager_type;
type external_vibrator_service, system_server_service, service_manager_type;
type file_integrity_service, app_api_service, system_server_service, service_manager_type;
type font_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type netd_listener_service, system_server_service, service_manager_type;
type network_watchlist_service, system_server_service, service_manager_type;
type devicelock_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type DockObserver_service, system_server_service, service_manager_type;
type dreams_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type dropbox_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type ethernet_service, app_api_service, system_server_service, service_manager_type;
type biometric_service, app_api_service, system_server_service, service_manager_type;
type bugreport_service, app_api_service, system_server_service, service_manager_type;
type platform_compat_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type face_service, app_api_service, system_server_service, service_manager_type;
type fingerprint_service, app_api_service, system_server_service, service_manager_type;
type fwk_altitude_service, system_server_service, service_manager_type;
type fwk_stats_service, app_api_service, system_server_service, service_manager_type;
type fwk_sensor_service, system_server_service, service_manager_type;
type fwk_vibrator_control_service, system_server_service, service_manager_type;
type game_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type gfxinfo_service, system_api_service, system_server_service, service_manager_type;
type gnss_time_update_service, system_server_service, service_manager_type;
type grammatical_inflection_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type graphicsstats_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type hardware_service, system_server_service, service_manager_type;
type hardware_properties_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type hdmi_control_service, app_api_service, system_server_service, service_manager_type;
type healthconnect_service, app_api_service, system_server_service, service_manager_type;
type hint_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type imms_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type incremental_service, system_server_service, service_manager_type;
type input_method_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type input_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type ipsec_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type iris_service, app_api_service, system_server_service, service_manager_type;
type jobscheduler_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type launcherapps_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type legacy_permission_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type light_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type locale_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type location_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type location_time_zone_manager_service, system_server_service, service_manager_type;
type lock_settings_service, app_api_service, system_api_service, system_server_service, service_manager_type;
type looper_stats_service, system_server_service, service_manager_type;
type media_communication_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type media_metrics_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type media_projection_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type media_router_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type media_session_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type meminfo_service, system_api_service, system_server_service, service_manager_type;
type memtrackproxy_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type midi_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type mount_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type music_recognition_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type nearby_service, app_api_service, system_server_service, service_manager_type;
type netpolicy_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type netstats_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type network_management_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type network_score_service, system_api_service, system_server_service, service_manager_type;
type network_stack_service, system_server_service, service_manager_type;
type network_time_update_service, system_server_service, service_manager_type;
type notification_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type oem_lock_service, system_api_service, system_server_service, service_manager_type;
type otadexopt_service, system_server_service, service_manager_type;
type overlay_service, system_api_service, system_server_service, service_manager_type;
type pac_proxy_service, app_api_service, system_server_service, service_manager_type;
type package_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type package_native_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type people_service, app_api_service, system_server_service, service_manager_type;
type permission_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type permissionmgr_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type permission_checker_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type persistent_data_block_service, system_api_service, system_server_service, service_manager_type;
type pinner_service, system_server_service, service_manager_type;
type powerstats_service, app_api_service, system_server_service, service_manager_type;
type power_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type print_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type processinfo_service, system_server_service, service_manager_type;
type procstats_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type reboot_readiness_service, app_api_service, system_server_service, service_manager_type;
type recovery_service, system_server_service, service_manager_type;
type registry_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type remote_auth_service, app_api_service, system_server_service, service_manager_type;
type remote_provisioning_service, system_server_service, service_manager_type;
type resources_manager_service, system_api_service, system_server_service, service_manager_type;
type restrictions_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type role_service, app_api_service, system_server_service, service_manager_type;
type rollback_service, app_api_service, system_server_service, service_manager_type;
type runtime_service, system_server_service, service_manager_type;
type rttmanager_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type samplingprofiler_service, system_server_service, service_manager_type;
type scheduling_policy_service, system_server_service, service_manager_type;
type search_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type search_ui_service, app_api_service, system_server_service, service_manager_type;
type sec_key_att_app_id_provider_service, app_api_service, system_server_service, service_manager_type;
type security_state_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type selection_toolbar_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type sensitive_content_protection_service, app_api_service, system_server_service, service_manager_type;
type sensorservice_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type sensor_privacy_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type serial_service, system_api_service, system_server_service, service_manager_type;
type servicediscovery_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type settings_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type shortcut_service, app_api_service, system_server_service, service_manager_type;
type slice_service, app_api_service, system_server_service, service_manager_type;
type smartspace_service, app_api_service, system_server_service, service_manager_type;
type statusbar_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type storagestats_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type sdk_sandbox_service, app_api_service, system_server_service, service_manager_type;
type system_config_service, system_api_service, system_server_service, service_manager_type;
type system_server_dumper_service, system_api_service, system_server_service, service_manager_type;
type system_update_service, system_server_service, service_manager_type;
type soundtrigger_middleware_service, system_server_service, service_manager_type;
type speech_recognition_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type, isolated_compute_allowed_service;
type tare_service, app_api_service, system_server_service, service_manager_type;
type task_service, system_server_service, service_manager_type;
type testharness_service, system_server_service, service_manager_type;
type textclassification_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type textservices_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type texttospeech_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type telecom_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type thermal_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type threadnetwork_service, app_api_service, system_server_service, service_manager_type;
type timedetector_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type timezonedetector_service, app_api_service, system_server_service, service_manager_type;
type translation_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type trust_service, app_api_service, system_server_service, service_manager_type;
type tv_ad_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type tv_iapp_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type tv_input_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type tv_tuner_resource_mgr_service, app_api_service, system_server_service, service_manager_type;
type uimode_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type updatelock_service, system_api_service, system_server_service, service_manager_type;
type uri_grants_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type usagestats_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type usb_service, app_api_service, system_server_service, service_manager_type;
type user_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type uwb_service, app_api_service, system_server_service, service_manager_type;
type vcn_management_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type vibrator_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type vibrator_manager_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type virtual_device_service, app_api_service, system_server_service, service_manager_type;
type virtual_device_native_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type voiceinteraction_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type vpn_management_service, app_api_service, system_server_service, service_manager_type;
type vr_manager_service, system_server_service, service_manager_type;
type wallpaper_service, app_api_service, system_server_service, service_manager_type;
type wallpaper_effects_generation_service, app_api_service, system_server_service, service_manager_type;
type webviewupdate_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type wifip2p_service, app_api_service, system_server_service, service_manager_type;
type wifiscanner_service, system_api_service, system_server_service, service_manager_type;
type wifi_service, app_api_service, system_server_service, service_manager_type;
type wifinl80211_service, service_manager_type;
type wifiaware_service, app_api_service, system_server_service, service_manager_type;
type window_service, system_api_service, system_server_service, service_manager_type;
type inputflinger_service, system_api_service, system_server_service, service_manager_type;
type tethering_service, app_api_service, ephemeral_app_api_service, system_server_service, service_manager_type;
type emergency_affordance_service, system_server_service, service_manager_type;
###
### HAL Services
###
type hal_audio_service, protected_service, hal_service_type, service_manager_type;
type hal_audiocontrol_service, hal_service_type, service_manager_type;
type hal_authgraph_service, protected_service, hal_service_type, service_manager_type;
type hal_authsecret_service, protected_service, hal_service_type, service_manager_type;
type hal_bluetooth_service, protected_service, hal_service_type, service_manager_type;
type hal_bootctl_service, protected_service, hal_service_type, service_manager_type;
type hal_broadcastradio_service, protected_service, hal_service_type, service_manager_type;
type hal_camera_service, protected_service, hal_service_type, service_manager_type;
type hal_can_controller_service, protected_service, hal_service_type, service_manager_type;
type hal_cas_service, hal_service_type, service_manager_type;
type hal_codec2_service, hal_service_type, service_manager_type, isolated_compute_allowed_service;
type hal_confirmationui_service, protected_service, hal_service_type, service_manager_type;
type hal_contexthub_service, protected_service, hal_service_type, service_manager_type;
type hal_drm_service, hal_service_type, service_manager_type;
type hal_dumpstate_service, protected_service, hal_service_type, service_manager_type;
type hal_evs_service, protected_service, hal_service_type, service_manager_type;
type hal_face_service, protected_service, hal_service_type, service_manager_type;
type hal_fastboot_service, protected_service, hal_service_type, service_manager_type;
type hal_fingerprint_service, protected_service, hal_service_type, service_manager_type;
type hal_gnss_service, protected_service, hal_service_type, service_manager_type;
type hal_graphics_allocator_service, hal_service_type, service_manager_type;
type hal_graphics_composer_service, protected_service, hal_service_type, service_manager_type;
type hal_graphics_mapper_service, hal_service_type, service_manager_type;
type hal_health_service, protected_service, hal_service_type, service_manager_type;
type hal_health_storage_service, protected_service, hal_service_type, service_manager_type;
type hal_identity_service, protected_service, hal_service_type, service_manager_type;
type hal_input_processor_service, protected_service, hal_service_type, service_manager_type;
type hal_ir_service, protected_service, hal_service_type, service_manager_type;
type hal_ivn_service, protected_service, hal_service_type, service_manager_type;
type hal_keymint_service, protected_service, hal_service_type, service_manager_type;
type hal_light_service, protected_service, hal_service_type, service_manager_type;
type hal_macsec_service, protected_service, hal_service_type, service_manager_type;
type hal_memtrack_service, protected_service, hal_service_type, service_manager_type;
type hal_neuralnetworks_service, hal_service_type, service_manager_type;
type hal_nfc_service, protected_service, hal_service_type, service_manager_type;
type hal_oemlock_service, protected_service, hal_service_type, service_manager_type;
type hal_power_service, protected_service, hal_service_type, service_manager_type;
type hal_power_stats_service, protected_service, hal_service_type, service_manager_type;
type hal_radio_service, protected_service, hal_service_type, service_manager_type;
type hal_rebootescrow_service, protected_service, hal_service_type, service_manager_type;
type hal_remoteaccess_service, protected_service, hal_service_type, service_manager_type;
type hal_remotelyprovisionedcomponent_avf_service, protected_service, hal_service_type, service_manager_type;
type hal_remotelyprovisionedcomponent_service, protected_service, hal_service_type, service_manager_type;
type hal_sensors_service, protected_service, hal_service_type, service_manager_type;
type hal_secretkeeper_service, protected_service, hal_service_type, service_manager_type;
type hal_secureclock_service, protected_service, hal_service_type, service_manager_type;
type hal_secure_element_service, protected_service, hal_service_type, service_manager_type;
type hal_sharedsecret_service, protected_service, hal_service_type, service_manager_type;
type hal_system_suspend_service, protected_service, hal_service_type, service_manager_type;
type hal_tetheroffload_service, protected_service, hal_service_type, service_manager_type;
type hal_thermal_service, protected_service, hal_service_type, service_manager_type;
type hal_tv_hdmi_cec_service, protected_service, hal_service_type, service_manager_type;
type hal_tv_hdmi_connection_service, protected_service, hal_service_type, service_manager_type;
type hal_tv_hdmi_earc_service, protected_service, hal_service_type, service_manager_type;
type hal_tv_input_service, protected_service, hal_service_type, service_manager_type;
type hal_threadnetwork_service, protected_service, hal_service_type, service_manager_type;
type hal_tv_tuner_service, protected_service, hal_service_type, service_manager_type;
type hal_usb_service, protected_service, hal_service_type, service_manager_type;
type hal_usb_gadget_service, protected_service, hal_service_type, service_manager_type;
type hal_uwb_service, protected_service, hal_service_type, service_manager_type;
type hal_vehicle_service, protected_service, hal_service_type, service_manager_type;
type hal_vibrator_service, protected_service, hal_service_type, service_manager_type;
type hal_weaver_service, protected_service, hal_service_type, service_manager_type;
type hal_nlinterceptor_service, protected_service, hal_service_type, service_manager_type;
type hal_wifi_service, protected_service, hal_service_type, service_manager_type;
type hal_wifi_hostapd_service, protected_service, hal_service_type, service_manager_type;
type hal_wifi_supplicant_service, protected_service, hal_service_type, service_manager_type;
type hal_gatekeeper_service, protected_service, hal_service_type, service_manager_type;
###
### Neverallow rules
###
# servicemanager handles registering or looking up named services.
# It does not make sense to register or lookup something which is not a service.
# Trigger a compile error if this occurs.
neverallow domain ~{ service_manager_type vndservice_manager_type }:service_manager { add find };
#line 1 "system/sepolicy/public/servicemanager.te"
# servicemanager - the Binder context manager
type servicemanager, domain, mlstrustedsubject;
type servicemanager_exec, system_file_type, exec_type, file_type;
# Note that we do not use the binder_* macros here.
# servicemanager is unique in that it only provides
# name service (aka context manager) for Binder.
# As such, it only ever receives and transfers other references
# created by other domains. It never passes its own references
# or initiates a Binder IPC.
allow servicemanager self:binder set_context_mgr;
allow servicemanager {
domain
-init
-vendor_init
-hwservicemanager
-vndservicemanager
}:binder transfer;
allow servicemanager service_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
allow servicemanager vendor_service_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
# nonplat_service_contexts only accessible on non full-treble devices
allow servicemanager vendor_service_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
#line 27
allow servicemanager service_manager_service:service_manager { add find };
#line 27
neverallow { domain -servicemanager } service_manager_service:service_manager add;
#line 27
#line 27
# On debug builds with root, allow binder services to use binder over TCP.
#line 27
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 27
#line 27
allow servicemanager dumpstate:fd use;
allow servicemanager dumpstate:fifo_file write;
# Check SELinux permissions.
#line 32
#line 32
allow servicemanager selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 32
allow servicemanager selinuxfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 32
#line 32
allow servicemanager selinuxfs:file { open append write lock map };
#line 32
allow servicemanager kernel:security compute_av;
#line 32
allow servicemanager self:netlink_selinux_socket { read write create getattr setattr lock relabelfrom relabelto append bind connect listen accept getopt setopt shutdown recvfrom sendto name_bind };
#line 32
allow servicemanager kmsg_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 39
#line 1 "system/sepolicy/public/sgdisk.te"
# sgdisk called from vold
type sgdisk, domain;
type sgdisk_exec, system_file_type, exec_type, file_type;
# Allowed to read/write low-level partition tables
allow sgdisk block_device:dir search;
allow sgdisk vold_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# HDIO_GETGEO needed to get the number of disk heads
# on vold_device. How quaint.
allowxperm sgdisk vold_device:blk_file ioctl { 0x00000301 };
# sgdisk also uses BLKGETSIZE and BLKGETSIZE64. BLKGETSIZE64
# is granted to all block device users in domain.te, so
# no need to mention it here. sgdisk should not be
# using the BLKGETSIZE ioctl as it is useless for devices over
# 2T in size, but we allow it for now and hope that sgdisk
# will fix their bug.
allowxperm sgdisk vold_device:blk_file ioctl { 0x00001260 };
# Force a re-read of the partition table.
allowxperm sgdisk vold_device:blk_file ioctl { 0x0000125f };
# Allow reading of the physical block size.
allowxperm sgdisk vold_device:blk_file ioctl { 0x0000127b };
# Inherit and use pty created by android_fork_execvp()
allow sgdisk devpts:chr_file { read write ioctl getattr };
# Allow stdin/out back to vold
allow sgdisk vold:fd use;
allow sgdisk vold:fifo_file { read write getattr };
# Used to probe kernel to reload partition tables
allow sgdisk self:{ capability cap_userns } sys_admin;
# Only allow entry from vold
neverallow { domain -vold } sgdisk:process transition;
neverallow * sgdisk:process dyntransition;
neverallow sgdisk { file_type fs_type -sgdisk_exec }:file entrypoint;
#line 1 "system/sepolicy/public/shared_relro.te"
# Process which creates/updates shared RELRO files to be used by other apps.
type shared_relro, domain;
#line 1 "system/sepolicy/public/shell.te"
# Domain for shell processes spawned by ADB or console service.
type shell, domain, mlstrustedsubject;
type shell_exec, system_file_type, exec_type, file_type;
# Create and use network sockets.
#line 6
typeattribute shell netdomain;
#line 6
# logcat
#line 9
allow shell logcat_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
#line 9
#line 9
allow shell logdr_socket:sock_file write;
#line 9
allow shell logd:unix_stream_socket connectto;
#line 9
#line 9
#line 10
# Group AID_LOG checked by filesystem & logd
#line 10
# to permit control commands
#line 10
#line 10
allow shell logd_socket:sock_file write;
#line 10
allow shell logd:unix_stream_socket connectto;
#line 10
#line 10
#line 11
allow shell logd_prop:file { getattr open read map };
#line 11
# logcat -L (directly, or via dumpstate)
allow shell pstorefs:dir search;
allow shell pstorefs:file { getattr open read ioctl lock map watch watch_reads };
# Root fs.
allow shell rootfs:dir { open getattr read search ioctl lock watch watch_reads };
# read files in /data/anr
allow shell anr_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow shell anr_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Access /data/local/tmp.
allow shell shell_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow shell shell_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow shell shell_data_file:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow shell shell_data_file:lnk_file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Access /data/local/tests.
allow shell shell_test_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow shell shell_test_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow shell shell_test_data_file:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow shell shell_test_data_file:lnk_file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow shell shell_test_data_file:sock_file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Read and delete from /data/local/traces.
allow shell trace_data_file:file { { getattr open read ioctl lock map watch watch_reads } unlink };
allow shell trace_data_file:dir { { open getattr read search ioctl lock watch watch_reads } remove_name write };
# Access /data/misc/profman.
allow shell profman_dump_data_file:dir { write remove_name { open getattr read search ioctl lock watch watch_reads } };
allow shell profman_dump_data_file:file { unlink { getattr open read ioctl lock map watch watch_reads } };
# Read/execute files in /data/nativetest
#line 48
# adb bugreport
#line 51
allow shell dumpstate_socket:sock_file write;
#line 51
allow shell dumpstate:unix_stream_socket connectto;
#line 51
allow shell devpts:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow shell tty_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow shell console_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow shell input_device:dir { open getattr read search ioctl lock watch watch_reads };
allow shell input_device:chr_file { getattr open read ioctl lock map watch watch_reads };
#line 60
allow shell system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 60
allow shell system_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 60
allow shell system_file:file { getattr execute execute_no_trans map };
allow shell toolbox_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow shell shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow shell zygote_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
#line 70
# allow shell access to services
allow shell servicemanager:service_manager list;
# don't allow shell to access GateKeeper service
# TODO: why is this so broad? Tightening candidate? It needs at list:
# - dumpstate_service (so it can receive dumpstate progress updates)
allow shell {
service_manager_type
-apex_service
-dnsresolver_service
-gatekeeper_service
-hal_keymint_service
-hal_secureclock_service
-hal_sharedsecret_service
-incident_service
-installd_service
-mdns_service
-netd_service
-system_suspend_control_internal_service
-system_suspend_control_service
-virtual_touchpad_service
-vold_service
-default_android_service
}:service_manager find;
allow shell dumpstate:binder call;
# allow shell to get information from hwservicemanager
# for instance, listing hardware services with lshal
#line 99
# Call the hwservicemanager and transfer references to it.
#line 99
allow shell hwservicemanager:binder { call transfer };
#line 99
# Allow hwservicemanager to send out callbacks
#line 99
allow hwservicemanager shell:binder { call transfer };
#line 99
# hwservicemanager performs getpidcon on clients.
#line 99
allow hwservicemanager shell:dir search;
#line 99
allow hwservicemanager shell:file { read open map };
#line 99
allow hwservicemanager shell:process getattr;
#line 99
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 99
# all domains in domain.te.
#line 99
allow shell hwservicemanager:hwservice_manager list;
# allow shell to look through /proc/ for lsmod, ps, top, netstat, vmstat.
#line 103
allow shell proc_net_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 103
allow shell proc_net_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 103
allow shell {
proc_asound
proc_filesystems
proc_interrupts
proc_loadavg # b/124024827
proc_meminfo
proc_modules
proc_pid_max
proc_slabinfo
proc_stat
proc_timer
proc_uptime
proc_version
proc_vmstat
proc_zoneinfo
}:file { getattr open read ioctl lock map watch watch_reads };
# allow listing network interfaces under /sys/class/net.
allow shell sysfs_net:dir { open getattr read search ioctl lock watch watch_reads };
#line 125
allow shell cgroup:dir { open getattr read search ioctl lock watch watch_reads };
#line 125
allow shell cgroup:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 125
allow shell cgroup_desc_file:file { getattr open read ioctl lock map watch watch_reads };
allow shell cgroup_desc_api_file:file { getattr open read ioctl lock map watch watch_reads };
allow shell vendor_cgroup_desc_file:file { getattr open read ioctl lock map watch watch_reads };
#line 129
allow shell cgroup_v2:dir { open getattr read search ioctl lock watch watch_reads };
#line 129
allow shell cgroup_v2:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 129
allow shell domain:dir { search open read getattr };
allow shell domain:{ file lnk_file } { open read getattr };
# statvfs() of /proc and other labeled filesystems
# (yaffs2, jffs2, ext2, ext3, ext4, xfs, btrfs, f2fs, squashfs, overlay)
allow shell { proc labeledfs }:filesystem getattr;
# stat() of /dev
allow shell device:dir getattr;
# allow shell to read /proc/pid/attr/current for ps -Z
allow shell domain:process getattr;
# Allow pulling the SELinux policy for CTS purposes
allow shell selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
allow shell selinuxfs:file { getattr open read ioctl lock map watch watch_reads };
# enable shell domain to read/write files/dirs for bootchart data
# User will creates the start and stop file via adb shell
# and read other files created by init process under /data/bootchart
allow shell bootchart_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow shell bootchart_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Make sure strace works for the non-privileged shell user
allow shell self:process ptrace;
# allow shell to get battery info
allow shell sysfs:dir { open getattr read search ioctl lock watch watch_reads };
allow shell sysfs_batteryinfo:dir { open getattr read search ioctl lock watch watch_reads };
allow shell sysfs_batteryinfo:file { getattr open read ioctl lock map watch watch_reads };
# Allow access to ion memory allocation device.
allow shell ion_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#
# filesystem test for insecure chr_file's is done
# via a host side test
#
allow shell dev_type:dir { open getattr read search ioctl lock watch watch_reads };
allow shell dev_type:chr_file getattr;
# /dev/fd is a symlink
allow shell proc:lnk_file getattr;
#
# filesystem test for insucre blk_file's is done
# via hostside test
#
allow shell dev_type:blk_file getattr;
# read selinux policy files
allow shell file_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
allow shell property_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
allow shell seapp_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
allow shell service_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
allow shell sepolicy_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow shell to start up vendor shell
allow shell vendor_shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Everything is labeled as rootfs in recovery mode. Allow shell to
# execute them.
#line 194
###
### Neverallow rules
###
# Do not allow shell to talk directly to security HAL services other than
# hal_remotelyprovisionedcomponent_service
neverallow shell {
hal_keymint_service
hal_secureclock_service
hal_sharedsecret_service
}:service_manager find;
# Do not allow shell to hard link to any files.
# In particular, if shell hard links to app data
# files, installd will not be able to guarantee the deletion
# of the linked to file. Hard links also contribute to security
# bugs, so we want to ensure the shell user never has this
# capability.
neverallow shell file_type:file link;
# Do not allow privileged socket ioctl commands
neverallowxperm shell domain:{ rawip_socket tcp_socket udp_socket } ioctl
#line 217
{
#line 217
# qualcomm rmnet ioctls
#line 217
0x00006900 0x00006902
#line 217
# socket ioctls
#line 217
0x0000890b 0x0000890c 0x0000890d 0x00008911 0x00008914 0x00008916
#line 217
0x00008918 0x0000891a 0x0000891c 0x0000891d 0x0000891e 0x0000891f
#line 217
0x00008920 0x00008922 0x00008923 0x00008924 0x00008925 0x00008926
#line 217
0x00008927 0x00008929 0x00008930 0x00008931 0x00008932
#line 217
0x00008934 0x00008935 0x00008936 0x00008937 0x00008939 0x00008940 0x00008941
#line 217
0x00008943 0x00008946 0x00008947 0x00008948 0x00008949 0x0000894a
#line 217
0x0000894b 0x00008953 0x00008954 0x00008955 0x00008960 0x00008961 0x00008962 0x00008970
#line 217
0x00008971 0x00008980 0x00008981 0x00008982 0x00008983 0x00008990
#line 217
0x00008991 0x00008992 0x00008993 0x00008994
#line 217
0x00008995 0x000089a0 0x000089a1 0x000089a2 0x000089a3 0x000089b0
#line 217
# device and protocol specific ioctls
#line 217
0x000089f0-0x000089ff
#line 217
0x000089e0-0x000089ef
#line 217
# Wireless extension ioctls
#line 217
0x00008b00 0x00008b02 0x00008b04 0x00008b06 0x00008b08 0x00008b0a
#line 217
0x00008b0c 0x00008b0e 0x00008b10 0x00008b14 0x00008b15 0x00008b16 0x00008b17
#line 217
0x00008b18 0x00008b19 0x00008b1a 0x00008b1b 0x00008b1c 0x00008b1d
#line 217
0x00008b20 0x00008b22 0x00008b24 0x00008b26 0x00008b28 0x00008b2a
#line 217
0x00008b2b 0x00008b2c 0x00008b30 0x00008b31 0x00008b32 0x00008b33
#line 217
0x00008b34 0x00008b35 0x00008b36
#line 217
# Dev private ioctl i.e. hardware specific ioctls
#line 217
0x00008be0-0x00008bff
#line 217
};
# limit shell access to sensitive char drivers to
# only getattr required for host side test.
neverallow shell {
fuse_device
hw_random_device
port_device
}:chr_file ~getattr;
# Limit shell to only getattr on blk devices for host side tests.
neverallow shell dev_type:blk_file ~getattr;
# b/30861057: Shell access to existing input devices is an abuse
# vector. The shell user can inject events that look like they
# originate from the touchscreen etc.
# Everyone should have already moved to UiAutomation#injectInputEvent
# if they are running instrumentation tests (i.e. CTS), Monkey for
# their stress tests, and the input command (adb shell input ...) for
# injecting swipes and things.
neverallow shell input_device:chr_file { append create link unlink relabelfrom rename setattr write };
#line 1 "system/sepolicy/public/simpleperf.te"
type simpleperf, domain;
#line 1 "system/sepolicy/public/simpleperf_app_runner.te"
type simpleperf_app_runner, domain, mlstrustedsubject;
type simpleperf_app_runner_exec, system_file_type, exec_type, file_type;
#line 1 "system/sepolicy/public/slideshow.te"
# slideshow seclabel is specified in init.rc since
# it lives in the rootfs and has no unique file type.
type slideshow, domain;
allow slideshow kmsg_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 6
# TODO(b/115946999): Remove /sys/power/* permissions once CONFIG_PM_WAKELOCKS is
#line 6
# deprecated.
#line 6
# Access /sys/power/wake_lock and /sys/power/wake_unlock
#line 6
allow slideshow sysfs_wake_lock:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 6
# Accessing these files requires CAP_BLOCK_SUSPEND
#line 6
allow slideshow self:{ capability2 cap2_userns } block_suspend;
#line 6
# system_suspend permissions
#line 6
#line 6
# Call the server domain and optionally transfer references to it.
#line 6
allow slideshow system_suspend_server:binder { call transfer };
#line 6
# Allow the serverdomain to transfer references to the client on the reply.
#line 6
allow system_suspend_server slideshow:binder transfer;
#line 6
# Receive and use open files from the server.
#line 6
allow slideshow system_suspend_server:fd use;
#line 6
#line 6
allow slideshow system_suspend_hwservice:hwservice_manager find;
#line 6
# halclientdomain permissions
#line 6
#line 6
# Call the hwservicemanager and transfer references to it.
#line 6
allow slideshow hwservicemanager:binder { call transfer };
#line 6
# Allow hwservicemanager to send out callbacks
#line 6
allow hwservicemanager slideshow:binder { call transfer };
#line 6
# hwservicemanager performs getpidcon on clients.
#line 6
allow hwservicemanager slideshow:dir search;
#line 6
allow hwservicemanager slideshow:file { read open map };
#line 6
allow hwservicemanager slideshow:process getattr;
#line 6
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 6
# all domains in domain.te.
#line 6
#line 6
#line 6
allow slideshow hwservicemanager_prop:file { getattr open read map };
#line 6
#line 6
allow slideshow hidl_manager_hwservice:hwservice_manager find;
#line 6
# AIDL suspend hal permissions
#line 6
allow slideshow hal_system_suspend_service:service_manager find;
#line 6
#line 6
# Call the servicemanager and transfer references to it.
#line 6
allow slideshow servicemanager:binder { call transfer };
#line 6
# Allow servicemanager to send out callbacks
#line 6
allow servicemanager slideshow:binder { call transfer };
#line 6
# servicemanager performs getpidcon on clients.
#line 6
allow servicemanager slideshow:dir search;
#line 6
allow servicemanager slideshow:file { read open };
#line 6
allow servicemanager slideshow:process getattr;
#line 6
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 6
# all domains in domain.te.
#line 6
#line 6
allow slideshow device:dir { open getattr read search ioctl lock watch watch_reads };
allow slideshow self:{ capability cap_userns } sys_tty_config;
allow slideshow graphics_device:dir { open getattr read search ioctl lock watch watch_reads };
allow slideshow graphics_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow slideshow input_device:dir { open getattr read search ioctl lock watch watch_reads };
allow slideshow input_device:chr_file { getattr open read ioctl lock map watch watch_reads };
allow slideshow tty_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 1 "system/sepolicy/public/stats_service_server.te"
#line 1
allow stats_service_server fwk_stats_hwservice:hwservice_manager { add find };
#line 1
allow stats_service_server hidl_base_hwservice:hwservice_manager add;
#line 1
neverallow { domain -stats_service_server } fwk_stats_hwservice:hwservice_manager add;
#line 1
#line 2
allow stats_service_server fwk_stats_service:service_manager { add find };
#line 2
neverallow { domain -stats_service_server } fwk_stats_service:service_manager add;
#line 2
#line 2
# On debug builds with root, allow binder services to use binder over TCP.
#line 2
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 2
#line 2
#line 4
# Call the servicemanager and transfer references to it.
#line 4
allow stats_service_server servicemanager:binder { call transfer };
#line 4
# Allow servicemanager to send out callbacks
#line 4
allow servicemanager stats_service_server:binder { call transfer };
#line 4
# servicemanager performs getpidcon on clients.
#line 4
allow servicemanager stats_service_server:dir search;
#line 4
allow servicemanager stats_service_server:file { read open };
#line 4
allow servicemanager stats_service_server:process getattr;
#line 4
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 4
# all domains in domain.te.
#line 4
#line 1 "system/sepolicy/public/statsd.te"
type statsd, domain, mlstrustedsubject;
type statsd_exec, system_file_type, exec_type, file_type;
#line 4
# Call the servicemanager and transfer references to it.
#line 4
allow statsd servicemanager:binder { call transfer };
#line 4
# Allow servicemanager to send out callbacks
#line 4
allow servicemanager statsd:binder { call transfer };
#line 4
# servicemanager performs getpidcon on clients.
#line 4
allow servicemanager statsd:dir search;
#line 4
allow servicemanager statsd:file { read open };
#line 4
allow servicemanager statsd:process getattr;
#line 4
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 4
# all domains in domain.te.
#line 4
# Allow statsd to scan through /proc/pid for all processes.
#line 7
allow statsd domain:dir { open getattr read search ioctl lock watch watch_reads };
#line 7
allow statsd domain:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 7
# Allow executing files on system, such as running a shell or running:
# /system/bin/toolbox
# /system/bin/logcat
# /system/bin/dumpsys
allow statsd devpts:chr_file { getattr ioctl read write };
allow statsd shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow statsd system_file:file execute_no_trans;
allow statsd toolbox_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
#line 20
# Create, read, and write into
# /data/misc/stats-active-metric
# /data/misc/stats-data
# /data/misc/stats-metadata
# /data/misc/stats-service
# /data/misc/train-info
allow statsd stats_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow statsd stats_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow statsd stats_config_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow statsd stats_config_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow statsd to make binder calls to any binder service.
#line 34
# Call the server domain and optionally transfer references to it.
#line 34
allow statsd appdomain:binder { call transfer };
#line 34
# Allow the serverdomain to transfer references to the client on the reply.
#line 34
allow appdomain statsd:binder transfer;
#line 34
# Receive and use open files from the server.
#line 34
allow statsd appdomain:fd use;
#line 34
#line 35
# Call the server domain and optionally transfer references to it.
#line 35
allow statsd incidentd:binder { call transfer };
#line 35
# Allow the serverdomain to transfer references to the client on the reply.
#line 35
allow incidentd statsd:binder transfer;
#line 35
# Receive and use open files from the server.
#line 35
allow statsd incidentd:fd use;
#line 35
#line 36
# Call the server domain and optionally transfer references to it.
#line 36
allow statsd system_server:binder { call transfer };
#line 36
# Allow the serverdomain to transfer references to the client on the reply.
#line 36
allow system_server statsd:binder transfer;
#line 36
# Receive and use open files from the server.
#line 36
allow statsd system_server:fd use;
#line 36
#line 37
# Call the server domain and optionally transfer references to it.
#line 37
allow statsd traced_probes:binder { call transfer };
#line 37
# Allow the serverdomain to transfer references to the client on the reply.
#line 37
allow traced_probes statsd:binder transfer;
#line 37
# Receive and use open files from the server.
#line 37
allow statsd traced_probes:fd use;
#line 37
# Allow statsd to interact with gpuservice
allow statsd gpu_service:service_manager find;
#line 41
# Call the server domain and optionally transfer references to it.
#line 41
allow statsd gpuservice:binder { call transfer };
#line 41
# Allow the serverdomain to transfer references to the client on the reply.
#line 41
allow gpuservice statsd:binder transfer;
#line 41
# Receive and use open files from the server.
#line 41
allow statsd gpuservice:fd use;
#line 41
# Allow statsd to interact with keystore to pull atoms
allow statsd keystore_service:service_manager find;
#line 45
# Call the server domain and optionally transfer references to it.
#line 45
allow statsd keystore:binder { call transfer };
#line 45
# Allow the serverdomain to transfer references to the client on the reply.
#line 45
allow keystore statsd:binder transfer;
#line 45
# Receive and use open files from the server.
#line 45
allow statsd keystore:fd use;
#line 45
# Allow statsd to interact with mediametrics
allow statsd mediametrics_service:service_manager find;
#line 49
# Call the server domain and optionally transfer references to it.
#line 49
allow statsd mediametrics:binder { call transfer };
#line 49
# Allow the serverdomain to transfer references to the client on the reply.
#line 49
allow mediametrics statsd:binder transfer;
#line 49
# Receive and use open files from the server.
#line 49
allow statsd mediametrics:fd use;
#line 49
# Allow statsd to interact with mediametrics
allow statsd mediaserver_service:service_manager find;
#line 53
# Call the server domain and optionally transfer references to it.
#line 53
allow statsd mediaserver:binder { call transfer };
#line 53
# Allow the serverdomain to transfer references to the client on the reply.
#line 53
allow mediaserver statsd:binder transfer;
#line 53
# Receive and use open files from the server.
#line 53
allow statsd mediaserver:fd use;
#line 53
# Allow logd access.
#line 56
allow statsd logcat_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
#line 56
#line 56
allow statsd logdr_socket:sock_file write;
#line 56
allow statsd logd:unix_stream_socket connectto;
#line 56
#line 56
#line 57
# Group AID_LOG checked by filesystem & logd
#line 57
# to permit control commands
#line 57
#line 57
allow statsd logd_socket:sock_file write;
#line 57
allow statsd logd:unix_stream_socket connectto;
#line 57
#line 57
# Grant statsd with permissions to register the services.
allow statsd {
app_api_service
incident_service
system_api_service
}:service_manager find;
# Grant statsd to access health hal to access battery metrics.
allow statsd hal_health_hwservice:hwservice_manager find;
# Allow statsd to send dump info to dumpstate
allow statsd dumpstate:fd use;
allow statsd dumpstate:fifo_file { getattr write };
# Allow access to with hardware layer and process stats.
allow statsd proc_uid_cputime_showstat:file { getattr open read };
#line 75
typeattribute statsd halclientdomain;
#line 75
typeattribute statsd hal_health_client;
#line 75
#line 75
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 75
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 75
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 75
#line 75
typeattribute statsd hal_health;
#line 75
# Find passthrough HAL implementations
#line 75
allow hal_health system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 75
allow hal_health vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 75
allow hal_health vendor_file:file { read open getattr execute map };
#line 75
#line 75
#line 76
typeattribute statsd halclientdomain;
#line 76
typeattribute statsd hal_power_client;
#line 76
#line 76
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 76
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 76
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 76
#line 76
typeattribute statsd hal_power;
#line 76
# Find passthrough HAL implementations
#line 76
allow hal_power system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 76
allow hal_power vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 76
allow hal_power vendor_file:file { read open getattr execute map };
#line 76
#line 76
#line 77
typeattribute statsd halclientdomain;
#line 77
typeattribute statsd hal_power_stats_client;
#line 77
#line 77
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 77
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 77
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 77
#line 77
typeattribute statsd hal_power_stats;
#line 77
# Find passthrough HAL implementations
#line 77
allow hal_power_stats system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 77
allow hal_power_stats vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 77
allow hal_power_stats vendor_file:file { read open getattr execute map };
#line 77
#line 77
#line 78
typeattribute statsd halclientdomain;
#line 78
typeattribute statsd hal_thermal_client;
#line 78
#line 78
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 78
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 78
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 78
#line 78
typeattribute statsd hal_thermal;
#line 78
# Find passthrough HAL implementations
#line 78
allow hal_thermal system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 78
allow hal_thermal vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 78
allow hal_thermal vendor_file:file { read open getattr execute map };
#line 78
#line 78
# Allow 'adb shell cmd' to upload configs and download output.
allow statsd adbd:fd use;
allow statsd adbd:unix_stream_socket { getattr read write };
allow statsd shell:fifo_file { getattr read write };
#line 85
allow statsd statsdw_socket:sock_file write;
#line 85
allow statsd statsd:unix_dgram_socket sendto;
#line 85
###
### neverallow rules
###
# Only statsd and the other root services in limited circumstances.
# can get to the files in /data/misc/stats-data, /data/misc/stats-service.
# Other services are prohibitted from accessing the file.
neverallow { domain -statsd -init -vold } stats_data_file:file *;
neverallow { domain -statsd -system_server -init -vold } stats_config_data_file:file *;
# Limited access to the directory itself.
neverallow { domain -statsd -init -vold } stats_data_file:dir *;
neverallow { domain -statsd -system_server -init -vold } stats_config_data_file:dir *;
#line 1 "system/sepolicy/public/su.te"
# Domain used for su processes, as well as for adbd and adb shell
# after performing an adb root command.
# All types must be defined regardless of build variant to ensure
# policy compilation succeeds with userdebug/user combination at boot
type su, domain;
# File types must be defined for file_contexts.
type su_exec, system_file_type, exec_type, file_type;
#line 112
#line 1 "system/sepolicy/public/surfaceflinger.te"
# surfaceflinger - display compositor service
type surfaceflinger, domain;
type surfaceflinger_tmpfs, file_type;
#line 1 "system/sepolicy/public/system_app.te"
###
### 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;
#line 1 "system/sepolicy/public/system_server.te"
#
# System Server aka system_server spawned by zygote.
# Most of the framework services run in this process.
#
type system_server, domain;
type system_server_tmpfs, file_type, mlstrustedobject;
# Power controls for debugging/diagnostics
#line 9
allow system_server power_debug_prop:file { getattr open read map };
#line 9
#line 10
#line 10
allow system_server property_socket:sock_file write;
#line 10
allow system_server init:unix_stream_socket connectto;
#line 10
#line 10
allow system_server power_debug_prop:property_service set;
#line 10
#line 10
allow system_server power_debug_prop:file { getattr open read map };
#line 10
#line 10
neverallow {
domain
-init
-vendor_init
-system_server
-shell
} power_debug_prop:property_service set;
#line 1 "system/sepolicy/public/system_suspend_internal_server.te"
# To serve ISuspendControlServiceInternal.
#line 2
allow system_suspend_internal_server system_suspend_control_internal_service:service_manager { add find };
#line 2
neverallow { domain -system_suspend_internal_server } system_suspend_control_internal_service:service_manager add;
#line 2
#line 2
# On debug builds with root, allow binder services to use binder over TCP.
#line 2
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 2
#line 2
neverallow {
domain
-atrace # tracing
-dumpstate # bug reports
-system_suspend_internal_server # implements system_suspend_control_internal_service
-system_server # configures system_suspend via ISuspendControlServiceInternal
-traceur_app # tracing
} system_suspend_control_internal_service:service_manager find;
#line 1 "system/sepolicy/public/system_suspend_server.te"
# Required to export a HIDL interface.
#line 2
# Call the hwservicemanager and transfer references to it.
#line 2
allow system_suspend_server hwservicemanager:binder { call transfer };
#line 2
# Allow hwservicemanager to send out callbacks
#line 2
allow hwservicemanager system_suspend_server:binder { call transfer };
#line 2
# hwservicemanager performs getpidcon on clients.
#line 2
allow hwservicemanager system_suspend_server:dir search;
#line 2
allow hwservicemanager system_suspend_server:file { read open map };
#line 2
allow hwservicemanager system_suspend_server:process getattr;
#line 2
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 2
# all domains in domain.te.
#line 2
#line 3
allow system_suspend_server hwservicemanager_prop:file { getattr open read map };
#line 3
# To serve ISystemSuspend.hal.
#line 6
allow system_suspend_server system_suspend_hwservice:hwservice_manager { add find };
#line 6
allow system_suspend_server hidl_base_hwservice:hwservice_manager add;
#line 6
neverallow { domain -system_suspend_server } system_suspend_hwservice:hwservice_manager add;
#line 6
#line 1 "system/sepolicy/public/tee.te"
##
# trusted execution environment (tee) daemon
#
type tee, domain;
# Device(s) for communicating with the TEE
type tee_device, dev_type;
allow tee fingerprint_vendor_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow tee fingerprint_vendor_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
#line 1 "system/sepolicy/public/tombstoned.te"
# debugger interface
type tombstoned, domain, mlstrustedsubject;
type tombstoned_exec, system_file_type, exec_type, file_type;
# Write to arbitrary pipes given to us.
allow tombstoned domain:fd use;
allow tombstoned domain:fifo_file write;
allow tombstoned domain:dir { open getattr read search ioctl lock watch watch_reads };
allow tombstoned domain:file { getattr open read ioctl lock map watch watch_reads };
allow tombstoned tombstone_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow tombstoned tombstone_data_file:file { { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } } link };
# Changes for the new stack dumping mechanism. Each trace goes into a
# separate file, and these files are managed by tombstoned.
allow tombstoned anr_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow tombstoned anr_data_file:file { append create getattr open link unlink };
#line 1 "system/sepolicy/public/toolbox.te"
# Any toolbox command run by init.
# Do NOT use this domain for toolbox when run by any other domain.
type toolbox, domain;
type toolbox_exec, system_file_type, exec_type, file_type;
# /dev/__null__ created by init prior to policy load,
# open fd inherited by fsck.
allow toolbox tmpfs:chr_file { read write ioctl };
# Inherit and use pty created by android_fork_execvp_ext().
allow toolbox devpts:chr_file { read write getattr ioctl };
# mkswap-specific.
# Read/write block devices used for swap partitions.
# Assign swap_block_device type any such partition in your
# device/<vendor>/<product>/sepolicy/file_contexts file.
allow toolbox block_device:dir search;
allow toolbox swap_block_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Only allow entry from init via the toolbox binary.
neverallow { domain -init } toolbox:process transition;
neverallow * toolbox:process dyntransition;
neverallow toolbox { file_type fs_type -toolbox_exec}:file entrypoint;
# rm -rf /data/per_boot
allow toolbox system_data_root_file:dir { remove_name write };
allow toolbox system_data_file:dir { rmdir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow toolbox system_data_file:file { getattr unlink };
# chattr +F /data/media in init
allow toolbox media_userdir_file:dir { { open getattr read search ioctl lock watch watch_reads } setattr };
allowxperm toolbox media_userdir_file:dir ioctl { 0x40086602 0x80086601 };
#line 1 "system/sepolicy/public/traced.te"
type traced, domain, coredomain, mlstrustedsubject;
type traced_tmpfs, file_type;
#line 1 "system/sepolicy/public/traced_perf.te"
type traced_perf, domain;
#line 1 "system/sepolicy/public/traced_probes.te"
type traced_probes, domain, coredomain, mlstrustedsubject;
#line 1 "system/sepolicy/public/traceur_app.te"
type traceur_app, domain;
allow traceur_app servicemanager:service_manager list;
allow traceur_app hwservicemanager:hwservice_manager list;
allow traceur_app {
service_manager_type
-apex_service
-dnsresolver_service
-gatekeeper_service
-incident_service
-installd_service
-lpdump_service
-mdns_service
-netd_service
-virtual_touchpad_service
-vold_service
-default_android_service
}:service_manager find;
# Allow traceur_app to use atrace HAL
#line 22
typeattribute traceur_app halclientdomain;
#line 22
typeattribute traceur_app hal_atrace_client;
#line 22
#line 22
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 22
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 22
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 22
#line 22
typeattribute traceur_app hal_atrace;
#line 22
# Find passthrough HAL implementations
#line 22
allow hal_atrace system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 22
allow hal_atrace vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 22
allow hal_atrace vendor_file:file { read open getattr execute map };
#line 22
#line 22
dontaudit traceur_app service_manager_type:service_manager find;
dontaudit traceur_app hwservice_manager_type:hwservice_manager find;
dontaudit traceur_app domain:binder call;
#line 1 "system/sepolicy/public/ueventd.te"
# ueventd seclabel is specified in init.rc since
# it lives in the rootfs and has no unique file type.
type ueventd, domain;
type ueventd_tmpfs, file_type;
# Write to /dev/kmsg.
allow ueventd kmsg_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow ueventd self:{ capability cap_userns } { chown mknod net_admin setgid fsetid sys_rawio dac_override dac_read_search fowner setuid };
allow ueventd device:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
#line 12
allow ueventd rootfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 12
allow ueventd rootfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 12
# ueventd needs write access to files in /sys to regenerate uevents
allow ueventd sysfs_type:file { open append write lock map };
#line 16
allow ueventd sysfs_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 16
allow ueventd sysfs_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 16
allow ueventd sysfs_type:{ file lnk_file } { relabelfrom relabelto setattr };
allow ueventd sysfs_type:dir { relabelfrom relabelto setattr };
allow ueventd tmpfs:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow ueventd dev_type:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow ueventd dev_type:lnk_file { create unlink };
allow ueventd dev_type:chr_file { getattr create setattr unlink };
allow ueventd dev_type:blk_file { getattr relabelfrom relabelto create setattr unlink };
allow ueventd self:netlink_kobject_uevent_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow ueventd efs_file:dir search;
allow ueventd efs_file:file { getattr open read ioctl lock map watch watch_reads };
# Get SELinux enforcing status.
#line 29
allow ueventd selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 29
allow ueventd selinuxfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 29
# Access for /vendor/ueventd.rc and /vendor/firmware
#line 32
allow ueventd { vendor_file_type -vendor_app_file -vendor_overlay_file }:dir { open getattr read search ioctl lock watch watch_reads };
#line 32
allow ueventd { vendor_file_type -vendor_app_file -vendor_overlay_file }:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 32
# Access for /apex/*/firmware
allow ueventd apex_mnt_dir:dir { open getattr read search ioctl lock watch watch_reads };
# Get file contexts for new device nodes
allow ueventd file_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
# Use setfscreatecon() to label /dev directories and files.
allow ueventd self:process setfscreate;
# Allow ueventd to read androidboot.android_dt_dir from kernel cmdline or bootconfig.
allow ueventd proc_cmdline:file { getattr open read ioctl lock map watch watch_reads };
allow ueventd proc_bootconfig:file { getattr open read ioctl lock map watch watch_reads };
# Everything is labeled as rootfs in recovery mode. ueventd has to execute
# the dynamic linker and shared libraries.
#line 51
# Suppress denials for ueventd to getattr /postinstall. This occurs when the
# linker tries to resolve paths in ld.config.txt.
dontaudit ueventd postinstall_mnt_dir:dir getattr;
# ueventd loads modules in response to modalias events.
allow ueventd self:{ capability cap_userns } sys_module;
allow ueventd vendor_file:system module_load;
allow ueventd kernel:key search;
# ueventd is using bootstrap bionic
#line 63
allow ueventd system_bootstrap_lib_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 63
allow ueventd system_bootstrap_lib_file:file { execute read open getattr map };
#line 63
# Allow ueventd to run shell scripts from vendor
allow ueventd vendor_shell_exec:file execute;
# Query device-mapper to extract name/uuid in response to uevents.
allow ueventd dm_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow ueventd self:capability sys_admin;
# Allow ueventd to read apexd property
#line 73
allow ueventd apexd_prop:file { getattr open read map };
#line 73
#####
##### neverallow rules
#####
# Restrict ueventd access on block devices to maintenence operations.
neverallow ueventd dev_type:blk_file ~{ getattr relabelfrom relabelto create setattr unlink };
# Only relabelto as we would never want to relabelfrom port_device
neverallow ueventd port_device:chr_file ~{ getattr create setattr unlink relabelto };
# Nobody should be able to ptrace ueventd
neverallow * ueventd:process ptrace;
# ueventd should never execute a program without changing to another domain.
neverallow ueventd { file_type fs_type }:file execute_no_trans;
#line 1 "system/sepolicy/public/uncrypt.te"
# uncrypt
type uncrypt, domain, mlstrustedsubject;
type uncrypt_exec, system_file_type, exec_type, file_type;
allow uncrypt self:{ capability cap_userns } { dac_override dac_read_search };
#line 10
# Read /cache/recovery/command
# Read /cache/recovery/uncrypt_file
allow uncrypt cache_file:dir search;
allow uncrypt cache_recovery_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow uncrypt cache_recovery_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Read and write(for f2fs_pin_file) on OTA zip file at /data/ota_package/.
allow uncrypt ota_package_file:dir { open getattr read search ioctl lock watch watch_reads };
allow uncrypt ota_package_file:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Write to /dev/socket/uncrypt
#line 23
allow uncrypt uncrypt_socket:sock_file write;
#line 23
allow uncrypt uncrypt:unix_stream_socket connectto;
#line 23
# Raw writes to block device
allow uncrypt self:{ capability cap_userns } sys_rawio;
allow uncrypt misc_block_device:blk_file { open append write lock map };
allow uncrypt block_device:dir { open getattr read search ioctl lock watch watch_reads };
# Access userdata block device.
allow uncrypt userdata_block_device:blk_file { open append write lock map };
#line 33
allow uncrypt rootfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 33
allow uncrypt rootfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 33
# Access to bootconfig is needed when calling ReadDefaultFstab.
allow uncrypt {
proc_bootconfig
proc_cmdline
}:file { getattr open read ioctl lock map watch watch_reads };
# Read files in /sys
#line 43
allow uncrypt sysfs_dt_firmware_android:dir { open getattr read search ioctl lock watch watch_reads };
#line 43
allow uncrypt sysfs_dt_firmware_android:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 43
# Allow ReadDefaultFstab().
#line 46
allow uncrypt { metadata_file gsi_metadata_file_type }:dir search;
#line 46
allow uncrypt gsi_public_metadata_file:file { getattr open read ioctl lock map watch watch_reads };
#line 46
allow uncrypt { proc_bootconfig proc_cmdline }:file { getattr open read ioctl lock map watch watch_reads };
#line 46
#line 1 "system/sepolicy/public/untrusted_app.te"
###
### Untrusted apps.
###
### Apps are labeled based on mac_permissions.xml (maps signer and
### optionally package name to seinfo value) and seapp_contexts (maps UID
### and optionally seinfo value to domain for process and type for data
### directory). The untrusted_app domain is the default assignment in
### seapp_contexts for any app with UID between APP_AID (10000)
### and AID_ISOLATED_START (99000) if the app has no specific seinfo
### value as determined from mac_permissions.xml. In current AOSP, this
### domain is assigned to all non-system apps as well as to any system apps
### that are not signed by the platform key. To move
### a system app into a specific domain, add a signer entry for it to
### mac_permissions.xml and assign it one of the pre-existing seinfo values
### or define and use a new seinfo value in both mac_permissions.xml and
### seapp_contexts.
###
# This file defines the rules for untrusted apps running with
# targetSdkVersion >= 34.
type untrusted_app, domain;
# This file defines the rules for untrusted apps running with
# 31 < targetSdkVersion <= 33.
type untrusted_app_32, domain;
# This file defines the rules for untrusted apps running with
# 29 < targetSdkVersion <= 31.
type untrusted_app_30, domain;
# This file defines the rules for untrusted apps running with
# targetSdkVersion = 29.
type untrusted_app_29, domain;
# This file defines the rules for untrusted apps running with
# 25 < targetSdkVersion <= 28.
type untrusted_app_27, domain;
# This file defines the rules for untrusted apps running with
# targetSdkVersion <= 25.
type untrusted_app_25, domain;
#line 1 "system/sepolicy/public/update_engine.te"
# Domain for update_engine daemon.
type update_engine, domain, update_engine_common;
type update_engine_exec, system_file_type, exec_type, file_type;
#line 5
typeattribute update_engine netdomain;
#line 5
;
# Following permissions are needed for update_engine.
allow update_engine self:process { setsched };
allow update_engine self:{ capability cap_userns } { fowner sys_admin };
# Note: fsetid checks are triggered when creating a file in a directory with
# the setgid bit set to determine if the file should inherit setgid. In this
# case, setgid on the file is undesirable so we should just suppress the
# denial.
dontaudit update_engine self:{ capability cap_userns } fsetid;
allow update_engine kmsg_device:chr_file { getattr { open append write lock map } };
allow update_engine update_engine_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
#line 18
# TODO(b/115946999): Remove /sys/power/* permissions once CONFIG_PM_WAKELOCKS is
#line 18
# deprecated.
#line 18
# Access /sys/power/wake_lock and /sys/power/wake_unlock
#line 18
allow update_engine sysfs_wake_lock:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 18
# Accessing these files requires CAP_BLOCK_SUSPEND
#line 18
allow update_engine self:{ capability2 cap2_userns } block_suspend;
#line 18
# system_suspend permissions
#line 18
#line 18
# Call the server domain and optionally transfer references to it.
#line 18
allow update_engine system_suspend_server:binder { call transfer };
#line 18
# Allow the serverdomain to transfer references to the client on the reply.
#line 18
allow system_suspend_server update_engine:binder transfer;
#line 18
# Receive and use open files from the server.
#line 18
allow update_engine system_suspend_server:fd use;
#line 18
#line 18
allow update_engine system_suspend_hwservice:hwservice_manager find;
#line 18
# halclientdomain permissions
#line 18
#line 18
# Call the hwservicemanager and transfer references to it.
#line 18
allow update_engine hwservicemanager:binder { call transfer };
#line 18
# Allow hwservicemanager to send out callbacks
#line 18
allow hwservicemanager update_engine:binder { call transfer };
#line 18
# hwservicemanager performs getpidcon on clients.
#line 18
allow hwservicemanager update_engine:dir search;
#line 18
allow hwservicemanager update_engine:file { read open map };
#line 18
allow hwservicemanager update_engine:process getattr;
#line 18
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 18
# all domains in domain.te.
#line 18
#line 18
#line 18
allow update_engine hwservicemanager_prop:file { getattr open read map };
#line 18
#line 18
allow update_engine hidl_manager_hwservice:hwservice_manager find;
#line 18
# AIDL suspend hal permissions
#line 18
allow update_engine hal_system_suspend_service:service_manager find;
#line 18
#line 18
# Call the servicemanager and transfer references to it.
#line 18
allow update_engine servicemanager:binder { call transfer };
#line 18
# Allow servicemanager to send out callbacks
#line 18
allow servicemanager update_engine:binder { call transfer };
#line 18
# servicemanager performs getpidcon on clients.
#line 18
allow servicemanager update_engine:dir search;
#line 18
allow servicemanager update_engine:file { read open };
#line 18
allow servicemanager update_engine:process getattr;
#line 18
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 18
# all domains in domain.te.
#line 18
#line 18
;
# Ignore these denials.
dontaudit update_engine kernel:process setsched;
dontaudit update_engine self:{ capability cap_userns } sys_rawio;
# Allow using persistent storage in /data/misc/update_engine.
allow update_engine update_engine_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow update_engine update_engine_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow using persistent storage in /data/misc/update_engine_log.
allow update_engine update_engine_log_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow update_engine update_engine_log_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Register the service to perform Binder IPC.
#line 33
# Call the servicemanager and transfer references to it.
#line 33
allow update_engine servicemanager:binder { call transfer };
#line 33
# Allow servicemanager to send out callbacks
#line 33
allow servicemanager update_engine:binder { call transfer };
#line 33
# servicemanager performs getpidcon on clients.
#line 33
allow servicemanager update_engine:dir search;
#line 33
allow servicemanager update_engine:file { read open };
#line 33
allow servicemanager update_engine:process getattr;
#line 33
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 33
# all domains in domain.te.
#line 33
#line 34
allow update_engine update_engine_service:service_manager { add find };
#line 34
neverallow { domain -update_engine } update_engine_service:service_manager add;
#line 34
#line 34
# On debug builds with root, allow binder services to use binder over TCP.
#line 34
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 34
#line 34
#line 35
allow update_engine update_engine_stable_service:service_manager { add find };
#line 35
neverallow { domain -update_engine } update_engine_stable_service:service_manager add;
#line 35
#line 35
# On debug builds with root, allow binder services to use binder over TCP.
#line 35
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 35
#line 35
# Allow update_engine to call the callback function provided by priv_app/GMS core.
#line 38
# Call the server domain and optionally transfer references to it.
#line 38
allow update_engine priv_app:binder { call transfer };
#line 38
# Allow the serverdomain to transfer references to the client on the reply.
#line 38
allow priv_app update_engine:binder transfer;
#line 38
# Receive and use open files from the server.
#line 38
allow update_engine priv_app:fd use;
#line 38
# b/142672293: No other priv-app should need this rule now that GMS core runs in its own domain.
#line 44
#line 46
# Call the server domain and optionally transfer references to it.
#line 46
allow update_engine gmscore_app:binder { call transfer };
#line 46
# Allow the serverdomain to transfer references to the client on the reply.
#line 46
allow gmscore_app update_engine:binder transfer;
#line 46
# Receive and use open files from the server.
#line 46
allow update_engine gmscore_app:fd use;
#line 46
# Allow update_engine to call the callback function provided by system_server.
#line 49
# Call the server domain and optionally transfer references to it.
#line 49
allow update_engine system_server:binder { call transfer };
#line 49
# Allow the serverdomain to transfer references to the client on the reply.
#line 49
allow system_server update_engine:binder transfer;
#line 49
# Receive and use open files from the server.
#line 49
allow update_engine system_server:fd use;
#line 49
# Read OTA zip file at /data/ota_package/.
allow update_engine ota_package_file:file { getattr open read ioctl lock map watch watch_reads };
allow update_engine ota_package_file:dir { open getattr read search ioctl lock watch watch_reads };
# Use Boot Control HAL
#line 56
typeattribute update_engine halclientdomain;
#line 56
typeattribute update_engine hal_bootctl_client;
#line 56
#line 56
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 56
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 56
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 56
#line 56
typeattribute update_engine hal_bootctl;
#line 56
# Find passthrough HAL implementations
#line 56
allow hal_bootctl system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 56
allow hal_bootctl vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 56
allow hal_bootctl vendor_file:file { read open getattr execute map };
#line 56
#line 56
# access /proc/misc
allow update_engine proc_misc:file { getattr open read ioctl lock map watch watch_reads };
# read directories on /system and /vendor
allow update_engine system_file:dir { open getattr read search ioctl lock watch watch_reads };
# Allow ReadDefaultFstab().
# update_engine tries to determine the parent path for all devices (e.g.
# /dev/block/by-name) by reading the default fstab and looking for the misc
# device.
#line 68
allow update_engine { metadata_file gsi_metadata_file_type }:dir search;
#line 68
allow update_engine gsi_public_metadata_file:file { getattr open read ioctl lock map watch watch_reads };
#line 68
allow update_engine { proc_bootconfig proc_cmdline }:file { getattr open read ioctl lock map watch watch_reads };
#line 68
# Allow to write to snapshotctl_log logs.
# TODO(b/148818798) revert when parent bug is fixed.
#line 75
# Allow determining filesystems available on system.
# Needed for checking if overlayfs is enabled
allow update_engine proc_filesystems:file { getattr open read ioctl lock map watch watch_reads };
#line 1 "system/sepolicy/public/update_engine_common.te"
# update_engine payload application permissions. These are shared between the
# background daemon and the recovery tool to sideload an update.
# Allow update_engine to reach block devices in /dev/block.
allow update_engine_common block_device:dir search;
# Allow read/write on system and boot partitions.
allow update_engine_common boot_block_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow update_engine_common system_block_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Where ioctls are granted via standard allow rules to block devices,
# automatically allow common ioctls that are generally needed by
# update_engine.
allowxperm update_engine_common dev_type:blk_file ioctl {
0x00001277
0x0000127c
0x0000125e
0x0000125d
0x0000127d
0x0000127f
};
# Allow to set recovery options in the BCB. Used to trigger factory reset when
# the update to an older version (channel change) or incompatible version
# requires it.
allow update_engine_common misc_block_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# read fstab
allow update_engine_common rootfs:dir getattr;
allow update_engine_common rootfs:file { getattr open read ioctl lock map watch watch_reads };
# Allow update_engine_common to mount on the /postinstall directory and reset the
# labels on the mounted filesystem to postinstall_file.
allow update_engine_common postinstall_mnt_dir:dir { mounton getattr search };
allow update_engine_common postinstall_file:filesystem { mount unmount relabelfrom relabelto };
allow update_engine_common labeledfs:filesystem { mount unmount relabelfrom };
# Allow update_engine_common to read and execute postinstall_file.
allow update_engine_common postinstall_file:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow update_engine_common postinstall_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
allow update_engine_common postinstall_file:dir { open getattr read search ioctl lock watch watch_reads };
# install update.zip from cache
#line 44
allow update_engine_common cache_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 44
allow update_engine_common cache_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 44
# A postinstall program is typically a shell script (with a #!), so we allow
# to execute those.
allow update_engine_common shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Allow update_engine_common to suspend, resume and kill the postinstall program.
allow update_engine_common postinstall:process { signal sigstop sigkill };
# access /proc/cmdline
allow update_engine_common proc_cmdline:file { getattr open read ioctl lock map watch watch_reads };
# Read files in /sys/firmware/devicetree/base/firmware/android/
#line 57
allow update_engine_common sysfs_dt_firmware_android:dir { open getattr read search ioctl lock watch watch_reads };
#line 57
allow update_engine_common sysfs_dt_firmware_android:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 57
# Needed because libdm reads sysfs to validate when a dm path is ready.
#line 60
allow update_engine_common sysfs_dm:dir { open getattr read search ioctl lock watch watch_reads };
#line 60
allow update_engine_common sysfs_dm:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 60
# Scan files in /sys/fs/ext4 and /sys/fs/f2fs for device-mapper diagnostics.
allow update_engine_common sysfs:dir { open getattr read search ioctl lock watch watch_reads };
allow update_engine_common sysfs_fs_f2fs:dir { open getattr read search ioctl lock watch watch_reads };
# read / write on /dev/device-mapper to map / unmap devices
allow update_engine_common dm_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# apply / verify updates on devices mapped via device mapper
allow update_engine_common dm_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# read /dev/dm-user, so that we can inotify wait for control devices to be
# asynchronously created by ueventd.
allow update_engine dm_user_device:dir { open getattr read search ioctl lock watch watch_reads };
allow update_engine dm_user_device:chr_file { getattr open read ioctl lock map watch watch_reads };
# read / write metadata on super device to resize partitions
allow update_engine_common super_block_device_type:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# ioctl on super device to get block device alignment and alignment offset
allowxperm update_engine_common super_block_device_type:blk_file ioctl { 0x00001278 0x0000127a };
# get physical block device to map logical partitions on device mapper
allow update_engine_common block_device:dir { open getattr read search ioctl lock watch watch_reads };
# Allow update_engine_common to write to statsd socket.
#line 87
allow update_engine_common statsdw_socket:sock_file write;
#line 87
allow update_engine_common statsd:unix_dgram_socket sendto;
#line 87
# Allow to read Virtual A/B feature flags.
#line 90
allow update_engine_common virtual_ab_prop:file { getattr open read map };
#line 90
# Allow to read GKI related flags.
#line 93
allow update_engine_common ab_update_gki_prop:file { getattr open read map };
#line 93
#line 94
allow update_engine_common build_bootimage_prop:file { getattr open read map };
#line 94
# Allow to read/write/create OTA metadata files for snapshot status and COW file status.
allow update_engine_common metadata_file:dir search;
allow update_engine_common ota_metadata_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow update_engine_common ota_metadata_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
#line 1 "system/sepolicy/public/update_verifier.te"
# update_verifier
type update_verifier, domain;
type update_verifier_exec, system_file_type, exec_type, file_type;
# Allow update_verifier to reach block devices in /dev/block.
allow update_verifier block_device:dir search;
# Read care map in /data/ota_package/.
allow update_verifier ota_package_file:dir { open getattr read search ioctl lock watch watch_reads };
allow update_verifier ota_package_file:file { getattr open read ioctl lock map watch watch_reads };
# Read /sys/block to find all the DM directories like (/sys/block/dm-X).
allow update_verifier sysfs:dir { open getattr read search ioctl lock watch watch_reads };
# Read /sys/block/dm-X/dm/name (which is a symlink to
# /sys/devices/virtual/block/dm-X/dm/name) to identify the mapping between
# dm-X and system/vendor partitions.
allow update_verifier sysfs_dm:dir { open getattr read search ioctl lock watch watch_reads };
allow update_verifier sysfs_dm:file { getattr open read ioctl lock map watch watch_reads };
# Read all blocks in DM wrapped system partition.
allow update_verifier dm_device:blk_file { getattr open read ioctl lock map watch watch_reads };
# Write to kernel message.
allow update_verifier kmsg_device:chr_file { getattr { open append write lock map } };
# Use Boot Control HAL
#line 28
typeattribute update_verifier halclientdomain;
#line 28
typeattribute update_verifier hal_bootctl_client;
#line 28
#line 28
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 28
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 28
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 28
#line 28
typeattribute update_verifier hal_bootctl;
#line 28
# Find passthrough HAL implementations
#line 28
allow hal_bootctl system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 28
allow hal_bootctl vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 28
allow hal_bootctl vendor_file:file { read open getattr execute map };
#line 28
#line 28
# Access Checkpoint commands over binder
allow update_verifier vold_service:service_manager find;
#line 32
# Call the server domain and optionally transfer references to it.
#line 32
allow update_verifier servicemanager:binder { call transfer };
#line 32
# Allow the serverdomain to transfer references to the client on the reply.
#line 32
allow servicemanager update_verifier:binder transfer;
#line 32
# Receive and use open files from the server.
#line 32
allow update_verifier servicemanager:fd use;
#line 32
#line 33
# Call the server domain and optionally transfer references to it.
#line 33
allow update_verifier vold:binder { call transfer };
#line 33
# Allow the serverdomain to transfer references to the client on the reply.
#line 33
allow vold update_verifier:binder transfer;
#line 33
# Receive and use open files from the server.
#line 33
allow update_verifier vold:fd use;
#line 33
#line 1 "system/sepolicy/public/usbd.te"
type usbd, domain;
type usbd_exec, system_file_type, exec_type, file_type;
#line 4
# Call the server domain and optionally transfer references to it.
#line 4
allow usbd servicemanager:binder { call transfer };
#line 4
# Allow the serverdomain to transfer references to the client on the reply.
#line 4
allow servicemanager usbd:binder transfer;
#line 4
# Receive and use open files from the server.
#line 4
allow usbd servicemanager:fd use;
#line 4
#line 1 "system/sepolicy/public/userdata_sysdev.te"
allow userdata_sysdev sysfs:filesystem associate;
#line 1 "system/sepolicy/public/vdc.te"
# vdc is a helper program for making Binder calls to vold. It is spawned from
# init for various reasons, such as initializing file-based encryption and
# metadata encryption, and managing userdata checkpointing.
#
# We also transition into this domain from dumpstate, when
# collecting bug reports.
type vdc, domain;
type vdc_exec, system_file_type, exec_type, file_type;
# vdc can be invoked with logwrapper, so let it write to pty
allow vdc devpts:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# vdc writes directly to kmsg during the boot process
allow vdc kmsg_device:chr_file { getattr { open append write lock map } };
# vdc talks to vold over Binder
#line 18
# Call the servicemanager and transfer references to it.
#line 18
allow vdc servicemanager:binder { call transfer };
#line 18
# Allow servicemanager to send out callbacks
#line 18
allow servicemanager vdc:binder { call transfer };
#line 18
# servicemanager performs getpidcon on clients.
#line 18
allow servicemanager vdc:dir search;
#line 18
allow servicemanager vdc:file { read open };
#line 18
allow servicemanager vdc:process getattr;
#line 18
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 18
# all domains in domain.te.
#line 18
#line 19
# Call the server domain and optionally transfer references to it.
#line 19
allow vdc vold:binder { call transfer };
#line 19
# Allow the serverdomain to transfer references to the client on the reply.
#line 19
allow vold vdc:binder transfer;
#line 19
# Receive and use open files from the server.
#line 19
allow vdc vold:fd use;
#line 19
allow vdc vold_service:service_manager find;
#line 1 "system/sepolicy/public/vendor_init.te"
# vendor_init is its own domain.
type vendor_init, domain, mlstrustedsubject;
# Communication to the main init process
allow vendor_init init:unix_stream_socket { read write };
# Logging to kmsg
allow vendor_init kmsg_device:chr_file { open getattr write };
# Mount on /dev/usb-ffs/adb.
allow vendor_init device:dir mounton;
# Create and remove symlinks in /.
allow vendor_init rootfs:lnk_file { create unlink };
# Create cgroups mount points in tmpfs and mount cgroups on them.
allow vendor_init cgroup:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow vendor_init cgroup:file { open append write lock map };
allow vendor_init cgroup_v2:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow vendor_init cgroup_v2:file { open append write lock map };
# /config
allow vendor_init configfs:dir mounton;
allow vendor_init configfs:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow vendor_init configfs:{ file lnk_file } { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Create directories under /dev/cpuctl after chowning it to system.
allow vendor_init self:{ capability cap_userns } { dac_override dac_read_search };
# mkdir, symlink, write, rm/rmdir, chown/chmod, restorecon/restorecon_recursive from init.rc files.
# chown/chmod require open+read+setattr required for open()+fchown/fchmod().
# system/core/init.rc requires at least cache_file and data_file_type.
# init.<board>.rc files often include device-specific types, so
# we just allow all file types except /system files here.
allow vendor_init self:{ capability cap_userns } { chown fowner fsetid };
# mkdir with FBE requires reading /data/unencrypted/{ref,mode}.
allow vendor_init unencrypted_data_file:dir search;
allow vendor_init unencrypted_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Set encryption policy on dirs in /data
allowxperm vendor_init data_file_type:dir ioctl {
0x400c6615
0x800c6613
};
allow vendor_init system_data_file:dir getattr;
allow vendor_init {
file_type
-bpffs_type
-core_data_file_type
-exec_type
-system_dlkm_file_type
-system_file_type
-mnt_product_file
-password_slot_metadata_file
-ota_metadata_file
-unlabeled
-vendor_file_type
-vold_metadata_file
-gsi_metadata_file_type
-apex_metadata_file
-userspace_reboot_metadata_file
-aconfig_storage_metadata_file
-aconfig_storage_flags_metadata_file
}:dir { create search getattr open read setattr ioctl write add_name remove_name rmdir relabelfrom };
allow vendor_init unlabeled:{ dir { file lnk_file sock_file fifo_file } } { getattr relabelfrom };
allow vendor_init {
file_type
-bpffs_type
-core_data_file_type
-exec_type
-password_slot_metadata_file
-ota_metadata_file
-runtime_event_log_tags_file
-system_dlkm_file_type
-system_file_type
-unlabeled
-vendor_file_type
-vold_metadata_file
-gsi_metadata_file_type
-apex_metadata_file
-apex_info_file
-userspace_reboot_metadata_file
-aconfig_storage_metadata_file
-aconfig_storage_flags_metadata_file
# BEGIN_LAUNCHING_WITH_S_ONLY -- this marker is used by CTS -- do not modify
#line 90
-debugfs_type
#line 90
# END_LAUNCHING_WITH_S_ONLY -- this marker is used by CTS -- do not modify
#line 90
}:file { create getattr open read write setattr relabelfrom unlink map };
allow vendor_init {
file_type
-bpffs_type
-core_data_file_type
-exec_type
-password_slot_metadata_file
-ota_metadata_file
-system_dlkm_file_type
-system_file_type
-unlabeled
-vendor_file_type
-vold_metadata_file
-gsi_metadata_file_type
-apex_metadata_file
-userspace_reboot_metadata_file
-aconfig_storage_metadata_file
-aconfig_storage_flags_metadata_file
}:{ sock_file fifo_file } { create getattr open read setattr relabelfrom unlink };
allow vendor_init {
file_type
-apex_mnt_dir
-bpffs_type
-core_data_file_type
-exec_type
-password_slot_metadata_file
-ota_metadata_file
-system_dlkm_file_type
-system_file_type
-unlabeled
-vendor_file_type
-vold_metadata_file
-gsi_metadata_file_type
-apex_metadata_file
-userspace_reboot_metadata_file
-aconfig_storage_metadata_file
-aconfig_storage_flags_metadata_file
}:lnk_file { create getattr setattr relabelfrom unlink };
allow vendor_init {
file_type
-bpffs_type
-core_data_file_type
-exec_type
-mnt_product_file
-password_slot_metadata_file
-ota_metadata_file
-system_dlkm_file_type
-system_file_type
-vendor_file_type
-vold_metadata_file
-gsi_metadata_file_type
-apex_metadata_file
-userspace_reboot_metadata_file
-aconfig_storage_metadata_file
-aconfig_storage_flags_metadata_file
}:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } relabelto;
allow vendor_init dev_type:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow vendor_init dev_type:lnk_file create;
# Disable tracing by writing to /sys/kernel/debug/tracing/tracing_on
allow vendor_init debugfs_tracing:file { open append write lock map };
# chown/chmod on pseudo files.
allow vendor_init {
fs_type
-bpffs_type
-contextmount_type
-keychord_device
-sdcard_type
-fusefs_type
-rootfs
-proc_uid_time_in_state
-proc_uid_concurrent_active_time
-proc_uid_concurrent_policy_time
# BEGIN_LAUNCHING_WITH_S_ONLY -- this marker is used by CTS -- do not modify
#line 169
-debugfs_type
#line 169
# END_LAUNCHING_WITH_S_ONLY -- this marker is used by CTS -- do not modify
#line 169
}:file { open read setattr map };
allow vendor_init tracefs_type:file { open read setattr map };
allow vendor_init {
fs_type
-bpffs_type
-contextmount_type
-sdcard_type
-fusefs_type
-rootfs
-proc_uid_time_in_state
-proc_uid_concurrent_active_time
-proc_uid_concurrent_policy_time
}:dir { open read setattr search };
allow vendor_init dev_type:blk_file getattr;
# Write to /proc/sys/net/ping_group_range and other /proc/sys/net files.
#line 189
allow vendor_init proc_net_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 189
allow vendor_init proc_net_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 189
allow vendor_init proc_net_type:file { open append write lock map };
allow vendor_init self:{ capability cap_userns } net_admin;
# Write to /proc/sys/vm/page-cluster
allow vendor_init proc_page_cluster:file { open append write lock map };
# Write to sysfs nodes.
allow vendor_init sysfs_type:dir { open getattr read search ioctl lock watch watch_reads };
allow vendor_init sysfs_type:lnk_file read;
allow vendor_init { sysfs_type -sysfs_usermodehelper }:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# setfscreatecon() for labeling directories and socket files.
allow vendor_init self:process { setfscreate };
#line 204
allow vendor_init vendor_file_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 204
allow vendor_init vendor_file_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 204
# Vendor init can read properties
allow vendor_init serialno_prop:file { getattr open read map };
# Vendor init can perform operations on trusted and security Extended Attributes
allow vendor_init self:{ capability cap_userns } sys_admin;
# Raw writes to misc block device
allow vendor_init misc_block_device:blk_file { open append write lock map };
# vendor_init is using bootstrap bionic
#line 216
allow vendor_init system_bootstrap_lib_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 216
allow vendor_init system_bootstrap_lib_file:file { execute read open getattr map };
#line 216
# allow filesystem tuning
allow vendor_init userdata_sysdev:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Everything is labeled as rootfs in recovery mode. Vendor init has to execute
# the dynamic linker and shared libraries.
#line 225
#line 227
#line 227
#line 227
allow vendor_init property_socket:sock_file write;
#line 227
allow vendor_init init:unix_stream_socket connectto;
#line 227
#line 227
allow vendor_init {
#line 227
property_type
#line 227
-system_internal_property_type
#line 227
-system_restricted_property_type
#line 227
}:property_service set;
#line 227
#line 227
allow vendor_init {
#line 227
property_type
#line 227
-system_internal_property_type
#line 227
-system_restricted_property_type
#line 227
}:file { getattr open read map };
#line 227
#line 227
#line 233
# Get file context
allow vendor_init file_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow vendor_init to (re)set nice
allow vendor_init self:capability sys_nice;
#line 241
#line 241
allow vendor_init property_socket:sock_file write;
#line 241
allow vendor_init init:unix_stream_socket connectto;
#line 241
#line 241
allow vendor_init apk_verity_prop:property_service set;
#line 241
#line 241
allow vendor_init apk_verity_prop:file { getattr open read map };
#line 241
#line 241
#line 242
#line 242
allow vendor_init property_socket:sock_file write;
#line 242
allow vendor_init init:unix_stream_socket connectto;
#line 242
#line 242
allow vendor_init bluetooth_a2dp_offload_prop:property_service set;
#line 242
#line 242
allow vendor_init bluetooth_a2dp_offload_prop:file { getattr open read map };
#line 242
#line 242
#line 243
#line 243
allow vendor_init property_socket:sock_file write;
#line 243
allow vendor_init init:unix_stream_socket connectto;
#line 243
#line 243
allow vendor_init bluetooth_audio_hal_prop:property_service set;
#line 243
#line 243
allow vendor_init bluetooth_audio_hal_prop:file { getattr open read map };
#line 243
#line 243
#line 244
#line 244
allow vendor_init property_socket:sock_file write;
#line 244
allow vendor_init init:unix_stream_socket connectto;
#line 244
#line 244
allow vendor_init bluetooth_config_prop:property_service set;
#line 244
#line 244
allow vendor_init bluetooth_config_prop:file { getattr open read map };
#line 244
#line 244
#line 245
#line 245
allow vendor_init property_socket:sock_file write;
#line 245
allow vendor_init init:unix_stream_socket connectto;
#line 245
#line 245
allow vendor_init camera2_extensions_prop:property_service set;
#line 245
#line 245
allow vendor_init camera2_extensions_prop:file { getattr open read map };
#line 245
#line 245
#line 246
#line 246
allow vendor_init property_socket:sock_file write;
#line 246
allow vendor_init init:unix_stream_socket connectto;
#line 246
#line 246
allow vendor_init camerax_extensions_prop:property_service set;
#line 246
#line 246
allow vendor_init camerax_extensions_prop:file { getattr open read map };
#line 246
#line 246
#line 247
#line 247
allow vendor_init property_socket:sock_file write;
#line 247
allow vendor_init init:unix_stream_socket connectto;
#line 247
#line 247
allow vendor_init cpu_variant_prop:property_service set;
#line 247
#line 247
allow vendor_init cpu_variant_prop:file { getattr open read map };
#line 247
#line 247
#line 248
#line 248
allow vendor_init property_socket:sock_file write;
#line 248
allow vendor_init init:unix_stream_socket connectto;
#line 248
#line 248
allow vendor_init dalvik_config_prop:property_service set;
#line 248
#line 248
allow vendor_init dalvik_config_prop:file { getattr open read map };
#line 248
#line 248
#line 249
#line 249
allow vendor_init property_socket:sock_file write;
#line 249
allow vendor_init init:unix_stream_socket connectto;
#line 249
#line 249
allow vendor_init dalvik_dynamic_config_prop:property_service set;
#line 249
#line 249
allow vendor_init dalvik_dynamic_config_prop:file { getattr open read map };
#line 249
#line 249
#line 250
#line 250
allow vendor_init property_socket:sock_file write;
#line 250
allow vendor_init init:unix_stream_socket connectto;
#line 250
#line 250
allow vendor_init dalvik_runtime_prop:property_service set;
#line 250
#line 250
allow vendor_init dalvik_runtime_prop:file { getattr open read map };
#line 250
#line 250
#line 251
#line 251
allow vendor_init property_socket:sock_file write;
#line 251
allow vendor_init init:unix_stream_socket connectto;
#line 251
#line 251
allow vendor_init debug_prop:property_service set;
#line 251
#line 251
allow vendor_init debug_prop:file { getattr open read map };
#line 251
#line 251
#line 252
#line 252
allow vendor_init property_socket:sock_file write;
#line 252
allow vendor_init init:unix_stream_socket connectto;
#line 252
#line 252
allow vendor_init exported_bluetooth_prop:property_service set;
#line 252
#line 252
allow vendor_init exported_bluetooth_prop:file { getattr open read map };
#line 252
#line 252
#line 253
#line 253
allow vendor_init property_socket:sock_file write;
#line 253
allow vendor_init init:unix_stream_socket connectto;
#line 253
#line 253
allow vendor_init exported_camera_prop:property_service set;
#line 253
#line 253
allow vendor_init exported_camera_prop:file { getattr open read map };
#line 253
#line 253
#line 254
#line 254
allow vendor_init property_socket:sock_file write;
#line 254
allow vendor_init init:unix_stream_socket connectto;
#line 254
#line 254
allow vendor_init exported_config_prop:property_service set;
#line 254
#line 254
allow vendor_init exported_config_prop:file { getattr open read map };
#line 254
#line 254
#line 255
#line 255
allow vendor_init property_socket:sock_file write;
#line 255
allow vendor_init init:unix_stream_socket connectto;
#line 255
#line 255
allow vendor_init exported_default_prop:property_service set;
#line 255
#line 255
allow vendor_init exported_default_prop:file { getattr open read map };
#line 255
#line 255
#line 256
#line 256
allow vendor_init property_socket:sock_file write;
#line 256
allow vendor_init init:unix_stream_socket connectto;
#line 256
#line 256
allow vendor_init exported_overlay_prop:property_service set;
#line 256
#line 256
allow vendor_init exported_overlay_prop:file { getattr open read map };
#line 256
#line 256
#line 257
#line 257
allow vendor_init property_socket:sock_file write;
#line 257
allow vendor_init init:unix_stream_socket connectto;
#line 257
#line 257
allow vendor_init exported_pm_prop:property_service set;
#line 257
#line 257
allow vendor_init exported_pm_prop:file { getattr open read map };
#line 257
#line 257
#line 258
#line 258
allow vendor_init property_socket:sock_file write;
#line 258
allow vendor_init init:unix_stream_socket connectto;
#line 258
#line 258
allow vendor_init ffs_control_prop:property_service set;
#line 258
#line 258
allow vendor_init ffs_control_prop:file { getattr open read map };
#line 258
#line 258
#line 259
#line 259
allow vendor_init property_socket:sock_file write;
#line 259
allow vendor_init init:unix_stream_socket connectto;
#line 259
#line 259
allow vendor_init hw_timeout_multiplier_prop:property_service set;
#line 259
#line 259
allow vendor_init hw_timeout_multiplier_prop:file { getattr open read map };
#line 259
#line 259
#line 260
#line 260
allow vendor_init property_socket:sock_file write;
#line 260
allow vendor_init init:unix_stream_socket connectto;
#line 260
#line 260
allow vendor_init incremental_prop:property_service set;
#line 260
#line 260
allow vendor_init incremental_prop:file { getattr open read map };
#line 260
#line 260
#line 261
#line 261
allow vendor_init property_socket:sock_file write;
#line 261
allow vendor_init init:unix_stream_socket connectto;
#line 261
#line 261
allow vendor_init lmkd_prop:property_service set;
#line 261
#line 261
allow vendor_init lmkd_prop:file { getattr open read map };
#line 261
#line 261
#line 262
#line 262
allow vendor_init property_socket:sock_file write;
#line 262
allow vendor_init init:unix_stream_socket connectto;
#line 262
#line 262
allow vendor_init logd_prop:property_service set;
#line 262
#line 262
allow vendor_init logd_prop:file { getattr open read map };
#line 262
#line 262
#line 263
#line 263
allow vendor_init property_socket:sock_file write;
#line 263
allow vendor_init init:unix_stream_socket connectto;
#line 263
#line 263
allow vendor_init log_tag_prop:property_service set;
#line 263
#line 263
allow vendor_init log_tag_prop:file { getattr open read map };
#line 263
#line 263
#line 264
#line 264
allow vendor_init property_socket:sock_file write;
#line 264
allow vendor_init init:unix_stream_socket connectto;
#line 264
#line 264
allow vendor_init log_prop:property_service set;
#line 264
#line 264
allow vendor_init log_prop:file { getattr open read map };
#line 264
#line 264
#line 265
#line 265
allow vendor_init property_socket:sock_file write;
#line 265
allow vendor_init init:unix_stream_socket connectto;
#line 265
#line 265
allow vendor_init graphics_config_writable_prop:property_service set;
#line 265
#line 265
allow vendor_init graphics_config_writable_prop:file { getattr open read map };
#line 265
#line 265
#line 266
#line 266
allow vendor_init property_socket:sock_file write;
#line 266
allow vendor_init init:unix_stream_socket connectto;
#line 266
#line 266
allow vendor_init qemu_hw_prop:property_service set;
#line 266
#line 266
allow vendor_init qemu_hw_prop:file { getattr open read map };
#line 266
#line 266
#line 267
#line 267
allow vendor_init property_socket:sock_file write;
#line 267
allow vendor_init init:unix_stream_socket connectto;
#line 267
#line 267
allow vendor_init radio_control_prop:property_service set;
#line 267
#line 267
allow vendor_init radio_control_prop:file { getattr open read map };
#line 267
#line 267
#line 268
#line 268
allow vendor_init property_socket:sock_file write;
#line 268
allow vendor_init init:unix_stream_socket connectto;
#line 268
#line 268
allow vendor_init rebootescrow_hal_prop:property_service set;
#line 268
#line 268
allow vendor_init rebootescrow_hal_prop:file { getattr open read map };
#line 268
#line 268
#line 269
#line 269
allow vendor_init property_socket:sock_file write;
#line 269
allow vendor_init init:unix_stream_socket connectto;
#line 269
#line 269
allow vendor_init serialno_prop:property_service set;
#line 269
#line 269
allow vendor_init serialno_prop:file { getattr open read map };
#line 269
#line 269
#line 270
#line 270
allow vendor_init property_socket:sock_file write;
#line 270
allow vendor_init init:unix_stream_socket connectto;
#line 270
#line 270
allow vendor_init soc_prop:property_service set;
#line 270
#line 270
allow vendor_init soc_prop:file { getattr open read map };
#line 270
#line 270
#line 271
#line 271
allow vendor_init property_socket:sock_file write;
#line 271
allow vendor_init init:unix_stream_socket connectto;
#line 271
#line 271
allow vendor_init surfaceflinger_color_prop:property_service set;
#line 271
#line 271
allow vendor_init surfaceflinger_color_prop:file { getattr open read map };
#line 271
#line 271
#line 272
#line 272
allow vendor_init property_socket:sock_file write;
#line 272
allow vendor_init init:unix_stream_socket connectto;
#line 272
#line 272
allow vendor_init usb_control_prop:property_service set;
#line 272
#line 272
allow vendor_init usb_control_prop:file { getattr open read map };
#line 272
#line 272
#line 273
#line 273
allow vendor_init property_socket:sock_file write;
#line 273
allow vendor_init init:unix_stream_socket connectto;
#line 273
#line 273
allow vendor_init userspace_reboot_config_prop:property_service set;
#line 273
#line 273
allow vendor_init userspace_reboot_config_prop:file { getattr open read map };
#line 273
#line 273
#line 274
#line 274
allow vendor_init property_socket:sock_file write;
#line 274
allow vendor_init init:unix_stream_socket connectto;
#line 274
#line 274
allow vendor_init vehicle_hal_prop:property_service set;
#line 274
#line 274
allow vendor_init vehicle_hal_prop:file { getattr open read map };
#line 274
#line 274
#line 275
#line 275
allow vendor_init property_socket:sock_file write;
#line 275
allow vendor_init init:unix_stream_socket connectto;
#line 275
#line 275
allow vendor_init vendor_default_prop:property_service set;
#line 275
#line 275
allow vendor_init vendor_default_prop:file { getattr open read map };
#line 275
#line 275
#line 276
#line 276
allow vendor_init property_socket:sock_file write;
#line 276
allow vendor_init init:unix_stream_socket connectto;
#line 276
#line 276
allow vendor_init keystore_config_prop:property_service set;
#line 276
#line 276
allow vendor_init keystore_config_prop:file { getattr open read map };
#line 276
#line 276
#line 277
#line 277
allow vendor_init property_socket:sock_file write;
#line 277
allow vendor_init init:unix_stream_socket connectto;
#line 277
#line 277
allow vendor_init vendor_security_patch_level_prop:property_service set;
#line 277
#line 277
allow vendor_init vendor_security_patch_level_prop:file { getattr open read map };
#line 277
#line 277
#line 278
#line 278
allow vendor_init property_socket:sock_file write;
#line 278
allow vendor_init init:unix_stream_socket connectto;
#line 278
#line 278
allow vendor_init vndk_prop:property_service set;
#line 278
#line 278
allow vendor_init vndk_prop:file { getattr open read map };
#line 278
#line 278
#line 279
#line 279
allow vendor_init property_socket:sock_file write;
#line 279
allow vendor_init init:unix_stream_socket connectto;
#line 279
#line 279
allow vendor_init virtual_ab_prop:property_service set;
#line 279
#line 279
allow vendor_init virtual_ab_prop:file { getattr open read map };
#line 279
#line 279
#line 280
#line 280
allow vendor_init property_socket:sock_file write;
#line 280
allow vendor_init init:unix_stream_socket connectto;
#line 280
#line 280
allow vendor_init vold_post_fs_data_prop:property_service set;
#line 280
#line 280
allow vendor_init vold_post_fs_data_prop:file { getattr open read map };
#line 280
#line 280
#line 281
#line 281
allow vendor_init property_socket:sock_file write;
#line 281
allow vendor_init init:unix_stream_socket connectto;
#line 281
#line 281
allow vendor_init wifi_hal_prop:property_service set;
#line 281
#line 281
allow vendor_init wifi_hal_prop:file { getattr open read map };
#line 281
#line 281
#line 282
#line 282
allow vendor_init property_socket:sock_file write;
#line 282
allow vendor_init init:unix_stream_socket connectto;
#line 282
#line 282
allow vendor_init wifi_log_prop:property_service set;
#line 282
#line 282
allow vendor_init wifi_log_prop:file { getattr open read map };
#line 282
#line 282
#line 283
#line 283
allow vendor_init property_socket:sock_file write;
#line 283
allow vendor_init init:unix_stream_socket connectto;
#line 283
#line 283
allow vendor_init zram_control_prop:property_service set;
#line 283
#line 283
allow vendor_init zram_control_prop:file { getattr open read map };
#line 283
#line 283
#line 285
allow vendor_init boot_status_prop:file { getattr open read map };
#line 285
#line 286
allow vendor_init exported3_system_prop:file { getattr open read map };
#line 286
#line 287
allow vendor_init ota_prop:file { getattr open read map };
#line 287
#line 288
allow vendor_init power_debug_prop:file { getattr open read map };
#line 288
#line 289
allow vendor_init provisioned_prop:file { getattr open read map };
#line 289
#line 290
allow vendor_init retaildemo_prop:file { getattr open read map };
#line 290
#line 291
allow vendor_init surfaceflinger_display_prop:file { getattr open read map };
#line 291
#line 292
allow vendor_init test_harness_prop:file { getattr open read map };
#line 292
#line 293
allow vendor_init theme_prop:file { getattr open read map };
#line 293
#line 294
#line 294
allow vendor_init property_socket:sock_file write;
#line 294
allow vendor_init init:unix_stream_socket connectto;
#line 294
#line 294
allow vendor_init dck_prop:property_service set;
#line 294
#line 294
allow vendor_init dck_prop:file { getattr open read map };
#line 294
#line 294
# Allow vendor_init to read vendor_system_native device config changes
#line 297
allow vendor_init device_config_vendor_system_native_prop:file { getattr open read map };
#line 297
#line 298
allow vendor_init device_config_vendor_system_native_boot_prop:file { getattr open read map };
#line 298
###
### neverallow rules
###
# Vendor init shouldn't communicate with any vendor process, nor most system processes.
#line 305
neverallow vendor_init {
#line 305
domain -init -logd -prng_seeder -su -vendor_init }:{ socket tcp_socket udp_socket rawip_socket netlink_socket packet_socket key_socket unix_stream_socket unix_dgram_socket appletalk_socket netlink_route_socket netlink_tcpdiag_socket netlink_nflog_socket netlink_xfrm_socket netlink_selinux_socket netlink_audit_socket netlink_dnrt_socket netlink_kobject_uevent_socket tun_socket netlink_iscsi_socket netlink_fib_lookup_socket netlink_connector_socket netlink_netfilter_socket netlink_generic_socket netlink_scsitransport_socket netlink_rdma_socket netlink_crypto_socket sctp_socket icmp_socket ax25_socket ipx_socket netrom_socket atmpvc_socket x25_socket rose_socket decnet_socket atmsvc_socket rds_socket irda_socket pppox_socket llc_socket can_socket tipc_socket bluetooth_socket iucv_socket rxrpc_socket isdn_socket phonet_socket ieee802154_socket caif_socket alg_socket nfc_socket vsock_socket kcm_socket qipcrtr_socket smc_socket xdp_socket } { connect sendto };
#line 305
neverallow vendor_init {
#line 305
domain -init -logd -prng_seeder -su -vendor_init }:unix_stream_socket connectto;
;
# The vendor_init domain is only entered via an exec based transition from the
# init domain, never via setcon().
neverallow domain vendor_init:process dyntransition;
neverallow { domain -init } vendor_init:process transition;
neverallow vendor_init { file_type fs_type -init_exec }:file entrypoint;
# Never read/follow symlinks created by shell or untrusted apps.
neverallow vendor_init app_data_file_type:lnk_file read;
neverallow vendor_init shell_data_file:lnk_file read;
# Init should not be creating subdirectories in /data/local/tmp
neverallow vendor_init shell_data_file:dir { write add_name remove_name };
# init should never execute a program without changing to another domain.
neverallow vendor_init { file_type fs_type }:file execute_no_trans;
# Init never adds or uses services via service_manager.
neverallow vendor_init service_manager_type:service_manager { add find };
neverallow vendor_init servicemanager:service_manager list;
# vendor_init should never be ptraced
neverallow * vendor_init:process ptrace;
#line 1 "system/sepolicy/public/vendor_misc_writer.te"
# vendor_misc_writer
type vendor_misc_writer, domain;
type vendor_misc_writer_exec, vendor_file_type, exec_type, file_type;
# Raw writes to misc_block_device
allow vendor_misc_writer misc_block_device:blk_file { open append write lock map };
allow vendor_misc_writer block_device:dir { open getattr read search ioctl lock watch watch_reads };
# Silence the denial when calling libfstab's ReadDefaultFstab, which tries to
# load DT fstab.
dontaudit vendor_misc_writer proc_cmdline:file { getattr open read ioctl lock map watch watch_reads };
dontaudit vendor_misc_writer sysfs_dt_firmware_android:dir search;
dontaudit vendor_misc_writer proc_bootconfig:file { getattr open read ioctl lock map watch watch_reads };
# Allow ReadDefaultFstab().
#line 16
allow vendor_misc_writer { metadata_file gsi_metadata_file_type }:dir search;
#line 16
allow vendor_misc_writer gsi_public_metadata_file:file { getattr open read ioctl lock map watch watch_reads };
#line 16
allow vendor_misc_writer { proc_bootconfig proc_cmdline }:file { getattr open read ioctl lock map watch watch_reads };
#line 16
#line 1 "system/sepolicy/public/vendor_modprobe.te"
type vendor_modprobe, domain;
#line 1 "system/sepolicy/public/vendor_shell.te"
type vendor_shell, domain;
type vendor_shell_exec, exec_type, vendor_file_type, file_type;
allow vendor_shell vendor_shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow vendor_shell vendor_toolbox_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Use fd from shell when vendor_shell is started from shell
allow vendor_shell shell:fd use;
# adbd: allow `adb shell /vendor/bin/sh` and `adb shell` then `/vendor/bin/sh`
allow vendor_shell adbd:fd use;
allow vendor_shell adbd:process sigchld;
allow vendor_shell adbd:unix_stream_socket { getattr ioctl read write };
allow vendor_shell devpts:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow vendor_shell tty_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow vendor_shell console_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow vendor_shell input_device:dir { open getattr read search ioctl lock watch watch_reads };
allow vendor_shell input_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 1 "system/sepolicy/public/vendor_toolbox.te"
# Toolbox installation for vendor binaries / scripts
# Non-vendor processes are not allowed to execute the binary
# and is always executed without transition.
type vendor_toolbox_exec, exec_type, vendor_file_type, file_type;
# Do not allow domains to transition to vendor toolbox
# or read, execute the vendor_toolbox file.
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 8
#line 8
# Do not allow non-vendor domains to transition
#line 8
# to vendor toolbox except for the allowlisted domains.
#line 8
neverallow {
#line 8
coredomain
#line 8
-init
#line 8
-modprobe
#line 8
} vendor_toolbox_exec:file { entrypoint execute execute_no_trans };
#line 8
#line 8
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 16
#line 1 "system/sepolicy/public/virtual_touchpad.te"
type virtual_touchpad, domain;
type virtual_touchpad_exec, system_file_type, exec_type, file_type;
#line 4
# Call the servicemanager and transfer references to it.
#line 4
allow virtual_touchpad servicemanager:binder { call transfer };
#line 4
# Allow servicemanager to send out callbacks
#line 4
allow servicemanager virtual_touchpad:binder { call transfer };
#line 4
# servicemanager performs getpidcon on clients.
#line 4
allow servicemanager virtual_touchpad:dir search;
#line 4
allow servicemanager virtual_touchpad:file { read open };
#line 4
allow servicemanager virtual_touchpad:process getattr;
#line 4
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 4
# all domains in domain.te.
#line 4
#line 5
typeattribute virtual_touchpad binderservicedomain;
#line 5
#line 6
allow virtual_touchpad virtual_touchpad_service:service_manager { add find };
#line 6
neverallow { domain -virtual_touchpad } virtual_touchpad_service:service_manager add;
#line 6
#line 6
# On debug builds with root, allow binder services to use binder over TCP.
#line 6
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 6
#line 6
# Needed to check app permissions.
#line 9
# Call the server domain and optionally transfer references to it.
#line 9
allow virtual_touchpad system_server:binder { call transfer };
#line 9
# Allow the serverdomain to transfer references to the client on the reply.
#line 9
allow system_server virtual_touchpad:binder transfer;
#line 9
# Receive and use open files from the server.
#line 9
allow virtual_touchpad system_server:fd use;
#line 9
# Requires access to /dev/uinput to create and feed the virtual device.
allow virtual_touchpad uhid_device:chr_file { { open append write lock map } ioctl };
# Requires access to the permission service to validate that clients have the
# appropriate VR permissions.
allow virtual_touchpad permission_service:service_manager find;
#line 1 "system/sepolicy/public/vndservice.te"
type service_manager_vndservice, vndservice_manager_type;
type default_android_vndservice, vndservice_manager_type;
#line 1 "system/sepolicy/public/vndservicemanager.te"
# vndservicemanager - the Binder context manager for vendor processes
type vndservicemanager, domain;
#line 1 "system/sepolicy/public/vold.te"
# volume manager
type vold, domain;
type vold_exec, exec_type, file_type, system_file_type;
# Read already opened /cache files.
allow vold cache_file:dir { open getattr read search ioctl lock watch watch_reads };
allow vold cache_file:file { getattr read };
allow vold cache_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
#line 10
allow vold { sysfs_type -sysfs_batteryinfo }:dir { open getattr read search ioctl lock watch watch_reads };
#line 10
allow vold { sysfs_type -sysfs_batteryinfo }:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 10
# XXX Label sysfs files with a specific type?
allow vold {
sysfs # writing to /sys/*/uevent during coldboot.
sysfs_devices_block
sysfs_dm
sysfs_loop # writing to /sys/block/loop*/uevent during coldboot.
sysfs_usb
sysfs_zram_uevent
sysfs_fs_f2fs
}:file { open append write lock map };
#line 22
allow vold rootfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 22
allow vold rootfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 22
#line 23
allow vold metadata_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 23
allow vold metadata_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 23
allow vold {
proc # b/67049235 processes /proc/<pid>/* files are mislabeled.
proc_bootconfig
proc_cmdline
proc_drop_caches
proc_filesystems
proc_meminfo
proc_mounts
}:file { getattr open read ioctl lock map watch watch_reads };
#Get file contexts
allow vold file_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow us to jump into execution domains of above tools
allow vold self:process setexec;
# For formatting adoptable storage devices
allow vold e2fs_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Run fstrim on mounted partitions
# allowxperm still requires the ioctl permission for the individual type
allowxperm vold { fs_type file_type }:dir ioctl 0xc0185879;
# Get/set file-based encryption policies on dirs in /data and adoptable storage,
# and add/remove file-based encryption keys.
allowxperm vold data_file_type:dir ioctl {
0x400c6615
0x800c6613
0xc0506617
0xc0406618
0xc080661a
};
# Only vold and init should ever set file-based encryption policies.
neverallowxperm {
domain
-vold
-init
-vendor_init
} data_file_type:dir ioctl { 0x800c6613 };
# Only vold should ever add/remove file-based encryption keys.
neverallowxperm {
domain
-vold
} data_file_type:dir ioctl { 0xc0506617 0xc0406618 0xc080661a };
# Allow securely erasing crypto key files. F2FS_IOC_SEC_TRIM_FILE is
# tried first. Otherwise, FS_IOC_FIEMAP is needed to get the
# location of the file's blocks on the raw block device to erase.
allowxperm vold {
vold_data_file
vold_metadata_file
}:file ioctl {
0xf514
0xc020660b
};
typeattribute vold mlstrustedsubject;
allow vold self:process setfscreate;
allow vold system_file:file { getattr execute execute_no_trans map };
allow vold vendor_file:file { getattr execute execute_no_trans map };
allow vold block_device:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow vold device:dir write;
allow vold devpts:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow vold rootfs:dir mounton;
allow vold { sdcard_type fuse }:dir mounton; # TODO: deprecated in M
allow vold { sdcard_type fuse }:filesystem { mount remount unmount }; # TODO: deprecated in M
# Manage locations where storage is mounted
allow vold { mnt_media_rw_file storage_file sdcard_type fuse }:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow vold { mnt_media_rw_file storage_file sdcard_type fuse }:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Access to storage that backs emulated FUSE daemons for migration optimization
allow vold media_rw_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow vold media_rw_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow mounting (lower filesystem) on parts of media for performance
allow vold media_rw_data_file:dir mounton;
# Allow setting project quota IDs and enabling project ID inheritance on
# /data/media/$userId/* and /mnt/expand/$volume/media/$userId/*
allowxperm vold media_rw_data_file:{ dir file } ioctl {
0x801c581f
0x401c5820
0x80086601
0x40086602
};
# Allow mounting of storage devices
allow vold { mnt_media_rw_stub_file storage_stub_file }:dir { mounton create rmdir getattr setattr };
# Manage per-user primary symlinks
allow vold mnt_user_file:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } mounton };
allow vold mnt_user_file:lnk_file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow vold mnt_user_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Manage per-user pass_through primary symlinks
allow vold mnt_pass_through_file:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } mounton };
allow vold mnt_pass_through_file:lnk_file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow to create and mount expanded storage
allow vold mnt_expand_file:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } mounton };
allow vold apk_data_file:dir { create getattr setattr };
allow vold shell_data_file:dir { create getattr setattr };
allow vold system_userdir_file:dir { create getattr setattr };
allow vold media_userdir_file:dir { create getattr setattr open read ioctl };
# Needed to set the casefold flag on /mnt/expand/$volume/media
allowxperm vold media_userdir_file:dir ioctl { 0x80086601 0x40086602 };
# Allow to mount incremental file system on /data/incremental and create files
allow vold apk_data_file:dir { mounton { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
# Allow to create and write files in /data/incremental
allow vold apk_data_file:file { { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } unlink };
# Allow to bind-mount incremental file system on /data/app/vmdl*.tmp and read files
allow vold apk_tmp_file:dir { mounton { open getattr read search ioctl lock watch watch_reads } };
# Allow to read incremental control file and call selinux restorecon on it
allow vold incremental_control_file:file { { getattr open read ioctl lock map watch watch_reads } relabelto };
allow vold tmpfs:filesystem { mount unmount };
allow vold tmpfs:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow vold tmpfs:dir mounton;
allow vold self:{ capability cap_userns } { net_admin dac_override dac_read_search mknod sys_admin chown fowner fsetid };
allow vold self:netlink_kobject_uevent_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow vold loop_control_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow vold loop_device:blk_file { create setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allowxperm vold loop_device:blk_file ioctl {
0x00004c01
0x00004c82
0x00004c05
0x00004c00
0x00004c04
};
allow vold vold_device:blk_file { create setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allowxperm vold vold_device:blk_file ioctl { 0x00001277 0x00001260 };
allow vold dm_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow vold dm_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allowxperm vold dm_device:blk_file ioctl { 0x00001277 0x0000127d 0xc0101282 0x40101283 };
# For vold Process::killProcessesWithOpenFiles function.
allow vold domain:dir { open getattr read search ioctl lock watch watch_reads };
allow vold domain:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
allow vold domain:process { signal sigkill };
allow vold self:{ capability cap_userns } { sys_ptrace kill };
allow vold kmsg_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Run fsck in the fsck domain.
allow vold fsck_exec:file { { getattr open read ioctl lock map watch watch_reads } execute };
# Log fsck results
allow vold fscklogs:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow vold fscklogs:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Mount and unmount filesystems.
allow vold labeledfs:filesystem { mount unmount remount };
# Create and mount on /data/tmp_mnt and management of expansion mounts
#
# Also rename per-user encrypted directories such as /data/user/10 from their
# temporary name ("10.new") to their final name ("10").
allow vold {
system_data_file
system_data_root_file
}:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } mounton };
allow vold system_data_file:lnk_file getattr;
# Vold create users in /data/vendor_{ce,de}/[0-9]+
allow vold vendor_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
# for secdiscard
allow vold system_data_file:file read;
# Set scheduling policy of kernel processes
allow vold kernel:process setsched;
# ASEC
allow vold asec_image_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow vold asec_image_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow vold asec_apk_file:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } mounton relabelfrom relabelto };
allow vold asec_public_file:dir { relabelto setattr };
allow vold asec_apk_file:file { { getattr open read ioctl lock map watch watch_reads } setattr relabelfrom relabelto };
allow vold asec_public_file:file { relabelto setattr };
# restorecon files in asec containers created on 4.2 or earlier.
allow vold unlabeled:dir { { open getattr read search ioctl lock watch watch_reads } setattr relabelfrom };
allow vold unlabeled:file { { getattr open read ioctl lock map watch watch_reads } setattr relabelfrom };
# Access to FUSE control filesystem to hard-abort FUSE mounts
allow vold fusectlfs:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow vold fusectlfs:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
# Allow vold to use wake locks. Needed for idle maintenance and moving storage.
#line 214
# TODO(b/115946999): Remove /sys/power/* permissions once CONFIG_PM_WAKELOCKS is
#line 214
# deprecated.
#line 214
# Access /sys/power/wake_lock and /sys/power/wake_unlock
#line 214
allow vold sysfs_wake_lock:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 214
# Accessing these files requires CAP_BLOCK_SUSPEND
#line 214
allow vold self:{ capability2 cap2_userns } block_suspend;
#line 214
# system_suspend permissions
#line 214
#line 214
# Call the server domain and optionally transfer references to it.
#line 214
allow vold system_suspend_server:binder { call transfer };
#line 214
# Allow the serverdomain to transfer references to the client on the reply.
#line 214
allow system_suspend_server vold:binder transfer;
#line 214
# Receive and use open files from the server.
#line 214
allow vold system_suspend_server:fd use;
#line 214
#line 214
allow vold system_suspend_hwservice:hwservice_manager find;
#line 214
# halclientdomain permissions
#line 214
#line 214
# Call the hwservicemanager and transfer references to it.
#line 214
allow vold hwservicemanager:binder { call transfer };
#line 214
# Allow hwservicemanager to send out callbacks
#line 214
allow hwservicemanager vold:binder { call transfer };
#line 214
# hwservicemanager performs getpidcon on clients.
#line 214
allow hwservicemanager vold:dir search;
#line 214
allow hwservicemanager vold:file { read open map };
#line 214
allow hwservicemanager vold:process getattr;
#line 214
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 214
# all domains in domain.te.
#line 214
#line 214
#line 214
allow vold hwservicemanager_prop:file { getattr open read map };
#line 214
#line 214
allow vold hidl_manager_hwservice:hwservice_manager find;
#line 214
# AIDL suspend hal permissions
#line 214
allow vold hal_system_suspend_service:service_manager find;
#line 214
#line 214
# Call the servicemanager and transfer references to it.
#line 214
allow vold servicemanager:binder { call transfer };
#line 214
# Allow servicemanager to send out callbacks
#line 214
allow servicemanager vold:binder { call transfer };
#line 214
# servicemanager performs getpidcon on clients.
#line 214
allow servicemanager vold:dir search;
#line 214
allow servicemanager vold:file { read open };
#line 214
allow servicemanager vold:process getattr;
#line 214
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 214
# all domains in domain.te.
#line 214
#line 214
# Allow vold to publish a binder service and make binder calls.
#line 217
# Call the servicemanager and transfer references to it.
#line 217
allow vold servicemanager:binder { call transfer };
#line 217
# Allow servicemanager to send out callbacks
#line 217
allow servicemanager vold:binder { call transfer };
#line 217
# servicemanager performs getpidcon on clients.
#line 217
allow servicemanager vold:dir search;
#line 217
allow servicemanager vold:file { read open };
#line 217
allow servicemanager vold:process getattr;
#line 217
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 217
# all domains in domain.te.
#line 217
#line 218
allow vold vold_service:service_manager { add find };
#line 218
neverallow { domain -vold } vold_service:service_manager add;
#line 218
#line 218
# On debug builds with root, allow binder services to use binder over TCP.
#line 218
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 218
#line 218
# Allow vold to call into the system server so it can check permissions.
#line 221
# Call the server domain and optionally transfer references to it.
#line 221
allow vold system_server:binder { call transfer };
#line 221
# Allow the serverdomain to transfer references to the client on the reply.
#line 221
allow system_server vold:binder transfer;
#line 221
# Receive and use open files from the server.
#line 221
allow vold system_server:fd use;
#line 221
allow vold permission_service:service_manager find;
# talk to health storage HAL
#line 225
typeattribute vold halclientdomain;
#line 225
typeattribute vold hal_health_storage_client;
#line 225
#line 225
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 225
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 225
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 225
#line 225
typeattribute vold hal_health_storage;
#line 225
# Find passthrough HAL implementations
#line 225
allow hal_health_storage system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 225
allow hal_health_storage vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 225
allow hal_health_storage vendor_file:file { read open getattr execute map };
#line 225
#line 225
# talk to bootloader HAL
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 228
#line 228
typeattribute vold halclientdomain;
#line 228
typeattribute vold hal_bootctl_client;
#line 228
#line 228
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 228
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 228
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 228
#line 228
typeattribute vold hal_bootctl;
#line 228
# Find passthrough HAL implementations
#line 228
allow hal_bootctl system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 228
allow hal_bootctl vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 228
allow hal_bootctl vendor_file:file { read open getattr execute map };
#line 228
#line 228
#line 228
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 228
# Access userdata block device.
allow vold userdata_block_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allowxperm vold userdata_block_device:blk_file ioctl 0x0000127d;
# Access zoned block device.
allow vold zoned_block_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Access metadata block device used for encryption meta-data.
allow vold metadata_block_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allowxperm vold metadata_block_device:blk_file ioctl 0x0000127d;
# Allow vold to manipulate /data/unencrypted
allow vold unencrypted_data_file:{ file } { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow vold unencrypted_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
# Write to /proc/sys/vm/drop_caches
allow vold proc_drop_caches:file { open append write lock map };
# Give vold a place where only vold can store files; everyone else is off limits
allow vold vold_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow vold vold_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# And a similar place in the metadata partition
allow vold vold_metadata_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow vold vold_metadata_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# linux keyring configuration
allow vold init:key { write search setattr };
allow vold vold:key { write search setattr };
# vold temporarily changes its priority when running benchmarks
allow vold self:{ capability cap_userns } sys_nice;
# vold needs to chroot into app namespaces to remount when runtime permissions change
allow vold self:{ capability cap_userns } sys_chroot;
allow vold storage_file:dir mounton;
# For AppFuse.
allow vold fuse_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow vold fuse:filesystem { relabelfrom };
allow vold app_fusefs:filesystem { relabelfrom relabelto };
allow vold app_fusefs:filesystem { mount unmount };
allow vold app_fuse_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow vold app_fuse_file:file { read write open getattr append };
# MoveStorage.cpp executes cp and rm
allow vold toolbox_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Prepare profile dir for users.
allow vold { user_profile_data_file user_profile_root_file }:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
# Raw writes to misc block device
allow vold misc_block_device:blk_file { open append write lock map };
# vold might need to search or mount /mnt/vendor/*
allow vold mnt_vendor_file:dir search;
dontaudit vold self:{ capability cap_userns } sys_resource;
# Allow ReadDefaultFstab().
#line 290
allow vold { metadata_file gsi_metadata_file_type }:dir search;
#line 290
allow vold gsi_public_metadata_file:file { getattr open read ioctl lock map watch watch_reads };
#line 290
allow vold { proc_bootconfig proc_cmdline }:file { getattr open read ioctl lock map watch watch_reads };
#line 290
# vold might need to search loopback apex files
allow vold vendor_apex_file:file { getattr open read ioctl lock map watch watch_reads };
neverallow {
domain
-vold
-vold_prepare_subdirs
} vold_data_file:dir ~{ open create read getattr setattr search relabelfrom relabelto ioctl };
neverallow {
domain
-init
-vold
-vold_prepare_subdirs
} vold_data_file:dir *;
neverallow {
domain
-init
-vold
} vold_metadata_file:dir *;
neverallow {
domain
-kernel
-vold
-vold_prepare_subdirs
} vold_data_file:{ file lnk_file sock_file fifo_file } ~{ relabelto getattr };
neverallow {
domain
-init
-vold
-vold_prepare_subdirs
} vold_metadata_file:{ file lnk_file sock_file fifo_file } ~{ relabelto getattr };
neverallow {
domain
-init
-kernel
-vold
-vold_prepare_subdirs
} { vold_data_file vold_metadata_file }:{ file lnk_file sock_file fifo_file } *;
neverallow { domain -vold -init } restorecon_prop:property_service set;
neverallow vold {
domain
-hal_health_storage_server
-hal_keymaster_server
-system_suspend_server
-hal_bootctl_server
-hwservicemanager
-keystore
-servicemanager
-system_server
}:binder call;
neverallow vold fsck_exec:file execute_no_trans;
neverallow { domain -init } vold:process { transition dyntransition };
neverallow vold *:process ptrace;
neverallow vold *:rawip_socket *;
#line 1 "system/sepolicy/public/vold_prepare_subdirs.te"
# SELinux directory creation and labelling for vold-managed directories
type vold_prepare_subdirs, domain;
type vold_prepare_subdirs_exec, system_file_type, exec_type, file_type;
typeattribute vold_prepare_subdirs coredomain;
#line 1 "system/sepolicy/public/watchdogd.te"
# watchdogd seclabel is specified in init.<board>.rc
type watchdogd, domain;
type watchdogd_exec, system_file_type, exec_type, file_type;
allow watchdogd watchdog_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow watchdogd kmsg_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 1 "system/sepolicy/public/webview_zygote.te"
# webview_zygote is an auxiliary zygote process that is used to spawn
# isolated_app processes for rendering untrusted web content.
type webview_zygote, domain;
type webview_zygote_exec, exec_type, file_type;
type webview_zygote_tmpfs, file_type;
#line 1 "system/sepolicy/public/wificond.te"
# wificond
type wificond, domain;
type wificond_exec, system_file_type, exec_type, file_type;
#line 5
# Call the servicemanager and transfer references to it.
#line 5
allow wificond servicemanager:binder { call transfer };
#line 5
# Allow servicemanager to send out callbacks
#line 5
allow servicemanager wificond:binder { call transfer };
#line 5
# servicemanager performs getpidcon on clients.
#line 5
allow servicemanager wificond:dir search;
#line 5
allow servicemanager wificond:file { read open };
#line 5
allow servicemanager wificond:process getattr;
#line 5
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 5
# all domains in domain.te.
#line 5
#line 6
# Call the server domain and optionally transfer references to it.
#line 6
allow wificond system_server:binder { call transfer };
#line 6
# Allow the serverdomain to transfer references to the client on the reply.
#line 6
allow system_server wificond:binder transfer;
#line 6
# Receive and use open files from the server.
#line 6
allow wificond system_server:fd use;
#line 6
#line 7
# Call the server domain and optionally transfer references to it.
#line 7
allow wificond keystore:binder { call transfer };
#line 7
# Allow the serverdomain to transfer references to the client on the reply.
#line 7
allow keystore wificond:binder transfer;
#line 7
# Receive and use open files from the server.
#line 7
allow wificond keystore:fd use;
#line 7
#line 9
allow wificond wifinl80211_service:service_manager { add find };
#line 9
neverallow { domain -wificond } wifinl80211_service:service_manager add;
#line 9
#line 9
# On debug builds with root, allow binder services to use binder over TCP.
#line 9
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 9
#line 9
#line 10
typeattribute wificond halclientdomain;
#line 10
typeattribute wificond hal_nlinterceptor_client;
#line 10
#line 10
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 10
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 10
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 10
#line 10
typeattribute wificond hal_nlinterceptor;
#line 10
# Find passthrough HAL implementations
#line 10
allow hal_nlinterceptor system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 10
allow hal_nlinterceptor vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 10
allow hal_nlinterceptor vendor_file:file { read open getattr execute map };
#line 10
#line 10
# create sockets to set interfaces up and down
allow wificond self:udp_socket { create { ioctl read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# setting interface state up/down is a privileged ioctl
allowxperm wificond self:udp_socket ioctl { 0x00008914 0x00008924 };
allow wificond self:{ capability cap_userns } { net_admin net_raw };
# allow wificond to speak to nl80211 in the kernel
allow wificond self:netlink_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# newer kernels (e.g. 4.4 but not 4.1) have a new class for sockets
allow wificond self:netlink_generic_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
#line 22
allow wificond proc_net_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 22
allow wificond proc_net_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 22
# allow wificond to check permission for dumping logs
allow wificond permission_service:service_manager find;
# dumpstate support
allow wificond dumpstate:fd use;
allow wificond dumpstate:fifo_file write;
#### Offer the Wifi Keystore HwBinder service ###
#line 32
# Call the hwservicemanager and transfer references to it.
#line 32
allow wificond hwservicemanager:binder { call transfer };
#line 32
# Allow hwservicemanager to send out callbacks
#line 32
allow hwservicemanager wificond:binder { call transfer };
#line 32
# hwservicemanager performs getpidcon on clients.
#line 32
allow hwservicemanager wificond:dir search;
#line 32
allow hwservicemanager wificond:file { read open map };
#line 32
allow hwservicemanager wificond:process getattr;
#line 32
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 32
# all domains in domain.te.
#line 32
typeattribute wificond wifi_keystore_service_server;
#line 34
allow wificond system_wifi_keystore_hwservice:hwservice_manager { add find };
#line 34
allow wificond hidl_base_hwservice:hwservice_manager add;
#line 34
neverallow { domain -wificond } system_wifi_keystore_hwservice:hwservice_manager add;
#line 34
# Allow keystore2 binder access to serve the HwBinder service.
allow wificond keystore_service:service_manager find;
allow wificond wifi_key:keystore2_key {
get_info
use
};
#line 1 "system/sepolicy/public/zygote.te"
# zygote
type zygote, domain;
type zygote_tmpfs, file_type;
type zygote_exec, system_file_type, exec_type, file_type;
#line 1 "system/sepolicy/private/attributes"
#line 1
attribute hal_lazy_test;
#line 1
expandattribute hal_lazy_test true;
#line 1
attribute hal_lazy_test_client;
#line 1
expandattribute hal_lazy_test_client true;
#line 1
attribute hal_lazy_test_server;
#line 1
expandattribute hal_lazy_test_server false;
#line 1
#line 1
neverallow { hal_lazy_test_server -halserverdomain } domain:process fork;
#line 1
# hal_*_client and halclientdomain attributes are always expanded for
#line 1
# performance reasons. Neverallow rules targeting expanded attributes can not be
#line 1
# verified by CTS since these attributes are already expanded by that time.
#line 1
#line 1
;
# This is applied to apps on vendor images with SDK <=30 only,
# to exempt them from recent mls changes. It must not be applied
# to any domain on newer system or vendor image.
attribute mlsvendorcompat;
# Attributes for property types having both system_property_type
# and vendor_property_type. Such types are ill-formed because
# property owner attributes must be exclusive.
attribute system_and_vendor_property_type;
expandattribute system_and_vendor_property_type false;
# All SDK sandbox domains
attribute sdk_sandbox_all;
# The SDK sandbox domains for the current SDK level.
attribute sdk_sandbox_current;
#line 1 "system/sepolicy/private/aconfigd.te"
# aconfigd -- manager for aconfig flags
type aconfigd, domain;
type aconfigd_exec, exec_type, file_type, system_file_type;
typeattribute aconfigd coredomain;
#line 7
#line 7
# Allow the necessary permissions.
#line 7
#line 7
# Old domain may exec the file and transition to the new domain.
#line 7
allow init aconfigd_exec:file { getattr open read execute map };
#line 7
allow init aconfigd:process transition;
#line 7
# New domain is entered by executing the file.
#line 7
allow aconfigd aconfigd_exec:file { entrypoint open read execute getattr map };
#line 7
# New domain can send SIGCHLD to its caller.
#line 7
#line 7
# Enable AT_SECURE, i.e. libc secure mode.
#line 7
dontaudit init aconfigd:process noatsecure;
#line 7
# XXX dontaudit candidate but requires further study.
#line 7
allow init aconfigd:process { siginh rlimitinh };
#line 7
#line 7
# Make the transition occur by default.
#line 7
type_transition init aconfigd_exec:process aconfigd;
#line 7
#line 7
# only init is allowed to enter the aconfigd domain
neverallow { domain -init } aconfigd:process transition;
neverallow * aconfigd:process dyntransition;
allow aconfigd metadata_file:dir search;
allow aconfigd {
aconfig_storage_metadata_file
aconfig_storage_flags_metadata_file
}:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow aconfigd {
aconfig_storage_metadata_file
aconfig_storage_flags_metadata_file
}:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow aconfigd aconfigd_socket:sock_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# allow aconfigd to log to the kernel.
allow aconfigd kmsg_device:chr_file { open append write lock map };
# allow aconfigd to read system/system_ext/product partition storage files
allow aconfigd system_aconfig_storage_file:file { getattr open read ioctl lock map watch watch_reads };
allow aconfigd system_aconfig_storage_file:dir { open getattr read search ioctl lock watch watch_reads };
# allow aconfigd to read vendor partition storage files
allow aconfigd vendor_aconfig_storage_file:file { getattr open read ioctl lock map watch watch_reads };
allow aconfigd vendor_aconfig_storage_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 1 "system/sepolicy/private/adbd.te"
### ADB daemon
typeattribute adbd coredomain;
typeattribute adbd mlstrustedsubject;
#line 6
#line 6
# Allow the necessary permissions.
#line 6
#line 6
# Old domain may exec the file and transition to the new domain.
#line 6
allow init adbd_exec:file { getattr open read execute map };
#line 6
allow init adbd:process transition;
#line 6
# New domain is entered by executing the file.
#line 6
allow adbd adbd_exec:file { entrypoint open read execute getattr map };
#line 6
# New domain can send SIGCHLD to its caller.
#line 6
#line 6
# Enable AT_SECURE, i.e. libc secure mode.
#line 6
dontaudit init adbd:process noatsecure;
#line 6
# XXX dontaudit candidate but requires further study.
#line 6
allow init adbd:process { siginh rlimitinh };
#line 6
#line 6
# Make the transition occur by default.
#line 6
type_transition init adbd_exec:process adbd;
#line 6
#line 6
#line 8
# Allow the necessary permissions.
#line 8
#line 8
# Old domain may exec the file and transition to the new domain.
#line 8
allow adbd shell_exec:file { getattr open read execute map };
#line 8
allow adbd shell:process transition;
#line 8
# New domain is entered by executing the file.
#line 8
allow shell shell_exec:file { entrypoint open read execute getattr map };
#line 8
# New domain can send SIGCHLD to its caller.
#line 8
allow shell adbd:process sigchld;
#line 8
# Enable AT_SECURE, i.e. libc secure mode.
#line 8
dontaudit adbd shell:process noatsecure;
#line 8
# XXX dontaudit candidate but requires further study.
#line 8
allow adbd shell:process { siginh rlimitinh };
#line 8
#line 8
# Make the transition occur by default.
#line 8
type_transition adbd shell_exec:process shell;
#line 8
#line 13
# When 'adb shell' is executed in recovery mode, adbd explicitly
# switches into shell domain using setcon() because the shell executable
# is not labeled as shell but as rootfs.
#line 24
# Control Perfetto traced and obtain traces from it.
# Needed to allow port forwarding directly to traced.
#line 28
allow adbd traced_consumer_socket:sock_file write;
#line 28
allow adbd traced:unix_stream_socket connectto;
#line 28
# Do not sanitize the environment or open fds of the shell. Allow signaling
# created processes.
allow adbd shell:process { noatsecure signal };
# Set UID and GID to shell. Set supplementary groups.
allow adbd self:{ capability cap_userns } { setuid setgid };
# Drop capabilities from bounding set on user builds.
allow adbd self:{ capability cap_userns } setpcap;
# ignore spurious denials for adbd when disk space is low.
dontaudit adbd self:{ capability cap_userns } sys_resource;
# adbd probes for vsock support. Do not generate denials when
# this occurs. (b/123569840)
dontaudit adbd self:{ socket vsock_socket } create;
# Allow adbd inside vm to forward vm's vsock.
allow adbd self:vsock_socket { { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } } listen accept };
# Create and use network sockets.
#line 51
typeattribute adbd netdomain;
#line 51
# Connect to mdnsd via mdnsd socket.
#line 53
allow adbd mdnsd_socket:sock_file write;
#line 53
allow adbd mdnsd:unix_stream_socket connectto;
#line 53
# Access /dev/usb-ffs/adb/ep0
allow adbd functionfs:dir search;
allow adbd functionfs:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allowxperm adbd functionfs:file ioctl {
0x80096782
0x00006703
};
# Use a pseudo tty.
allow adbd devpts:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# adb push/pull /data/local/tmp.
allow adbd shell_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow adbd shell_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# adb pull /data/local/traces/*
allow adbd trace_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow adbd trace_data_file:file { getattr open read ioctl lock map watch watch_reads };
# adb pull /data/misc/profman.
allow adbd profman_dump_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow adbd profman_dump_data_file:file { getattr open read ioctl lock map watch watch_reads };
# adb push/pull sdcard.
allow adbd tmpfs:dir search;
allow adbd rootfs:lnk_file { getattr open read ioctl lock map watch watch_reads }; # /sdcard symlink
allow adbd tmpfs:lnk_file { getattr open read ioctl lock map watch watch_reads }; # /mnt/sdcard symlink
allow adbd { sdcard_type fuse }:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow adbd { sdcard_type fuse }:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# adb pull /data/anr/traces.txt
allow adbd anr_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow adbd anr_data_file:file { getattr open read ioctl lock map watch watch_reads };
# adb pull /vendor/framework/*
allow adbd vendor_framework_file:dir { open getattr read search ioctl lock watch watch_reads };
allow adbd vendor_framework_file:file { getattr open read ioctl lock map watch watch_reads };
# Set service.adb.*, sys.powerctl, and sys.usb.ffs.ready properties.
#line 94
#line 94
allow adbd property_socket:sock_file write;
#line 94
allow adbd init:unix_stream_socket connectto;
#line 94
#line 94
allow adbd shell_prop:property_service set;
#line 94
#line 94
allow adbd shell_prop:file { getattr open read map };
#line 94
#line 94
#line 95
#line 95
allow adbd property_socket:sock_file write;
#line 95
allow adbd init:unix_stream_socket connectto;
#line 95
#line 95
allow adbd powerctl_prop:property_service set;
#line 95
#line 95
allow adbd powerctl_prop:file { getattr open read map };
#line 95
#line 95
#line 96
allow adbd ffs_config_prop:file { getattr open read map };
#line 96
#line 97
#line 97
allow adbd property_socket:sock_file write;
#line 97
allow adbd init:unix_stream_socket connectto;
#line 97
#line 97
allow adbd ffs_control_prop:property_service set;
#line 97
#line 97
allow adbd ffs_control_prop:file { getattr open read map };
#line 97
#line 97
# Set service.adb.tcp.port, service.adb.tls.port, persist.adb.wifi.* properties
#line 100
#line 100
allow adbd property_socket:sock_file write;
#line 100
allow adbd init:unix_stream_socket connectto;
#line 100
#line 100
allow adbd adbd_prop:property_service set;
#line 100
#line 100
allow adbd adbd_prop:file { getattr open read map };
#line 100
#line 100
#line 101
#line 101
allow adbd property_socket:sock_file write;
#line 101
allow adbd init:unix_stream_socket connectto;
#line 101
#line 101
allow adbd adbd_config_prop:property_service set;
#line 101
#line 101
allow adbd adbd_config_prop:file { getattr open read map };
#line 101
#line 101
# Allow adbd start/stop mdnsd via ctl.start
#line 104
#line 104
allow adbd property_socket:sock_file write;
#line 104
allow adbd init:unix_stream_socket connectto;
#line 104
#line 104
allow adbd ctl_mdnsd_prop:property_service set;
#line 104
#line 104
allow adbd ctl_mdnsd_prop:file { getattr open read map };
#line 104
#line 104
# Access device logging gating property
#line 107
allow adbd device_logging_prop:file { getattr open read map };
#line 107
# Read device's serial number from system properties
#line 110
allow adbd serialno_prop:file { getattr open read map };
#line 110
# Read whether or not Test Harness Mode is enabled
#line 113
allow adbd test_harness_prop:file { getattr open read map };
#line 113
# Read persist.adb.tls_server.enable property
#line 116
allow adbd system_adbd_prop:file { getattr open read map };
#line 116
# Read device's overlayfs related properties and files
#line 122
# Run /system/bin/bu
allow adbd system_file:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Perform binder IPC to surfaceflinger (screencap)
# XXX Run screencap in a separate domain?
#line 129
# Call the servicemanager and transfer references to it.
#line 129
allow adbd servicemanager:binder { call transfer };
#line 129
# Allow servicemanager to send out callbacks
#line 129
allow servicemanager adbd:binder { call transfer };
#line 129
# servicemanager performs getpidcon on clients.
#line 129
allow servicemanager adbd:dir search;
#line 129
allow servicemanager adbd:file { read open };
#line 129
allow servicemanager adbd:process getattr;
#line 129
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 129
# all domains in domain.te.
#line 129
#line 130
# Call the server domain and optionally transfer references to it.
#line 130
allow adbd surfaceflinger:binder { call transfer };
#line 130
# Allow the serverdomain to transfer references to the client on the reply.
#line 130
allow surfaceflinger adbd:binder transfer;
#line 130
# Receive and use open files from the server.
#line 130
allow adbd surfaceflinger:fd use;
#line 130
#line 131
# Call the server domain and optionally transfer references to it.
#line 131
allow adbd gpuservice:binder { call transfer };
#line 131
# Allow the serverdomain to transfer references to the client on the reply.
#line 131
allow gpuservice adbd:binder transfer;
#line 131
# Receive and use open files from the server.
#line 131
allow adbd gpuservice:fd use;
#line 131
# b/13188914
allow adbd gpu_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow adbd gpu_device:dir { open getattr read search ioctl lock watch watch_reads };
allow adbd ion_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 136
allow adbd system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 136
allow adbd system_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 136
# Needed for various screenshots
#line 139
typeattribute adbd halclientdomain;
#line 139
typeattribute adbd hal_graphics_allocator_client;
#line 139
#line 139
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 139
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 139
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 139
#line 139
typeattribute adbd hal_graphics_allocator;
#line 139
# Find passthrough HAL implementations
#line 139
allow hal_graphics_allocator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 139
allow hal_graphics_allocator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 139
allow hal_graphics_allocator vendor_file:file { read open getattr execute map };
#line 139
#line 139
# Read /data/misc/adb/adb_keys.
allow adbd adb_keys_file:dir search;
allow adbd adb_keys_file:file { getattr open read ioctl lock map watch watch_reads };
#line 151
# ndk-gdb invokes adb forward to forward the gdbserver socket.
allow adbd app_data_file:dir search;
allow adbd app_data_file:sock_file write;
allow adbd appdomain:unix_stream_socket connectto;
# ndk-gdb invokes adb pull of app_process, linker, and libc.so.
allow adbd zygote_exec:file { getattr open read ioctl lock map watch watch_reads };
allow adbd system_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow pulling the SELinux policy for CTS purposes
allow adbd selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
allow adbd selinuxfs:file { getattr open read ioctl lock map watch watch_reads };
allow adbd kernel:security read_policy;
allow adbd service_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
allow adbd file_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
allow adbd seapp_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
allow adbd property_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
allow adbd sepolicy_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow pulling config.gz for CTS purposes
allow adbd config_gz:file { getattr open read ioctl lock map watch watch_reads };
# For CTS listening ports test.
allow adbd proc_net_tcp_udp:file { getattr open read ioctl lock map watch watch_reads };
allow adbd gpu_service:service_manager find;
allow adbd surfaceflinger_service:service_manager find;
allow adbd bootchart_data_file:dir search;
allow adbd bootchart_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow access to external storage; we have several visible mount points under /storage
# and symlinks to primary storage at places like /storage/sdcard0 and /mnt/user/0/primary
allow adbd storage_file:dir { open getattr read search ioctl lock watch watch_reads };
allow adbd storage_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
allow adbd mnt_user_file:dir { open getattr read search ioctl lock watch watch_reads };
allow adbd mnt_user_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
# Access to /data/media.
# This should be removed if sdcardfs is modified to alter the secontext for its
# accesses to the underlying FS.
allow adbd media_rw_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow adbd media_rw_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
#line 196
allow adbd apk_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 196
allow adbd apk_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 196
allow adbd rootfs:dir { open getattr read search ioctl lock watch watch_reads };
# Allow killing child "perfetto" binary processes, which auto-transition to
# their own domain. Allows propagating termination of "adb shell perfetto ..."
# invocations.
allow adbd perfetto:process signal;
# Allow to pull Perfetto traces.
allow adbd perfetto_traces_data_file:file { getattr open read ioctl lock map watch watch_reads };
allow adbd perfetto_traces_data_file:dir { open getattr read search ioctl lock watch watch_reads };
# Allow to push and manage configs in /data/misc/perfetto-configs.
allow adbd perfetto_configs_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow adbd perfetto_configs_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Connect to shell and use a socket transferred from it.
# Used for e.g. abb.
allow adbd shell:unix_stream_socket { read write shutdown };
allow adbd shell:fd use;
# Allow pull /vendor/apex files for CTS tests
allow adbd vendor_apex_file:dir search;
allow adbd vendor_apex_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow adb pull of updated apex files in /data/apex/active.
allow adbd apex_data_file:dir search;
allow adbd staging_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow adbd to pull /apex/apex-info-list.xml for CTS tests.
allow adbd apex_info_file:file { getattr open read ioctl lock map watch watch_reads };
# allow reading tombstones. users can already use bugreports to get those.
allow adbd tombstone_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow adbd tombstone_data_file:file { getattr open read ioctl lock map watch watch_reads };
###
### Neverallow rules
###
# No transitions from adbd to non-shell, non-crash_dump domains. adbd only ever
# transitions to the shell domain (except when it crashes). In particular, we
# never want to see a transition from adbd to su (aka "adb root")
neverallow adbd { domain -crash_dump -shell }:process transition;
neverallow adbd { domain }:process dyntransition;
#line 5 "system/sepolicy/private/aidl_lazy_test_server.te"
#line 1 "system/sepolicy/private/apex_test_prepostinstall.te"
# APEX pre- & post-install test.
#
# Allow to run pre- and post-install hooks for APEX test modules
# in debuggable builds.
type apex_test_prepostinstall, domain, coredomain;
type apex_test_prepostinstall_exec, system_file_type, exec_type, file_type;
#line 20
#line 1 "system/sepolicy/private/apexd.te"
typeattribute apexd coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init apexd_exec:file { getattr open read execute map };
#line 3
allow init apexd:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow apexd apexd_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init apexd:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init apexd:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init apexd_exec:process apexd;
#line 3
#line 3
# Allow creating, reading and writing of APEX files/dirs in the APEX data dir
allow apexd apex_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow apexd apex_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow relabeling file created in /data/apex/decompressed
allow apexd apex_data_file:file relabelfrom;
# Allow creating, reading and writing of APEX files/dirs in the APEX metadata dir
allow apexd metadata_file:dir search;
allow apexd apex_metadata_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow apexd apex_metadata_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow reserving space on /data/apex/ota_reserved for apex decompression
allow apexd apex_ota_reserved_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow apexd apex_ota_reserved_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow apexd to create files and directories for snapshots of apex data
allow apexd apex_data_file_type:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } relabelto };
allow apexd apex_data_file_type:file { { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } } relabelto };
allow apexd apex_module_data_file:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } relabelfrom };
allow apexd apex_module_data_file:file { { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } } relabelfrom };
allow apexd apex_rollback_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow apexd apex_rollback_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow apexd to read /data/misc_de and the directories under it, in order to
# snapshot and restore apex data for all users.
allow apexd {
system_userdir_file
system_data_file
}:dir { open getattr read search ioctl lock watch watch_reads };
# allow apexd to create loop devices with /dev/loop-control
allow apexd loop_control_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# allow apexd to access loop devices
allow apexd loop_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allowxperm apexd loop_device:blk_file ioctl {
0x00004c05
0x00004c04
0x00004c00
0x00004c09
0x00004c08
0x00004c01
0x00001261
0x00004c0a
};
# Allow apexd to access /dev/block
allow apexd dev_type:dir { open getattr read search ioctl lock watch watch_reads };
allow apexd dev_type:blk_file getattr;
#allow apexd to access virtual disks
allow apexd vd_device:blk_file { getattr open read ioctl lock map watch watch_reads };
# allow apexd to access /dev/block/dm-* (device-mapper entries)
allow apexd dm_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow apexd dm_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# sys_admin is required to access the device-mapper and mount
# dac_override, chown, and fowner are needed for snapshot and restore
allow apexd self:{ capability cap_userns } { sys_admin chown dac_override dac_read_search fowner };
# Note: fsetid is deliberately not included above. fsetid checks are
# triggered by chmod on a directory or file owned by a group other
# than one of the groups assigned to the current process to see if
# the setgid bit should be cleared, regardless of whether the setgid
# bit was even set. We do not appear to truly need this capability
# for apexd to operate.
dontaudit apexd self:{ capability cap_userns } fsetid;
# allow apexd to create a mount point in /apex
allow apexd apex_mnt_dir:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
# allow apexd to mount in /apex
allow apexd apex_mnt_dir:filesystem { mount unmount };
allow apexd apex_mnt_dir:dir mounton;
# allow apexd to create symlinks in /apex
allow apexd apex_mnt_dir:lnk_file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# allow apexd to create /apex/apex-info-list.xml and relabel to apex_info_file
allow apexd apex_mnt_dir:file { { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } } relabelfrom mounton };
allow apexd apex_info_file:file relabelto;
# apexd needs to update /apex/apex-info-list.xml after non-staged APEX update.
allow apexd apex_info_file:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# allow apexd to unlink apex files in /data/apex/active
# note that apexd won't be able to unlink files in /data/app-staging/session_XXXX,
# because it doesn't have write permission for staging_data_file object.
allow apexd staging_data_file:file unlink;
# allow apexd to read files from /data/app-staging and hardlink them to /data/apex.
allow apexd staging_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow apexd staging_data_file:file { { getattr open read ioctl lock map watch watch_reads } link };
# # Allow relabeling file created in /data/apex/decompressed
allow apexd staging_data_file:file relabelto;
# allow apexd to read files from /vendor/apex
#line 97
allow apexd vendor_apex_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 97
allow apexd vendor_apex_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 97
#line 98
allow apexd vendor_apex_metadata_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 98
allow apexd vendor_apex_metadata_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 98
# Unmount and mount filesystems
allow apexd labeledfs:filesystem { mount unmount };
# /sys directory tree traversal
allow apexd sysfs_type:dir search;
# Access to /sys/class/block
allow apexd sysfs_type:dir { open getattr read search ioctl lock watch watch_reads };
allow apexd sysfs_type:file { getattr open read ioctl lock map watch watch_reads };
# Configure read-ahead of dm-verity and loop devices
# for dm-X
allow apexd sysfs_dm:dir { open getattr read search ioctl lock watch watch_reads };
allow apexd sysfs_dm:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# for loopX
allow apexd sysfs_loop:dir { open getattr read search ioctl lock watch watch_reads };
allow apexd sysfs_loop:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Allow apexd to log to the kernel.
allow apexd kmsg_device:chr_file { open append write lock map };
# Allow apexd to reboot device. Required for rollbacks of apexes that are
# not covered by rollback manager.
#line 121
#line 121
allow apexd property_socket:sock_file write;
#line 121
allow apexd init:unix_stream_socket connectto;
#line 121
#line 121
allow apexd powerctl_prop:property_service set;
#line 121
#line 121
allow apexd powerctl_prop:file { getattr open read map };
#line 121
#line 121
# Allow apexd to stop itself
#line 124
#line 124
allow apexd property_socket:sock_file write;
#line 124
allow apexd init:unix_stream_socket connectto;
#line 124
#line 124
allow apexd ctl_apexd_prop:property_service set;
#line 124
#line 124
allow apexd ctl_apexd_prop:file { getattr open read map };
#line 124
#line 124
# Allow apexd to send control messages to load/unload apex from init
#line 127
#line 127
allow apexd property_socket:sock_file write;
#line 127
allow apexd init:unix_stream_socket connectto;
#line 127
#line 127
allow apexd ctl_apex_load_prop:property_service set;
#line 127
#line 127
allow apexd ctl_apex_load_prop:file { getattr open read map };
#line 127
#line 127
# Find the vold service, and call into vold to manage FS checkpoints
allow apexd vold_service:service_manager find;
#line 131
# Call the server domain and optionally transfer references to it.
#line 131
allow apexd vold:binder { call transfer };
#line 131
# Allow the serverdomain to transfer references to the client on the reply.
#line 131
allow vold apexd:binder transfer;
#line 131
# Receive and use open files from the server.
#line 131
allow apexd vold:fd use;
#line 131
# apexd is using bootstrap bionic
#line 134
allow apexd system_bootstrap_lib_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 134
allow apexd system_bootstrap_lib_file:file { execute read open getattr map };
#line 134
# Allow apexd to be invoked with logwrapper from init during userspace reboot.
allow apexd devpts:chr_file { read write };
# Allow apexd to create pts files via logwrap_fork_exec for its own use, to pass to
# other processes
#line 141
# Each domain gets a unique devpts type.
#line 141
type apexd_devpts, fs_type;
#line 141
# Label the pty with the unique type when created.
#line 141
type_transition apexd devpts:chr_file apexd_devpts;
#line 141
# Allow use of the pty after creation.
#line 141
allow apexd apexd_devpts:chr_file { open getattr read write ioctl };
#line 141
allowxperm apexd apexd_devpts:chr_file ioctl {
#line 141
0x00005411 0x00005451 0x00005450 0x00005401 0x00005402 0x00005403 0x00005404 0x00005413 0x00005414
#line 141
0x0000540e 0x0000540b 0x00005410 0x0000540f
#line 141
};
#line 141
# TIOCSTI is only ever used for exploits. Block it.
#line 141
# b/33073072, b/7530569
#line 141
# http://www.openwall.com/lists/oss-security/2016/09/26/14
#line 141
neverallowxperm * apexd_devpts:chr_file ioctl 0x00005412;
#line 141
# Note: devpts:dir search and ptmx_device:chr_file rw_file_perms
#line 141
# allowed to everyone via domain.te.
#line 141
# Allow apexd to read file contexts when performing restorecon of snapshots.
allow apexd file_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow apexd to execute toybox for snapshot & restore
allow apexd toolbox_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Allow apexd to release compressed blocks in case /data is f2fs-compressed fs.
allowxperm apexd staging_data_file:file ioctl {
0x80086601
0xf512
};
# Allow apexd to read ro.cold_boot_done prop.
# apexd uses it to decide whether it needs to keep retrying polling for loop device.
#line 157
allow apexd cold_boot_done_prop:file { getattr open read map };
#line 157
# Allow apexd to read per-device configuration properties.
#line 160
allow apexd apexd_config_prop:file { getattr open read map };
#line 160
# Allow apexd to read apex selection properties.
# These are used to choose between multi-installed APEXes at activation time.
#line 164
allow apexd apexd_select_prop:file { getattr open read map };
#line 164
#
# Allow apexd to read apexd_payload_metadata_prop
#line 167
allow apexd apexd_payload_metadata_prop:file { getattr open read map };
#line 167
neverallow { domain -apexd -init } apex_data_file:dir { add_name create link relabelfrom remove_name rename reparent rmdir setattr write };
neverallow { domain -apexd -init } apex_metadata_file:dir { add_name create link relabelfrom remove_name rename reparent rmdir setattr write };
neverallow { domain -apexd -init -kernel } apex_data_file:file { append create link unlink relabelfrom rename setattr write };
neverallow { domain -apexd -init -kernel } apex_metadata_file:file { append create link unlink relabelfrom rename setattr write };
neverallow { domain -apexd } apex_mnt_dir:lnk_file { append create link unlink relabelfrom rename setattr write };
neverallow { domain -apexd -init -vold_prepare_subdirs } apex_module_data_file:dir { add_name create link relabelfrom remove_name rename reparent rmdir setattr write };
neverallow { domain -apexd -init -vold_prepare_subdirs } apex_module_data_file:file { append create link unlink relabelfrom rename setattr write };
neverallow { domain -apexd -init -vold_prepare_subdirs } apex_rollback_data_file:dir { add_name create link relabelfrom remove_name rename reparent rmdir setattr write };
neverallow { domain -apexd -init -vold_prepare_subdirs } apex_rollback_data_file:file { append create link unlink relabelfrom rename setattr write };
# only apexd can set apexd sysprop
#line 182
#line 182
allow apexd property_socket:sock_file write;
#line 182
allow apexd init:unix_stream_socket connectto;
#line 182
#line 182
allow apexd apexd_prop:property_service set;
#line 182
#line 182
allow apexd apexd_prop:file { getattr open read map };
#line 182
#line 182
neverallow { domain -apexd -init } apexd_prop:property_service set;
# only apexd can write apex-info-list.xml
neverallow { domain -apexd } apex_info_file:file { append create link unlink relabelfrom rename setattr write };
# Only apexd and init should be allowed to manage /apex mounts
# A note on otapreopt_chroot. It used to mount APEXes during postainstall stage of A/B OTAs,
# but starting from S it just calls into apexd to prepare /apex for otapreoprt. Once the sepolicies
# around otapreopt_chroot are cleaned up we should be able to remove it from the lists below.
neverallow { domain -apexd -init -otapreopt_chroot } apex_mnt_dir:filesystem { mount unmount };
neverallow { domain -apexd -init -otapreopt_chroot } apex_mnt_dir:dir { mounton };
# Allow for use in postinstall
allow apexd otapreopt_chroot:fd use;
allow apexd postinstall_apex_mnt_dir:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } mounton };
allow apexd postinstall_apex_mnt_dir:file { { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } } relabelfrom };
allow apexd postinstall_apex_mnt_dir:lnk_file create;
allow apexd proc_filesystems:file { getattr open read ioctl lock map watch watch_reads };
# Allow calling derive_classpath to gather BCP information for staged sessions
#line 203
# Allow the necessary permissions.
#line 203
#line 203
# Old domain may exec the file and transition to the new domain.
#line 203
allow apexd derive_classpath_exec:file { getattr open read execute map };
#line 203
allow apexd apexd_derive_classpath:process transition;
#line 203
# New domain is entered by executing the file.
#line 203
allow apexd_derive_classpath derive_classpath_exec:file { entrypoint open read execute getattr map };
#line 203
# New domain can send SIGCHLD to its caller.
#line 203
allow apexd_derive_classpath apexd:process sigchld;
#line 203
# Enable AT_SECURE, i.e. libc secure mode.
#line 203
dontaudit apexd apexd_derive_classpath:process noatsecure;
#line 203
# XXX dontaudit candidate but requires further study.
#line 203
allow apexd apexd_derive_classpath:process { siginh rlimitinh };
#line 203
#line 203
# Make the transition occur by default.
#line 203
type_transition apexd derive_classpath_exec:process apexd_derive_classpath;
#line 203
;
# Allow set apex ready property
#line 206
#line 206
allow apexd property_socket:sock_file write;
#line 206
allow apexd init:unix_stream_socket connectto;
#line 206
#line 206
allow apexd apex_ready_prop:property_service set;
#line 206
#line 206
allow apexd apex_ready_prop:file { getattr open read map };
#line 206
#line 206
#line 1 "system/sepolicy/private/apexd_derive_classpath.te"
# Exclusive domain for apexd calling into derive_classpath binary
type apexd_derive_classpath, domain, coredomain;
# Allow the binary to write into output file at location /apex/derive_classpath_temp
allow apexd_derive_classpath apexd:fd use;
allow apexd_derive_classpath apex_mnt_dir:file { write open };
# Allow the binary to log using logwrap
allow apexd_derive_classpath apexd_devpts:chr_file { read write };
#line 1 "system/sepolicy/private/app.te"
# /proc/net access.
# TODO(b/9496886) Audit access for removal.
# proc_net access for the negated domains below is granted (or not) in their
# individual .te files.
#line 5
allow {
#line 5
appdomain
#line 5
-ephemeral_app
#line 5
-isolated_app_all
#line 5
-platform_app
#line 5
-priv_app
#line 5
-shell
#line 5
-sdk_sandbox_all
#line 5
-system_app
#line 5
-untrusted_app_all
#line 5
} proc_net_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 5
allow {
#line 5
appdomain
#line 5
-ephemeral_app
#line 5
-isolated_app_all
#line 5
-platform_app
#line 5
-priv_app
#line 5
-shell
#line 5
-sdk_sandbox_all
#line 5
-system_app
#line 5
-untrusted_app_all
#line 5
} proc_net_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 15
# audit access for all these non-core app domains.
#line 30
# Allow apps to read the Test Harness Mode property. This property is used in
# the implementation of ActivityManager.isDeviceInTestHarnessMode()
#line 34
allow appdomain test_harness_prop:file { getattr open read map };
#line 34
#line 36
allow appdomain boot_status_prop:file { getattr open read map };
#line 36
#line 37
allow appdomain dalvik_config_prop_type:file { getattr open read map };
#line 37
#line 38
allow appdomain media_config_prop:file { getattr open read map };
#line 38
#line 39
allow appdomain packagemanager_config_prop:file { getattr open read map };
#line 39
#line 40
allow appdomain radio_control_prop:file { getattr open read map };
#line 40
#line 41
allow appdomain surfaceflinger_color_prop:file { getattr open read map };
#line 41
#line 42
allow appdomain systemsound_config_prop:file { getattr open read map };
#line 42
#line 43
allow appdomain telephony_config_prop:file { getattr open read map };
#line 43
#line 44
allow appdomain userspace_reboot_config_prop:file { getattr open read map };
#line 44
#line 45
allow appdomain vold_config_prop:file { getattr open read map };
#line 45
#line 46
allow appdomain adbd_config_prop:file { getattr open read map };
#line 46
#line 47
allow appdomain dck_prop:file { getattr open read map };
#line 47
#line 48
allow appdomain persist_wm_debug_prop:file { getattr open read map };
#line 48
#line 49
allow appdomain persist_sysui_builder_extras_prop:file { getattr open read map };
#line 49
#line 50
allow appdomain persist_sysui_ranking_update_prop:file { getattr open read map };
#line 50
# Allow the heap dump ART plugin to the count of sessions waiting for OOME
#line 53
allow appdomain traced_oome_heap_session_count_prop:file { getattr open read map };
#line 53
# Allow to read ro.vendor.camera.extensions.enabled
#line 56
allow appdomain camera2_extensions_prop:file { getattr open read map };
#line 56
# Allow to ro.camerax.extensions.enabled
#line 59
allow appdomain camerax_extensions_prop:file { getattr open read map };
#line 59
# Prevent apps from causing presubmit failures.
# Apps can cause selinux denials by accessing CE storage
# and/or external storage. In either case, the selinux denial is
# not the cause of the failure, but just a symptom that
# storage isn't ready. Many apps handle the failure appropriately.
#
# Apps cannot access external storage before it becomes available.
dontaudit appdomain storage_stub_file:dir getattr;
# Attempts to write to system_data_file is generally a sign
# that apps are attempting to access encrypted storage before
# the ACTION_USER_UNLOCKED intent is delivered. Apps are not
# allowed to write to CE storage before it's available.
# Attempting to do so will be blocked by both selinux and unix
# permissions.
dontaudit appdomain system_data_file:dir write;
# Apps should not be reading vendor-defined properties.
dontaudit appdomain vendor_default_prop:file read;
# Access to /mnt/media_rw/<vol> (limited by DAC to apps with external_storage gid)
allow { appdomain -sdk_sandbox_all } mnt_media_rw_file:dir search;
# allow apps to use UDP sockets provided by the system server but not
# modify them other than to connect
allow appdomain system_server:udp_socket {
connect getattr read recvfrom sendto write getopt setopt };
neverallow appdomain system_server:udp_socket {
accept append bind create ioctl listen lock name_bind
relabelfrom relabelto setattr shutdown };
# Transition to a non-app domain.
# Exception for the shell and su domains, can transition to runas, etc.
# Exception for crash_dump to allow for app crash reporting.
# Exception for renderscript binaries (/system/bin/bcc, /system/bin/ld.mc)
# to allow renderscript to create privileged executable files.
# Exception for virtualizationmanager to allow running VMs as child processes.
neverallow { appdomain -shell }
{ domain -appdomain -crash_dump -rs -virtualizationmanager }:process { transition };
neverallow { appdomain -shell }
{ domain -appdomain }:process { dyntransition };
# Don't allow regular apps access to storage configuration properties.
neverallow { appdomain -mediaprovider_app } storage_config_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Don't allow apps reading /system/etc/font_fallback.xml
dontaudit appdomain system_font_fallback_file:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow appdomain system_font_fallback_file:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Allow to read sendbug.preferred.domain
#line 110
allow appdomain sendbug_config_prop:file { getattr open read map };
#line 110
# Allow to read graphics related properties.
#line 113
allow appdomain graphics_config_prop:file { getattr open read map };
#line 113
# Allow to read persist.config.calibration_fac
#line 116
allow appdomain camera_calibration_prop:file { getattr open read map };
#line 116
# Allow to read db.log.detailed, db.log.slow_query_threshold*
#line 119
allow appdomain sqlite_log_prop:file { getattr open read map };
#line 119
# Allow to read system_user_mode_emulation_prop, which is used by UserManager.java
# Allow font file read by apps.
allow appdomain font_data_file:file { getattr open read ioctl lock map watch watch_reads };
allow appdomain font_data_file:dir { open getattr read search ioctl lock watch watch_reads };
# Enter /data/misc/apexdata/
allow appdomain apex_module_data_file:dir search;
# Read /data/misc/apexdata/com.android.art, execute signed AOT artifacts.
allow appdomain apex_art_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow appdomain apex_art_data_file:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Allow access to tombstones if an fd to one is given to you.
# An app cannot open the tombstone itself because it lacks `open`.
allow appdomain tombstone_data_file:file { getattr read };
neverallow { appdomain -shell } tombstone_data_file:file ~{ getattr read };
# Execute the shell or other system executables.
allow { appdomain -ephemeral_app -sdk_sandbox_all } shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow { appdomain -ephemeral_app -sdk_sandbox_all } toolbox_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow { appdomain -ephemeral_app -sdk_sandbox_all } vendor_file:file { getattr execute execute_no_trans map };
# Allow apps access to /vendor/app except for privileged
# apps which cannot be in /vendor.
#line 146
allow { appdomain -ephemeral_app -sdk_sandbox_all } vendor_app_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 146
allow { appdomain -ephemeral_app -sdk_sandbox_all } vendor_app_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 146
allow { appdomain -ephemeral_app -sdk_sandbox_all } vendor_app_file:file execute;
# Allow apps to read microdroid related files in vendor partition for CTS purpose.
#line 150
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } vendor_microdroid_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 150
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } vendor_microdroid_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 150
# Perform binder IPC to sdk sandbox.
#line 153
# Call the server domain and optionally transfer references to it.
#line 153
allow appdomain sdk_sandbox_all:binder { call transfer };
#line 153
# Allow the serverdomain to transfer references to the client on the reply.
#line 153
allow sdk_sandbox_all appdomain:binder transfer;
#line 153
# Receive and use open files from the server.
#line 153
allow appdomain sdk_sandbox_all:fd use;
#line 153
# Allow apps to communicate via binder with virtual camera service.
#line 156
# Call the server domain and optionally transfer references to it.
#line 156
allow appdomain virtual_camera:binder { call transfer };
#line 156
# Allow the serverdomain to transfer references to the client on the reply.
#line 156
allow virtual_camera appdomain:binder transfer;
#line 156
# Receive and use open files from the server.
#line 156
allow appdomain virtual_camera:fd use;
#line 156
# Allow access to external storage; we have several visible mount points under /storage
# and symlinks to primary storage at places like /storage/sdcard0 and /mnt/user/0/primary
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } storage_file:dir { open getattr read search ioctl lock watch watch_reads };
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } storage_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } mnt_user_file:dir { open getattr read search ioctl lock watch watch_reads };
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } mnt_user_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
# Read/write visible storage
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } { sdcard_type fuse }:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } { sdcard_type fuse }:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# This should be removed if sdcardfs is modified to alter the secontext for its
# accesses to the underlying FS.
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } media_rw_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } media_rw_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow apps to use the USB Accessory interface.
# http://developer.android.com/guide/topics/connectivity/usb/accessory.html
#
# USB devices are first opened by the system server (USBDeviceManagerService)
# and the file descriptor is passed to the right Activity via binder.
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } usb_device:chr_file { read write getattr ioctl };
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } usbaccessory_device:chr_file { read write getattr };
#logd access
#line 182
# Group AID_LOG checked by filesystem & logd
#line 182
# to permit control commands
#line 182
#line 182
allow { appdomain -ephemeral_app -sdk_sandbox_all } logd_socket:sock_file write;
#line 182
allow { appdomain -ephemeral_app -sdk_sandbox_all } logd:unix_stream_socket connectto;
#line 182
#line 182
# application inherit logd write socket (urge is to deprecate this long term)
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } keystore:keystore2_key { delete use get_info rebind update };
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } keystore_maintenance_service:service_manager find;
#line 189
allow keystore { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all }:dir search;
#line 189
allow keystore { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all }:file { read open };
#line 189
allow keystore { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all }:process getattr;
#line 189
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } apc_service:service_manager find;
#line 189
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } keystore_service:service_manager find;
#line 189
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } legacykeystore_service:service_manager find;
#line 189
#line 189
# Call the server domain and optionally transfer references to it.
#line 189
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } keystore:binder { call transfer };
#line 189
# Allow the serverdomain to transfer references to the client on the reply.
#line 189
allow keystore { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all }:binder transfer;
#line 189
# Receive and use open files from the server.
#line 189
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } keystore:fd use;
#line 189
#line 189
#line 189
# Call the server domain and optionally transfer references to it.
#line 189
allow keystore { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all }:binder { call transfer };
#line 189
# Allow the serverdomain to transfer references to the client on the reply.
#line 189
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } keystore:binder transfer;
#line 189
# Receive and use open files from the server.
#line 189
allow keystore { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all }:fd use;
#line 189
#line 189
#line 191
allow credstore { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all }:dir search;
#line 191
allow credstore { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all }:file { read open };
#line 191
allow credstore { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all }:process getattr;
#line 191
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } credstore_service:service_manager find;
#line 191
#line 191
# Call the server domain and optionally transfer references to it.
#line 191
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } credstore:binder { call transfer };
#line 191
# Allow the serverdomain to transfer references to the client on the reply.
#line 191
allow credstore { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all }:binder transfer;
#line 191
# Receive and use open files from the server.
#line 191
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } credstore:fd use;
#line 191
#line 191
#line 191
# Call the server domain and optionally transfer references to it.
#line 191
allow credstore { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all }:binder { call transfer };
#line 191
# Allow the serverdomain to transfer references to the client on the reply.
#line 191
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } credstore:binder transfer;
#line 191
# Receive and use open files from the server.
#line 191
allow credstore { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all }:fd use;
#line 191
#line 191
# For app fuse.
#line 194
#line 194
# Allow client to open the service endpoint file.
#line 194
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } pdx_display_client_endpoint_dir_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 194
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } pdx_display_client_endpoint_socket_type:sock_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 194
# Allow the client to connect to endpoint socket.
#line 194
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } pdx_display_client_endpoint_socket_type:unix_stream_socket { connectto read write shutdown };
#line 194
#line 194
#line 194
# Allow the client to use the PDX channel socket.
#line 194
# Not using macro like "rw_socket_perms_no_ioctl" because it provides more rights
#line 194
# than we need (e.g. we don"t need "bind" or "connect").
#line 194
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } pdx_display_client_channel_socket_type:unix_stream_socket { read getattr write setattr lock append getopt setopt shutdown };
#line 194
# Client needs to use an channel event fd from the server.
#line 194
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } pdx_display_client_server_type:fd use;
#line 194
# Servers may receive sync fences, gralloc buffers, etc, from clients.
#line 194
# This could be tightened on a per-server basis, but keeping track of service
#line 194
# clients is error prone.
#line 194
allow pdx_display_client_server_type { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all }:fd use;
#line 194
#line 194
#line 195
#line 195
# Allow client to open the service endpoint file.
#line 195
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } pdx_display_manager_endpoint_dir_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 195
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } pdx_display_manager_endpoint_socket_type:sock_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 195
# Allow the client to connect to endpoint socket.
#line 195
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } pdx_display_manager_endpoint_socket_type:unix_stream_socket { connectto read write shutdown };
#line 195
#line 195
#line 195
# Allow the client to use the PDX channel socket.
#line 195
# Not using macro like "rw_socket_perms_no_ioctl" because it provides more rights
#line 195
# than we need (e.g. we don"t need "bind" or "connect").
#line 195
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } pdx_display_manager_channel_socket_type:unix_stream_socket { read getattr write setattr lock append getopt setopt shutdown };
#line 195
# Client needs to use an channel event fd from the server.
#line 195
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } pdx_display_manager_server_type:fd use;
#line 195
# Servers may receive sync fences, gralloc buffers, etc, from clients.
#line 195
# This could be tightened on a per-server basis, but keeping track of service
#line 195
# clients is error prone.
#line 195
allow pdx_display_manager_server_type { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all }:fd use;
#line 195
#line 195
#line 196
#line 196
# Allow client to open the service endpoint file.
#line 196
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } pdx_display_vsync_endpoint_dir_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 196
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } pdx_display_vsync_endpoint_socket_type:sock_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 196
# Allow the client to connect to endpoint socket.
#line 196
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } pdx_display_vsync_endpoint_socket_type:unix_stream_socket { connectto read write shutdown };
#line 196
#line 196
#line 196
# Allow the client to use the PDX channel socket.
#line 196
# Not using macro like "rw_socket_perms_no_ioctl" because it provides more rights
#line 196
# than we need (e.g. we don"t need "bind" or "connect").
#line 196
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } pdx_display_vsync_channel_socket_type:unix_stream_socket { read getattr write setattr lock append getopt setopt shutdown };
#line 196
# Client needs to use an channel event fd from the server.
#line 196
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } pdx_display_vsync_server_type:fd use;
#line 196
# Servers may receive sync fences, gralloc buffers, etc, from clients.
#line 196
# This could be tightened on a per-server basis, but keeping track of service
#line 196
# clients is error prone.
#line 196
allow pdx_display_vsync_server_type { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all }:fd use;
#line 196
#line 196
#line 197
#line 197
# Allow client to open the service endpoint file.
#line 197
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } pdx_performance_client_endpoint_dir_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 197
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } pdx_performance_client_endpoint_socket_type:sock_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 197
# Allow the client to connect to endpoint socket.
#line 197
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } pdx_performance_client_endpoint_socket_type:unix_stream_socket { connectto read write shutdown };
#line 197
#line 197
#line 197
# Allow the client to use the PDX channel socket.
#line 197
# Not using macro like "rw_socket_perms_no_ioctl" because it provides more rights
#line 197
# than we need (e.g. we don"t need "bind" or "connect").
#line 197
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } pdx_performance_client_channel_socket_type:unix_stream_socket { read getattr write setattr lock append getopt setopt shutdown };
#line 197
# Client needs to use an channel event fd from the server.
#line 197
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } pdx_performance_client_server_type:fd use;
#line 197
# Servers may receive sync fences, gralloc buffers, etc, from clients.
#line 197
# This could be tightened on a per-server basis, but keeping track of service
#line 197
# clients is error prone.
#line 197
allow pdx_performance_client_server_type { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all }:fd use;
#line 197
#line 197
# Apps do not directly open the IPC socket for bufferhubd.
#line 199
# Allow the client to use the PDX channel socket.
#line 199
# Not using macro like "rw_socket_perms_no_ioctl" because it provides more rights
#line 199
# than we need (e.g. we don"t need "bind" or "connect").
#line 199
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } pdx_bufferhub_client_channel_socket_type:unix_stream_socket { read getattr write setattr lock append getopt setopt shutdown };
#line 199
# Client needs to use an channel event fd from the server.
#line 199
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } pdx_bufferhub_client_server_type:fd use;
#line 199
# Servers may receive sync fences, gralloc buffers, etc, from clients.
#line 199
# This could be tightened on a per-server basis, but keeping track of service
#line 199
# clients is error prone.
#line 199
allow pdx_bufferhub_client_server_type { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all }:fd use;
#line 199
# Apps receive an open tun fd from the framework for
# device traffic. Do not allow untrusted app to directly open tun_device
allow { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } tun_device:chr_file { read write getattr append ioctl };
allowxperm { appdomain -isolated_app_all -ephemeral_app -sdk_sandbox_all } tun_device:chr_file ioctl 0x800454d2;
# WebView and other application-specific JIT compilers
allow appdomain self:process execmem;
allow appdomain { ashmem_device ashmem_libcutils_device }:chr_file execute;
# Receive and use open file descriptors inherited from zygote.
allow appdomain zygote:fd use;
# Receive and use open file descriptors inherited from app zygote.
allow appdomain app_zygote:fd use;
# gdbserver for ndk-gdb reads the zygote.
# valgrind needs mmap exec for zygote
allow appdomain zygote_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Notify zygote of death;
allow appdomain zygote:process sigchld;
# Read /data/dalvik-cache.
allow appdomain dalvikcache_data_file:dir { search getattr };
allow appdomain dalvikcache_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Read the /sdcard and /mnt/sdcard symlinks
allow { appdomain -isolated_app_all -sdk_sandbox_all } rootfs:lnk_file { getattr open read ioctl lock map watch watch_reads };
allow { appdomain -isolated_app_all -sdk_sandbox_all } tmpfs:lnk_file { getattr open read ioctl lock map watch watch_reads };
# Search /storage/emulated tmpfs mount.
allow { appdomain -sdk_sandbox_all } tmpfs:dir { open getattr read search ioctl lock watch watch_reads };
# Notify zygote of the wrapped process PID when using --invoke-with.
allow appdomain zygote:fifo_file write;
#line 243
# Notify shell and adbd of death when spawned via runas for ndk-gdb.
allow appdomain shell:process sigchld;
allow appdomain adbd:process sigchld;
# child shell or gdbserver pty access for runas.
allow appdomain devpts:chr_file { getattr read write ioctl };
# Use pipes and sockets provided by system_server via binder or local socket.
allow appdomain system_server:fd use;
allow appdomain system_server:fifo_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow appdomain system_server:unix_stream_socket { read write setopt getattr getopt shutdown };
allow appdomain system_server:tcp_socket { read write getattr getopt shutdown };
# For AppFuse.
allow appdomain vold:fd use;
# Communication with other apps via fifos
allow appdomain appdomain:fifo_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Communicate with surfaceflinger.
allow appdomain surfaceflinger:unix_stream_socket { read write setopt getattr getopt shutdown };
# App sandbox file accesses.
allow { appdomain -isolated_app_all -mlstrustedsubject -sdk_sandbox_all } { app_data_file privapp_data_file }:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow { appdomain -isolated_app_all -mlstrustedsubject -sdk_sandbox_all } { app_data_file privapp_data_file }:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allowxperm { appdomain -isolated_app_all -mlstrustedsubject -sdk_sandbox_all } { app_data_file privapp_data_file }:file ioctl 0x6686;
# Access via already open fds is ok even for mlstrustedsubject.
allow { appdomain -isolated_app_all -sdk_sandbox_all } { app_data_file privapp_data_file system_app_data_file }:file { getattr map read write };
# Access open fds from SDK sandbox
allow appdomain sdk_sandbox_data_file:file { getattr read };
# Traverse into expanded storage
allow appdomain mnt_expand_file:dir { open getattr read search ioctl lock watch watch_reads };
# Keychain and user-trusted credentials
#line 282
allow appdomain keychain_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 282
allow appdomain keychain_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 282
allow appdomain misc_user_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow appdomain misc_user_data_file:file { getattr open read ioctl lock map watch watch_reads };
# TextClassifier
#line 287
allow { appdomain -isolated_app_all } textclassifier_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 287
allow { appdomain -isolated_app_all } textclassifier_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 287
# Access to OEM provided data and apps
allow appdomain oemfs:dir { open getattr read search ioctl lock watch watch_reads };
allow appdomain oemfs:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow appdomain system_file:file { getattr execute execute_no_trans map };
# Renderscript needs the ability to read directories on /system
allow appdomain system_file:dir { open getattr read search ioctl lock watch watch_reads };
allow appdomain system_file:lnk_file { getattr open read };
# Renderscript specific permissions to open /system/vendor/lib64.
#line 299
allow appdomain vendor_file_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 299
allow appdomain vendor_file_type:lnk_file { getattr open read };
#line 302
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 304
#line 304
# For looking up Renderscript vendor drivers
#line 304
allow { appdomain -isolated_app_all } vendor_file:dir { open read };
#line 304
#line 304
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 307
# Allow apps access to /vendor/overlay
#line 310
allow appdomain vendor_overlay_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 310
allow appdomain vendor_overlay_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 310
# Allow apps access to /vendor/framework
# for vendor provided libraries.
#line 314
allow appdomain vendor_framework_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 314
allow appdomain vendor_framework_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 314
# Allow apps read / execute access to vendor public libraries.
allow appdomain {vendor_public_framework_file vendor_public_lib_file}:dir { open getattr read search ioctl lock watch watch_reads };
allow appdomain {vendor_public_framework_file vendor_public_lib_file}:file { execute read open getattr map };
# Read/write wallpaper file (opened by system).
allow appdomain wallpaper_file:file { getattr read write map };
# Read/write cached ringtones (opened by system).
allow appdomain ringtone_file:file { getattr read write map };
# Read ShortcutManager icon files (opened by system).
allow appdomain shortcut_manager_icons:file { getattr read map };
# Read icon file (opened by system).
allow appdomain icon_file:file { getattr read map };
# Old stack dumping scheme : append to a global trace file (/data/anr/traces.txt).
#
# TODO: All of these permissions except for anr_data_file:file append can be
# withdrawn once we've switched to the new stack dumping mechanism, see b/32064548
# and the rules below.
allow appdomain anr_data_file:dir search;
allow appdomain anr_data_file:file { open append };
# New stack dumping scheme : request an output FD from tombstoned via a unix
# domain socket.
#
# Allow apps to connect and write to the tombstoned java trace socket in
# order to dump their traces. Also allow them to append traces to pipes
# created by dumptrace. (Also see the rules below where they are given
# additional permissions to dumpstate pipes for other aspects of bug report
# creation).
#line 348
allow appdomain tombstoned_java_trace_socket:sock_file write;
#line 348
allow appdomain tombstoned:unix_stream_socket connectto;
#line 348
allow appdomain tombstoned:fd use;
allow appdomain dumpstate:fifo_file append;
allow appdomain incidentd:fifo_file append;
# Allow apps to send dump information to dumpstate
allow appdomain dumpstate:fd use;
allow appdomain dumpstate:unix_stream_socket { read write getopt getattr shutdown };
allow appdomain dumpstate:fifo_file { write getattr };
allow appdomain shell_data_file:file { write getattr };
# Allow apps to send dump information to incidentd
allow appdomain incidentd:fd use;
allow appdomain incidentd:fifo_file { write getattr };
# Allow apps to send information to statsd socket.
#line 364
allow appdomain statsdw_socket:sock_file write;
#line 364
allow appdomain statsd:unix_dgram_socket sendto;
#line 364
# Write profiles /data/misc/profiles
allow appdomain user_profile_root_file:dir search;
allow appdomain user_profile_data_file:dir { open search write add_name remove_name lock };
allow appdomain user_profile_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow writing performance tracing data into the perfetto traced daemon.
# Needed for java heap graph ART plugin (perfetto_hprof).
# The perfetto profiling daemon will check for the specific application's
# opt-in/opt-out.
#line 375
allow appdomain traced:fd use;
#line 375
allow appdomain traced_tmpfs:file { read write getattr map };
#line 375
#line 375
allow appdomain traced_producer_socket:sock_file write;
#line 375
allow appdomain traced:unix_stream_socket connectto;
#line 375
#line 375
#line 375
# Also allow the service to use the producer file descriptors. This is
#line 375
# necessary when the producer is creating the shared memory, as it will be
#line 375
# passed to the service as a file descriptor (obtained from memfd_create).
#line 375
allow traced appdomain:fd use;
#line 375
# Send heap dumps to system_server via an already open file descriptor
# % adb shell am set-watch-heap com.android.systemui 1048576
# % adb shell dumpsys procstats --start-testing
# debuggable builds only.
#line 383
# Grant GPU access to all processes started by Zygote.
# They need that to render the standard UI.
allow { appdomain -isolated_app_all } gpu_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow { appdomain -isolated_app_all } gpu_device:dir { open getattr read search ioctl lock watch watch_reads };
allow { appdomain -isolated_app_all } sysfs_gpu:file { getattr open read ioctl lock map watch watch_reads };
# Use the Binder.
#line 393
# Call the servicemanager and transfer references to it.
#line 393
allow appdomain servicemanager:binder { call transfer };
#line 393
# Allow servicemanager to send out callbacks
#line 393
allow servicemanager appdomain:binder { call transfer };
#line 393
# servicemanager performs getpidcon on clients.
#line 393
allow servicemanager appdomain:dir search;
#line 393
allow servicemanager appdomain:file { read open };
#line 393
allow servicemanager appdomain:process getattr;
#line 393
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 393
# all domains in domain.te.
#line 393
# Perform binder IPC to binder services.
#line 395
# Call the server domain and optionally transfer references to it.
#line 395
allow appdomain binderservicedomain:binder { call transfer };
#line 395
# Allow the serverdomain to transfer references to the client on the reply.
#line 395
allow binderservicedomain appdomain:binder transfer;
#line 395
# Receive and use open files from the server.
#line 395
allow appdomain binderservicedomain:fd use;
#line 395
# Perform binder IPC to other apps.
#line 397
# Call the server domain and optionally transfer references to it.
#line 397
allow appdomain appdomain:binder { call transfer };
#line 397
# Allow the serverdomain to transfer references to the client on the reply.
#line 397
allow appdomain appdomain:binder transfer;
#line 397
# Receive and use open files from the server.
#line 397
allow appdomain appdomain:fd use;
#line 397
# Perform binder IPC to ephemeral apps.
#line 399
# Call the server domain and optionally transfer references to it.
#line 399
allow appdomain ephemeral_app:binder { call transfer };
#line 399
# Allow the serverdomain to transfer references to the client on the reply.
#line 399
allow ephemeral_app appdomain:binder transfer;
#line 399
# Receive and use open files from the server.
#line 399
allow appdomain ephemeral_app:fd use;
#line 399
# Perform binder IPC to gpuservice.
#line 401
# Call the server domain and optionally transfer references to it.
#line 401
allow { appdomain -isolated_app_all } gpuservice:binder { call transfer };
#line 401
# Allow the serverdomain to transfer references to the client on the reply.
#line 401
allow gpuservice { appdomain -isolated_app_all }:binder transfer;
#line 401
# Receive and use open files from the server.
#line 401
allow { appdomain -isolated_app_all } gpuservice:fd use;
#line 401
# Talk with graphics composer fences
allow appdomain hal_graphics_composer:fd use;
# Already connected, unnamed sockets being passed over some other IPC
# hence no sock_file or connectto permission. This appears to be how
# Chrome works, may need to be updated as more apps using isolated services
# are examined.
allow appdomain appdomain:unix_stream_socket { getopt getattr read write shutdown };
# Backup ability for every app. BMS opens and passes the fd
# to any app that has backup ability. Hence, no open permissions here.
allow appdomain backup_data_file:file { read write getattr map };
allow appdomain cache_backup_file:file { read write getattr map };
allow appdomain cache_backup_file:dir getattr;
# Backup ability using 'adb backup'
allow appdomain system_data_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
allow appdomain system_data_file:file { getattr read map };
# Allow read/stat of /data/media files passed by Binder or local socket IPC.
allow { appdomain -isolated_app_all -sdk_sandbox_all } media_rw_data_file:file { read getattr };
# Read and write /data/data/com.android.providers.telephony files passed over Binder.
allow { appdomain -isolated_app_all } radio_data_file:file { read write getattr };
# For art.
allow appdomain dalvikcache_data_file:file execute;
allow appdomain dalvikcache_data_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
# Allow any app to read shared RELRO files.
allow appdomain shared_relro_file:dir search;
allow appdomain shared_relro_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow apps to read/execute installed binaries
allow appdomain apk_data_file:dir { open getattr read search ioctl lock };
allow appdomain apk_data_file:file { getattr open read ioctl lock map { getattr execute execute_no_trans map } };
# /data/resource-cache
allow appdomain resourcecache_data_file:file { getattr open read ioctl lock map watch watch_reads };
allow appdomain resourcecache_data_file:dir { open getattr read search ioctl lock watch watch_reads };
# logd access
#line 444
allow appdomain logcat_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
#line 444
#line 444
allow appdomain logdr_socket:sock_file write;
#line 444
allow appdomain logd:unix_stream_socket connectto;
#line 444
#line 444
allow appdomain zygote:unix_dgram_socket write;
allow appdomain console_device:chr_file { read write };
# only allow unprivileged socket ioctl commands
allowxperm { appdomain -bluetooth } self:{ rawip_socket tcp_socket udp_socket }
ioctl {
#line 452
{
#line 452
# Socket ioctls for gathering information about the interface
#line 452
0x00008906 0x00008907
#line 452
0x00008910 0x00008912 0x00008913 0x00008915 0x00008917 0x00008919
#line 452
0x0000891b 0x00008921 0x00008933 0x00008938 0x00008942
#line 452
# Wireless extension ioctls. Primarily get functions.
#line 452
0x00008b01 0x00008b05 0x00008b07 0x00008b09 0x00008b0b 0x00008b0d
#line 452
0x00008b0f 0x00008b11 0x00008b12 0x00008b13 0x00008b21 0x00008b23
#line 452
0x00008b25 0x00008b27 0x00008b29 0x00008b2d
#line 452
} {
#line 452
0x00005411 0x00005451 0x00005450 0x00005401 0x00005402 0x00005403 0x00005404 0x00005413 0x00005414
#line 452
0x0000540e 0x0000540b 0x00005410 0x0000540f
#line 452
} };
allow { appdomain -isolated_app_all } ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
allow { appdomain -isolated_app_all } dmabuf_system_heap_device:chr_file { getattr open read ioctl lock map watch watch_reads };
allow { appdomain -isolated_app_all } dmabuf_system_secure_heap_device:chr_file { getattr open read ioctl lock map watch watch_reads };
# Allow AAudio apps to use shared memory file descriptors from the HAL
allow { appdomain -isolated_app_all } hal_audio:fd use;
# Allow app to access shared memory created by camera HAL1
allow { appdomain -isolated_app_all } hal_camera:fd use;
# Allow apps to access shared memory file descriptor from the tuner HAL
allow {appdomain -isolated_app_all} hal_tv_tuner_server:fd use;
# RenderScript always-passthrough HAL
allow { appdomain -isolated_app_all } hal_renderscript_hwservice:hwservice_manager find;
allow appdomain same_process_hal_file:file { execute read open getattr map };
# TODO: switch to meminfo service
allow appdomain proc_meminfo:file { getattr open read ioctl lock map watch watch_reads };
# For app fuse.
allow appdomain app_fuse_file:file { getattr read append write map };
###
### CTS-specific rules
###
# For cts/tests/tests/permission/src/android/permission/cts/FileSystemPermissionTest.java.
# testRunAsHasCorrectCapabilities
allow appdomain runas_exec:file getattr;
# Others are either allowed elsewhere or not desired.
# Connect to adbd and use a socket transferred from it.
# This is used for e.g. adb backup/restore.
allow appdomain adbd:unix_stream_socket connectto;
allow appdomain adbd:fd use;
allow appdomain adbd:unix_stream_socket { getattr getopt ioctl read write shutdown };
allow appdomain cache_file:dir getattr;
# Allow apps to run with asanwrapper.
# Read access to FDs from the DropboxManagerService.
allow appdomain dropbox_data_file:file { getattr read };
# Read tmpfs types from these processes.
allow appdomain audioserver_tmpfs:file { getattr map read write };
allow appdomain system_server_tmpfs:file { getattr map read write };
allow appdomain zygote_tmpfs:file { map read };
# Sensitive app domains are not allowed to execute from /data
# to prevent persistence attacks and ensure all code is executed
# from read-only locations.
neverallow {
bluetooth
isolated_app_all
nfc
radio
shared_relro
sdk_sandbox_all
system_app
} {
data_file_type
-apex_art_data_file
-dalvikcache_data_file
-system_data_file # shared libs in apks
-apk_data_file
}:file { execute execute_no_trans };
# Don't allow apps access to any of the following character devices.
neverallow appdomain {
audio_device
camera_device
dm_device
radio_device
rpmsg_device
}:chr_file { read write };
# Block video device access for all apps except the DeviceAsWebcam Service which
# needs access to /dev/video* for interfacing with the host
neverallow {
appdomain
-device_as_webcam
} video_device:chr_file { read write };
# Prevent calling inotify on APKs. This can be used as a side channel
# to observer app launches, so it must be disallowed. b/231587164
# Gate by targetSdkVersion to avoid breaking existing apps.
neverallow {
appdomain
-untrusted_app_25
-untrusted_app_27
-untrusted_app_29
-untrusted_app_30
-untrusted_app_32
} apk_data_file:dir { watch watch_reads };
neverallow {
appdomain
-untrusted_app_25
-untrusted_app_27
-untrusted_app_29
-untrusted_app_30
-untrusted_app_32
} apk_data_file:file { watch watch_reads };
#line 1 "system/sepolicy/private/app_neverallows.te"
###
### neverallow rules for untrusted app domains
###
#line 18
# Receive or send uevent messages.
neverallow {
#line 20
ephemeral_app
#line 20
isolated_app
#line 20
isolated_app_all
#line 20
isolated_compute_app
#line 20
mediaprovider
#line 20
mediaprovider_app
#line 20
untrusted_app
#line 20
untrusted_app_25
#line 20
untrusted_app_27
#line 20
untrusted_app_29
#line 20
untrusted_app_30
#line 20
untrusted_app_all
#line 20
} domain:netlink_kobject_uevent_socket *;
# Receive or send generic netlink messages
neverallow {
#line 23
ephemeral_app
#line 23
isolated_app
#line 23
isolated_app_all
#line 23
isolated_compute_app
#line 23
mediaprovider
#line 23
mediaprovider_app
#line 23
untrusted_app
#line 23
untrusted_app_25
#line 23
untrusted_app_27
#line 23
untrusted_app_29
#line 23
untrusted_app_30
#line 23
untrusted_app_all
#line 23
} domain:netlink_socket *;
# Read or write kernel printk buffer
neverallow {
#line 26
ephemeral_app
#line 26
isolated_app
#line 26
isolated_app_all
#line 26
isolated_compute_app
#line 26
mediaprovider
#line 26
mediaprovider_app
#line 26
untrusted_app
#line 26
untrusted_app_25
#line 26
untrusted_app_27
#line 26
untrusted_app_29
#line 26
untrusted_app_30
#line 26
untrusted_app_all
#line 26
} kmsg_device:chr_file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Too much leaky information in debugfs. It's a security
# best practice to ensure these files aren't readable.
neverallow {
#line 30
ephemeral_app
#line 30
isolated_app
#line 30
isolated_app_all
#line 30
isolated_compute_app
#line 30
mediaprovider
#line 30
mediaprovider_app
#line 30
untrusted_app
#line 30
untrusted_app_25
#line 30
untrusted_app_27
#line 30
untrusted_app_29
#line 30
untrusted_app_30
#line 30
untrusted_app_all
#line 30
} { debugfs_type -debugfs_kcov }:file read;
neverallow {{
#line 31
ephemeral_app
#line 31
isolated_app
#line 31
isolated_app_all
#line 31
isolated_compute_app
#line 31
mediaprovider
#line 31
mediaprovider_app
#line 31
untrusted_app
#line 31
untrusted_app_25
#line 31
untrusted_app_27
#line 31
untrusted_app_29
#line 31
untrusted_app_30
#line 31
untrusted_app_all
#line 31
} } debugfs_type:{ file lnk_file } read;
# Do not allow untrusted apps to register services.
# Only trusted components of Android should be registering
# services.
neverallow {
#line 36
ephemeral_app
#line 36
isolated_app
#line 36
isolated_app_all
#line 36
isolated_compute_app
#line 36
mediaprovider
#line 36
mediaprovider_app
#line 36
untrusted_app
#line 36
untrusted_app_25
#line 36
untrusted_app_27
#line 36
untrusted_app_29
#line 36
untrusted_app_30
#line 36
untrusted_app_all
#line 36
} service_manager_type:service_manager add;
# Do not allow untrusted apps to use VendorBinder
neverallow {
#line 39
ephemeral_app
#line 39
isolated_app
#line 39
isolated_app_all
#line 39
isolated_compute_app
#line 39
mediaprovider
#line 39
mediaprovider_app
#line 39
untrusted_app
#line 39
untrusted_app_25
#line 39
untrusted_app_27
#line 39
untrusted_app_29
#line 39
untrusted_app_30
#line 39
untrusted_app_all
#line 39
} vndbinder_device:chr_file *;
neverallow {
#line 40
ephemeral_app
#line 40
isolated_app
#line 40
isolated_app_all
#line 40
isolated_compute_app
#line 40
mediaprovider
#line 40
mediaprovider_app
#line 40
untrusted_app
#line 40
untrusted_app_25
#line 40
untrusted_app_27
#line 40
untrusted_app_29
#line 40
untrusted_app_30
#line 40
untrusted_app_all
#line 40
} vndservice_manager_type:service_manager *;
# Do not allow untrusted apps to connect to the property service
# or set properties. b/10243159
neverallow { {
#line 44
ephemeral_app
#line 44
isolated_app
#line 44
isolated_app_all
#line 44
isolated_compute_app
#line 44
mediaprovider
#line 44
mediaprovider_app
#line 44
untrusted_app
#line 44
untrusted_app_25
#line 44
untrusted_app_27
#line 44
untrusted_app_29
#line 44
untrusted_app_30
#line 44
untrusted_app_all
#line 44
} -mediaprovider } property_socket:sock_file write;
neverallow { {
#line 45
ephemeral_app
#line 45
isolated_app
#line 45
isolated_app_all
#line 45
isolated_compute_app
#line 45
mediaprovider
#line 45
mediaprovider_app
#line 45
untrusted_app
#line 45
untrusted_app_25
#line 45
untrusted_app_27
#line 45
untrusted_app_29
#line 45
untrusted_app_30
#line 45
untrusted_app_all
#line 45
} -mediaprovider } init:unix_stream_socket connectto;
neverallow { {
#line 46
ephemeral_app
#line 46
isolated_app
#line 46
isolated_app_all
#line 46
isolated_compute_app
#line 46
mediaprovider
#line 46
mediaprovider_app
#line 46
untrusted_app
#line 46
untrusted_app_25
#line 46
untrusted_app_27
#line 46
untrusted_app_29
#line 46
untrusted_app_30
#line 46
untrusted_app_all
#line 46
} -mediaprovider } property_type:property_service set;
# net.dns properties are not a public API. Disallow untrusted apps from reading this property.
neverallow { {
#line 49
ephemeral_app
#line 49
isolated_app
#line 49
isolated_app_all
#line 49
isolated_compute_app
#line 49
mediaprovider
#line 49
mediaprovider_app
#line 49
untrusted_app
#line 49
untrusted_app_25
#line 49
untrusted_app_27
#line 49
untrusted_app_29
#line 49
untrusted_app_30
#line 49
untrusted_app_all
#line 49
} } net_dns_prop:file read;
# radio_cdma_ecm_prop properties are not a public API. Disallow untrusted apps from reading this property.
neverallow { {
#line 52
ephemeral_app
#line 52
isolated_app
#line 52
isolated_app_all
#line 52
isolated_compute_app
#line 52
mediaprovider
#line 52
mediaprovider_app
#line 52
untrusted_app
#line 52
untrusted_app_25
#line 52
untrusted_app_27
#line 52
untrusted_app_29
#line 52
untrusted_app_30
#line 52
untrusted_app_all
#line 52
} } radio_cdma_ecm_prop:file read;
# Shared libraries created by trusted components within an app home
# directory can be dlopen()ed. To maintain the W^X property, these files
# must never be writable to the app.
neverallow {
#line 57
ephemeral_app
#line 57
isolated_app
#line 57
isolated_app_all
#line 57
isolated_compute_app
#line 57
mediaprovider
#line 57
mediaprovider_app
#line 57
untrusted_app
#line 57
untrusted_app_25
#line 57
untrusted_app_27
#line 57
untrusted_app_29
#line 57
untrusted_app_30
#line 57
untrusted_app_all
#line 57
} app_exec_data_file:file
{ append create link relabelfrom relabelto rename setattr write };
# Block calling execve() on files in an apps home directory.
# This is a W^X violation (loading executable code from a writable
# home directory). For compatibility, allow for targetApi <= 28.
# b/112357170
neverallow {
{
#line 65
ephemeral_app
#line 65
isolated_app
#line 65
isolated_app_all
#line 65
isolated_compute_app
#line 65
mediaprovider
#line 65
mediaprovider_app
#line 65
untrusted_app
#line 65
untrusted_app_25
#line 65
untrusted_app_27
#line 65
untrusted_app_29
#line 65
untrusted_app_30
#line 65
untrusted_app_all
#line 65
}
-untrusted_app_25
-untrusted_app_27
-runas_app
} { app_data_file privapp_data_file }:file execute_no_trans;
# Do not allow untrusted apps to invoke dex2oat. This was historically required
# by ART for compiling secondary dex files but has been removed in Q.
# Exempt legacy apps (targetApi<=28) for compatibility.
neverallow {
{
#line 75
ephemeral_app
#line 75
isolated_app
#line 75
isolated_app_all
#line 75
isolated_compute_app
#line 75
mediaprovider
#line 75
mediaprovider_app
#line 75
untrusted_app
#line 75
untrusted_app_25
#line 75
untrusted_app_27
#line 75
untrusted_app_29
#line 75
untrusted_app_30
#line 75
untrusted_app_all
#line 75
}
-untrusted_app_25
-untrusted_app_27
} dex2oat_exec:file { execute execute_no_trans };
# Do not allow untrusted apps to be assigned mlstrustedsubject.
# This would undermine the per-user isolation model being
# enforced via levelFrom=user in seapp_contexts and the mls
# constraints. As there is no direct way to specify a neverallow
# on attribute assignment, this relies on the fact that fork
# permission only makes sense within a domain (hence should
# never be granted to any other domain within mlstrustedsubject)
# and an untrusted app is allowed fork permission to itself.
neverallow {
#line 88
ephemeral_app
#line 88
isolated_app
#line 88
isolated_app_all
#line 88
isolated_compute_app
#line 88
mediaprovider
#line 88
mediaprovider_app
#line 88
untrusted_app
#line 88
untrusted_app_25
#line 88
untrusted_app_27
#line 88
untrusted_app_29
#line 88
untrusted_app_30
#line 88
untrusted_app_all
#line 88
} mlstrustedsubject:process fork;
# Do not allow untrusted apps to hard link to any files.
# In particular, if an untrusted app links to other app data
# files, installd will not be able to guarantee the deletion
# of the linked to file. Hard links also contribute to security
# bugs, so we want to ensure untrusted apps never have this
# capability.
neverallow {
#line 96
ephemeral_app
#line 96
isolated_app
#line 96
isolated_app_all
#line 96
isolated_compute_app
#line 96
mediaprovider
#line 96
mediaprovider_app
#line 96
untrusted_app
#line 96
untrusted_app_25
#line 96
untrusted_app_27
#line 96
untrusted_app_29
#line 96
untrusted_app_30
#line 96
untrusted_app_all
#line 96
} file_type:file link;
# Do not allow untrusted apps to access network MAC address file
neverallow {
#line 99
ephemeral_app
#line 99
isolated_app
#line 99
isolated_app_all
#line 99
isolated_compute_app
#line 99
mediaprovider
#line 99
mediaprovider_app
#line 99
untrusted_app
#line 99
untrusted_app_25
#line 99
untrusted_app_27
#line 99
untrusted_app_29
#line 99
untrusted_app_30
#line 99
untrusted_app_all
#line 99
} sysfs_net:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Do not allow any write access to files in /sys
neverallow {
#line 102
ephemeral_app
#line 102
isolated_app
#line 102
isolated_app_all
#line 102
isolated_compute_app
#line 102
mediaprovider
#line 102
mediaprovider_app
#line 102
untrusted_app
#line 102
untrusted_app_25
#line 102
untrusted_app_27
#line 102
untrusted_app_29
#line 102
untrusted_app_30
#line 102
untrusted_app_all
#line 102
} sysfs_type:file { { append create link unlink relabelfrom rename setattr write } { execute execute_no_trans } };
# Apps may never access the default sysfs label.
neverallow {
#line 105
ephemeral_app
#line 105
isolated_app
#line 105
isolated_app_all
#line 105
isolated_compute_app
#line 105
mediaprovider
#line 105
mediaprovider_app
#line 105
untrusted_app
#line 105
untrusted_app_25
#line 105
untrusted_app_27
#line 105
untrusted_app_29
#line 105
untrusted_app_30
#line 105
untrusted_app_all
#line 105
} sysfs:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Restrict socket ioctls. Either 1. disallow privileged ioctls, 2. disallow the
# ioctl permission, or 3. disallow the socket class.
neverallowxperm {
#line 109
ephemeral_app
#line 109
isolated_app
#line 109
isolated_app_all
#line 109
isolated_compute_app
#line 109
mediaprovider
#line 109
mediaprovider_app
#line 109
untrusted_app
#line 109
untrusted_app_25
#line 109
untrusted_app_27
#line 109
untrusted_app_29
#line 109
untrusted_app_30
#line 109
untrusted_app_all
#line 109
} domain:{ icmp_socket rawip_socket tcp_socket udp_socket } ioctl
#line 109
{
#line 109
# qualcomm rmnet ioctls
#line 109
0x00006900 0x00006902
#line 109
# socket ioctls
#line 109
0x0000890b 0x0000890c 0x0000890d 0x00008911 0x00008914 0x00008916
#line 109
0x00008918 0x0000891a 0x0000891c 0x0000891d 0x0000891e 0x0000891f
#line 109
0x00008920 0x00008922 0x00008923 0x00008924 0x00008925 0x00008926
#line 109
0x00008927 0x00008929 0x00008930 0x00008931 0x00008932
#line 109
0x00008934 0x00008935 0x00008936 0x00008937 0x00008939 0x00008940 0x00008941
#line 109
0x00008943 0x00008946 0x00008947 0x00008948 0x00008949 0x0000894a
#line 109
0x0000894b 0x00008953 0x00008954 0x00008955 0x00008960 0x00008961 0x00008962 0x00008970
#line 109
0x00008971 0x00008980 0x00008981 0x00008982 0x00008983 0x00008990
#line 109
0x00008991 0x00008992 0x00008993 0x00008994
#line 109
0x00008995 0x000089a0 0x000089a1 0x000089a2 0x000089a3 0x000089b0
#line 109
# device and protocol specific ioctls
#line 109
0x000089f0-0x000089ff
#line 109
0x000089e0-0x000089ef
#line 109
# Wireless extension ioctls
#line 109
0x00008b00 0x00008b02 0x00008b04 0x00008b06 0x00008b08 0x00008b0a
#line 109
0x00008b0c 0x00008b0e 0x00008b10 0x00008b14 0x00008b15 0x00008b16 0x00008b17
#line 109
0x00008b18 0x00008b19 0x00008b1a 0x00008b1b 0x00008b1c 0x00008b1d
#line 109
0x00008b20 0x00008b22 0x00008b24 0x00008b26 0x00008b28 0x00008b2a
#line 109
0x00008b2b 0x00008b2c 0x00008b30 0x00008b31 0x00008b32 0x00008b33
#line 109
0x00008b34 0x00008b35 0x00008b36
#line 109
# Dev private ioctl i.e. hardware specific ioctls
#line 109
0x00008be0-0x00008bff
#line 109
};
neverallow {
#line 110
ephemeral_app
#line 110
isolated_app
#line 110
isolated_app_all
#line 110
isolated_compute_app
#line 110
mediaprovider
#line 110
mediaprovider_app
#line 110
untrusted_app
#line 110
untrusted_app_25
#line 110
untrusted_app_27
#line 110
untrusted_app_29
#line 110
untrusted_app_30
#line 110
untrusted_app_all
#line 110
} *:{ netlink_route_socket netlink_selinux_socket } ioctl;
neverallow {
#line 111
ephemeral_app
#line 111
isolated_app
#line 111
isolated_app_all
#line 111
isolated_compute_app
#line 111
mediaprovider
#line 111
mediaprovider_app
#line 111
untrusted_app
#line 111
untrusted_app_25
#line 111
untrusted_app_27
#line 111
untrusted_app_29
#line 111
untrusted_app_30
#line 111
untrusted_app_all
#line 111
} *:{
socket netlink_socket packet_socket key_socket appletalk_socket
netlink_tcpdiag_socket netlink_nflog_socket
netlink_xfrm_socket netlink_audit_socket
netlink_dnrt_socket netlink_kobject_uevent_socket tun_socket
netlink_iscsi_socket netlink_fib_lookup_socket netlink_connector_socket
netlink_netfilter_socket netlink_generic_socket netlink_scsitransport_socket
netlink_rdma_socket netlink_crypto_socket sctp_socket
ax25_socket ipx_socket netrom_socket atmpvc_socket x25_socket rose_socket decnet_socket
atmsvc_socket rds_socket irda_socket pppox_socket llc_socket can_socket tipc_socket
bluetooth_socket iucv_socket rxrpc_socket isdn_socket phonet_socket ieee802154_socket caif_socket
alg_socket nfc_socket kcm_socket qipcrtr_socket smc_socket xdp_socket
} *;
# Apps can read/write an already open vsock (e.g. created by
# virtualizationservice) but nothing more than that (e.g. creating a
# new vsock, etc.)
neverallow {
#line 128
ephemeral_app
#line 128
isolated_app
#line 128
isolated_app_all
#line 128
isolated_compute_app
#line 128
mediaprovider
#line 128
mediaprovider_app
#line 128
untrusted_app
#line 128
untrusted_app_25
#line 128
untrusted_app_27
#line 128
untrusted_app_29
#line 128
untrusted_app_30
#line 128
untrusted_app_all
#line 128
} *:vsock_socket ~{ getattr getopt read write };
# Disallow sending RTM_GETLINK messages on netlink sockets.
neverallow {
#line 131
ephemeral_app
#line 131
isolated_app
#line 131
isolated_app_all
#line 131
isolated_compute_app
#line 131
mediaprovider
#line 131
mediaprovider_app
#line 131
untrusted_app
#line 131
untrusted_app_25
#line 131
untrusted_app_27
#line 131
untrusted_app_29
#line 131
untrusted_app_30
#line 131
untrusted_app_all
#line 131
} domain:netlink_route_socket { bind nlmsg_readpriv };
neverallow priv_app domain:netlink_route_socket { bind nlmsg_readpriv };
# Disallow sending RTM_GETNEIGH{TBL} messages on netlink sockets.
neverallow {
{
#line 136
ephemeral_app
#line 136
isolated_app
#line 136
isolated_app_all
#line 136
isolated_compute_app
#line 136
mediaprovider
#line 136
mediaprovider_app
#line 136
untrusted_app
#line 136
untrusted_app_25
#line 136
untrusted_app_27
#line 136
untrusted_app_29
#line 136
untrusted_app_30
#line 136
untrusted_app_all
#line 136
}
-untrusted_app_25
-untrusted_app_27
-untrusted_app_29
-untrusted_app_30
} domain:netlink_route_socket nlmsg_getneigh;
# Do not allow untrusted apps access to /cache
neverallow { {
#line 144
ephemeral_app
#line 144
isolated_app
#line 144
isolated_app_all
#line 144
isolated_compute_app
#line 144
mediaprovider
#line 144
mediaprovider_app
#line 144
untrusted_app
#line 144
untrusted_app_25
#line 144
untrusted_app_27
#line 144
untrusted_app_29
#line 144
untrusted_app_30
#line 144
untrusted_app_all
#line 144
} -mediaprovider } { cache_file cache_recovery_file }:dir ~{ { open getattr read search ioctl lock watch watch_reads } };
neverallow { {
#line 145
ephemeral_app
#line 145
isolated_app
#line 145
isolated_app_all
#line 145
isolated_compute_app
#line 145
mediaprovider
#line 145
mediaprovider_app
#line 145
untrusted_app
#line 145
untrusted_app_25
#line 145
untrusted_app_27
#line 145
untrusted_app_29
#line 145
untrusted_app_30
#line 145
untrusted_app_all
#line 145
} -mediaprovider } { cache_file cache_recovery_file }:file ~{ read getattr };
# Do not allow untrusted apps to create/unlink files outside of its sandbox,
# internal storage or sdcard.
# World accessible data locations allow application to fill the device
# with unaccounted for data. This data will not get removed during
# application un-installation.
neverallow { {
#line 152
ephemeral_app
#line 152
isolated_app
#line 152
isolated_app_all
#line 152
isolated_compute_app
#line 152
mediaprovider
#line 152
mediaprovider_app
#line 152
untrusted_app
#line 152
untrusted_app_25
#line 152
untrusted_app_27
#line 152
untrusted_app_29
#line 152
untrusted_app_30
#line 152
untrusted_app_all
#line 152
} -mediaprovider } {
fs_type
-sdcard_type
-fuse
file_type
-app_data_file # The apps sandbox itself
-privapp_data_file
-app_exec_data_file # stored within the app sandbox directory
-media_rw_data_file # Internal storage. Known that apps can
# leave artfacts here after uninstall.
-user_profile_data_file # Access to profile files
#line 167
}:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } { create unlink };
# No untrusted component except mediaprovider_app should be touching /dev/fuse
neverallow { {
#line 170
ephemeral_app
#line 170
isolated_app
#line 170
isolated_app_all
#line 170
isolated_compute_app
#line 170
mediaprovider
#line 170
mediaprovider_app
#line 170
untrusted_app
#line 170
untrusted_app_25
#line 170
untrusted_app_27
#line 170
untrusted_app_29
#line 170
untrusted_app_30
#line 170
untrusted_app_all
#line 170
} -mediaprovider_app } fuse_device:chr_file *;
# Do not allow untrusted apps to directly open the tun_device
neverallow {
#line 173
ephemeral_app
#line 173
isolated_app
#line 173
isolated_app_all
#line 173
isolated_compute_app
#line 173
mediaprovider
#line 173
mediaprovider_app
#line 173
untrusted_app
#line 173
untrusted_app_25
#line 173
untrusted_app_27
#line 173
untrusted_app_29
#line 173
untrusted_app_30
#line 173
untrusted_app_all
#line 173
} tun_device:chr_file open;
# The tun_device ioctls below are not allowed, to prove equivalence
# to the kernel patch at
# https://android.googlesource.com/kernel/common/+/11cee2be0c2062ba88f04eb51196506f870a3b5d%5E%21
neverallowxperm {
#line 177
ephemeral_app
#line 177
isolated_app
#line 177
isolated_app_all
#line 177
isolated_compute_app
#line 177
mediaprovider
#line 177
mediaprovider_app
#line 177
untrusted_app
#line 177
untrusted_app_25
#line 177
untrusted_app_27
#line 177
untrusted_app_29
#line 177
untrusted_app_30
#line 177
untrusted_app_all
#line 177
} tun_device:chr_file ioctl ~{ 0x00005451 0x00005450 0x800454d2 };
# Only allow appending to /data/anr/traces.txt (b/27853304, b/18340553)
neverallow {
#line 180
ephemeral_app
#line 180
isolated_app
#line 180
isolated_app_all
#line 180
isolated_compute_app
#line 180
mediaprovider
#line 180
mediaprovider_app
#line 180
untrusted_app
#line 180
untrusted_app_25
#line 180
untrusted_app_27
#line 180
untrusted_app_29
#line 180
untrusted_app_30
#line 180
untrusted_app_all
#line 180
} anr_data_file:file ~{ open append };
neverallow {
#line 181
ephemeral_app
#line 181
isolated_app
#line 181
isolated_app_all
#line 181
isolated_compute_app
#line 181
mediaprovider
#line 181
mediaprovider_app
#line 181
untrusted_app
#line 181
untrusted_app_25
#line 181
untrusted_app_27
#line 181
untrusted_app_29
#line 181
untrusted_app_30
#line 181
untrusted_app_all
#line 181
} anr_data_file:dir ~search;
# Avoid reads from generically labeled /proc files
# Create a more specific label if needed
neverallow {
#line 185
ephemeral_app
#line 185
isolated_app
#line 185
isolated_app_all
#line 185
isolated_compute_app
#line 185
mediaprovider
#line 185
mediaprovider_app
#line 185
untrusted_app
#line 185
untrusted_app_25
#line 185
untrusted_app_27
#line 185
untrusted_app_29
#line 185
untrusted_app_30
#line 185
untrusted_app_all
#line 185
} {
proc
proc_asound
proc_kmsg
proc_loadavg
proc_mounts
proc_pagetypeinfo
proc_slabinfo
proc_stat
proc_swaps
proc_uptime
proc_version
proc_vmallocinfo
proc_vmstat
}:file { { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads } { execute execute_no_trans } };
# /proc/filesystems is accessible to mediaprovider_app only since it handles
# external storage
neverallow { {
#line 203
ephemeral_app
#line 203
isolated_app
#line 203
isolated_app_all
#line 203
isolated_compute_app
#line 203
mediaprovider
#line 203
mediaprovider_app
#line 203
untrusted_app
#line 203
untrusted_app_25
#line 203
untrusted_app_27
#line 203
untrusted_app_29
#line 203
untrusted_app_30
#line 203
untrusted_app_all
#line 203
} - mediaprovider_app } proc_filesystems:file { { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads } { execute execute_no_trans } };
# Avoid all access to kernel configuration
neverallow {
#line 206
ephemeral_app
#line 206
isolated_app
#line 206
isolated_app_all
#line 206
isolated_compute_app
#line 206
mediaprovider
#line 206
mediaprovider_app
#line 206
untrusted_app
#line 206
untrusted_app_25
#line 206
untrusted_app_27
#line 206
untrusted_app_29
#line 206
untrusted_app_30
#line 206
untrusted_app_all
#line 206
} config_gz:file { { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads } { execute execute_no_trans } };
# Do not allow untrusted apps access to preloads data files
neverallow {
#line 209
ephemeral_app
#line 209
isolated_app
#line 209
isolated_app_all
#line 209
isolated_compute_app
#line 209
mediaprovider
#line 209
mediaprovider_app
#line 209
untrusted_app
#line 209
untrusted_app_25
#line 209
untrusted_app_27
#line 209
untrusted_app_29
#line 209
untrusted_app_30
#line 209
untrusted_app_all
#line 209
} preloads_data_file:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Locking of files on /system could lead to denial of service attacks
# against privileged system components
neverallow {
#line 213
ephemeral_app
#line 213
isolated_app
#line 213
isolated_app_all
#line 213
isolated_compute_app
#line 213
mediaprovider
#line 213
mediaprovider_app
#line 213
untrusted_app
#line 213
untrusted_app_25
#line 213
untrusted_app_27
#line 213
untrusted_app_29
#line 213
untrusted_app_30
#line 213
untrusted_app_all
#line 213
} system_file:file lock;
# Do not permit untrusted apps to perform actions on HwBinder service_manager
# other than find actions for services listed below
neverallow {
#line 217
ephemeral_app
#line 217
isolated_app
#line 217
isolated_app_all
#line 217
isolated_compute_app
#line 217
mediaprovider
#line 217
mediaprovider_app
#line 217
untrusted_app
#line 217
untrusted_app_25
#line 217
untrusted_app_27
#line 217
untrusted_app_29
#line 217
untrusted_app_30
#line 217
untrusted_app_all
#line 217
} *:hwservice_manager ~find;
# Do not permit access from apps which host arbitrary code to the protected services
# The two main reasons for this are:
# 1. Protected HwBinder servers do not perform client authentication because
# vendor code does not have a way to understand apps or their relation to
# caller UID information and, even if it did, those services either operate
# at a level below that of apps (e.g., HALs) or must not rely on app identity
# for authorization. Thus, to be safe, the default assumption for all added
# vendor services is that they treat all their clients as equally authorized
# to perform operations offered by the service.
# 2. HAL servers contain code with higher incidence rate of security issues
# than system/core components and have access to lower layes of the stack
# (all the way down to hardware) thus increasing opportunities for bypassing
# the Android security model.
neverallow {
#line 232
ephemeral_app
#line 232
isolated_app
#line 232
isolated_app_all
#line 232
isolated_compute_app
#line 232
mediaprovider
#line 232
mediaprovider_app
#line 232
untrusted_app
#line 232
untrusted_app_25
#line 232
untrusted_app_27
#line 232
untrusted_app_29
#line 232
untrusted_app_30
#line 232
untrusted_app_all
#line 232
} protected_hwservice:hwservice_manager find;
neverallow {
#line 233
ephemeral_app
#line 233
isolated_app
#line 233
isolated_app_all
#line 233
isolated_compute_app
#line 233
mediaprovider
#line 233
mediaprovider_app
#line 233
untrusted_app
#line 233
untrusted_app_25
#line 233
untrusted_app_27
#line 233
untrusted_app_29
#line 233
untrusted_app_30
#line 233
untrusted_app_all
#line 233
} protected_service:service_manager find;
# SELinux is not an API for untrusted apps to use
neverallow {
#line 236
ephemeral_app
#line 236
isolated_app
#line 236
isolated_app_all
#line 236
isolated_compute_app
#line 236
mediaprovider
#line 236
mediaprovider_app
#line 236
untrusted_app
#line 236
untrusted_app_25
#line 236
untrusted_app_27
#line 236
untrusted_app_29
#line 236
untrusted_app_30
#line 236
untrusted_app_all
#line 236
} selinuxfs:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Access to /proc/tty/drivers, to allow apps to determine if they
# are running in an emulated environment.
# b/33214085 b/33814662 b/33791054 b/33211769
# https://github.com/strazzere/anti-emulator/blob/master/AntiEmulator/src/diff/strazzere/anti/emulator/FindEmulator.java
# This will go away in a future Android release
neverallow { {
#line 243
ephemeral_app
#line 243
isolated_app
#line 243
isolated_app_all
#line 243
isolated_compute_app
#line 243
mediaprovider
#line 243
mediaprovider_app
#line 243
untrusted_app
#line 243
untrusted_app_25
#line 243
untrusted_app_27
#line 243
untrusted_app_29
#line 243
untrusted_app_30
#line 243
untrusted_app_all
#line 243
} -untrusted_app_25 } proc_tty_drivers:file { getattr open read ioctl lock map watch watch_reads };
neverallow {
#line 244
ephemeral_app
#line 244
isolated_app
#line 244
isolated_app_all
#line 244
isolated_compute_app
#line 244
mediaprovider
#line 244
mediaprovider_app
#line 244
untrusted_app
#line 244
untrusted_app_25
#line 244
untrusted_app_27
#line 244
untrusted_app_29
#line 244
untrusted_app_30
#line 244
untrusted_app_all
#line 244
} proc_tty_drivers:file ~{ getattr open read ioctl lock map watch watch_reads };
# Untrusted apps are not allowed to use cgroups.
neverallow {
#line 247
ephemeral_app
#line 247
isolated_app
#line 247
isolated_app_all
#line 247
isolated_compute_app
#line 247
mediaprovider
#line 247
mediaprovider_app
#line 247
untrusted_app
#line 247
untrusted_app_25
#line 247
untrusted_app_27
#line 247
untrusted_app_29
#line 247
untrusted_app_30
#line 247
untrusted_app_all
#line 247
} cgroup:file *;
neverallow {
#line 248
ephemeral_app
#line 248
isolated_app
#line 248
isolated_app_all
#line 248
isolated_compute_app
#line 248
mediaprovider
#line 248
mediaprovider_app
#line 248
untrusted_app
#line 248
untrusted_app_25
#line 248
untrusted_app_27
#line 248
untrusted_app_29
#line 248
untrusted_app_30
#line 248
untrusted_app_all
#line 248
} cgroup_v2:file *;
# /mnt/sdcard symlink was supposed to have been removed in Gingerbread. Apps
# must not use it.
neverallow {
{
#line 253
ephemeral_app
#line 253
isolated_app
#line 253
isolated_app_all
#line 253
isolated_compute_app
#line 253
mediaprovider
#line 253
mediaprovider_app
#line 253
untrusted_app
#line 253
untrusted_app_25
#line 253
untrusted_app_27
#line 253
untrusted_app_29
#line 253
untrusted_app_30
#line 253
untrusted_app_all
#line 253
}
-untrusted_app_25
-untrusted_app_27
} mnt_sdcard_file:lnk_file *;
# Only privileged apps may find the incident service
neverallow {
#line 259
ephemeral_app
#line 259
isolated_app
#line 259
isolated_app_all
#line 259
isolated_compute_app
#line 259
mediaprovider
#line 259
mediaprovider_app
#line 259
untrusted_app
#line 259
untrusted_app_25
#line 259
untrusted_app_27
#line 259
untrusted_app_29
#line 259
untrusted_app_30
#line 259
untrusted_app_all
#line 259
} incident_service:service_manager find;
# Only privileged apps may find stats service
neverallow {
#line 262
ephemeral_app
#line 262
isolated_app
#line 262
isolated_app_all
#line 262
isolated_compute_app
#line 262
mediaprovider
#line 262
mediaprovider_app
#line 262
untrusted_app
#line 262
untrusted_app_25
#line 262
untrusted_app_27
#line 262
untrusted_app_29
#line 262
untrusted_app_30
#line 262
untrusted_app_all
#line 262
} stats_service:service_manager find;
# Do not allow untrusted app to read hidden system proprerties.
# We do not include in the exclusions other normally untrusted applications such as mediaprovider
# due to the specific logging use cases.
# Context: b/193912100
neverallow {
{
#line 269
ephemeral_app
#line 269
isolated_app
#line 269
isolated_app_all
#line 269
isolated_compute_app
#line 269
mediaprovider
#line 269
mediaprovider_app
#line 269
untrusted_app
#line 269
untrusted_app_25
#line 269
untrusted_app_27
#line 269
untrusted_app_29
#line 269
untrusted_app_30
#line 269
untrusted_app_all
#line 269
}
-mediaprovider
-mediaprovider_app
} { userdebug_or_eng_prop }:file read;
# Do not allow untrusted app to access /dev/socket/mdnsd since U. The socket is
# used to communicate to the mdnsd responder. The mdnsd responder will be
# replaced by a java implementation which is integrated into the system server.
# For untrusted apps running with API level 33-, they still have access to
# /dev/socket/mdnsd for backward compatibility.
neverallow {
{
#line 280
ephemeral_app
#line 280
isolated_app
#line 280
isolated_app_all
#line 280
isolated_compute_app
#line 280
mediaprovider
#line 280
mediaprovider_app
#line 280
untrusted_app
#line 280
untrusted_app_25
#line 280
untrusted_app_27
#line 280
untrusted_app_29
#line 280
untrusted_app_30
#line 280
untrusted_app_all
#line 280
}
-untrusted_app_25
-untrusted_app_27
-untrusted_app_29
-untrusted_app_30
-untrusted_app_32
} mdnsd_socket:sock_file write;
neverallow {
{
#line 288
ephemeral_app
#line 288
isolated_app
#line 288
isolated_app_all
#line 288
isolated_compute_app
#line 288
mediaprovider
#line 288
mediaprovider_app
#line 288
untrusted_app
#line 288
untrusted_app_25
#line 288
untrusted_app_27
#line 288
untrusted_app_29
#line 288
untrusted_app_30
#line 288
untrusted_app_all
#line 288
}
-untrusted_app_25
-untrusted_app_27
-untrusted_app_29
-untrusted_app_30
-untrusted_app_32
} mdnsd:unix_stream_socket connectto;
# Do not allow untrusted apps to use anonymous inodes. At the moment,
# type transitions are the only way to distinguish between different
# anon_inode usages like userfaultfd and io_uring. This prevents us from
# creating a more fine-grained neverallow policy for each anon_inode usage.
neverallow {
#line 300
ephemeral_app
#line 300
isolated_app
#line 300
isolated_app_all
#line 300
isolated_compute_app
#line 300
mediaprovider
#line 300
mediaprovider_app
#line 300
untrusted_app
#line 300
untrusted_app_25
#line 300
untrusted_app_27
#line 300
untrusted_app_29
#line 300
untrusted_app_30
#line 300
untrusted_app_all
#line 300
} domain:anon_inode *;
# Do not allow untrusted app access to hidraw devices.
neverallow {
#line 303
ephemeral_app
#line 303
isolated_app
#line 303
isolated_app_all
#line 303
isolated_compute_app
#line 303
mediaprovider
#line 303
mediaprovider_app
#line 303
untrusted_app
#line 303
untrusted_app_25
#line 303
untrusted_app_27
#line 303
untrusted_app_29
#line 303
untrusted_app_30
#line 303
untrusted_app_all
#line 303
} hidraw_device:chr_file *;
#line 1 "system/sepolicy/private/app_zygote.te"
typeattribute app_zygote coredomain;
######
###### Policy below is different from regular zygote-spawned apps
######
# Allow access to temporary files, which is normally permitted through
# a domain macro.
#line 9
type_transition app_zygote tmpfs:file app_zygote_tmpfs;
#line 9
allow app_zygote app_zygote_tmpfs:file { read write getattr map };
#line 9
;
# Set the UID/GID of the process.
# This will be further limited to a range of isolated UIDs with seccomp.
allow app_zygote self:{ capability cap_userns } { setgid setuid };
# Drop capabilities from bounding set.
allow app_zygote self:{ capability cap_userns } setpcap;
# Switch SELinux context to isolated app domain.
allow app_zygote self:process setcurrent;
allow app_zygote isolated_app:process dyntransition;
# For JIT
allow app_zygote self:process execmem;
# Allow exec mapping from tmpfs (memfds) for binary translation
allow app_zygote app_zygote_tmpfs:file execute;
# Allow app_zygote to stat the files that it opens. It must
# be able to inspect them so that it can reopen them on fork
# if necessary: b/30963384.
allow app_zygote debugfs_trace_marker:file getattr;
# get system_server process group
allow app_zygote system_server:process getpgid;
# Interaction between the app_zygote and its children.
allow app_zygote isolated_app:process setpgid;
# TODO (b/63631799) fix this access
dontaudit app_zygote mnt_expand_file:dir getattr;
# Get seapp_contexts
allow app_zygote seapp_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
# Check validity of SELinux context before use.
#line 43
#line 43
allow app_zygote selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 43
allow app_zygote selinuxfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 43
#line 43
allow app_zygote selinuxfs:file { open append write lock map };
#line 43
allow app_zygote kernel:security check_context;
#line 43
# Check SELinux permissions.
#line 45
#line 45
allow app_zygote selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 45
allow app_zygote selinuxfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 45
#line 45
allow app_zygote selinuxfs:file { open append write lock map };
#line 45
allow app_zygote kernel:security compute_av;
#line 45
allow app_zygote self:netlink_selinux_socket { read write create getattr setattr lock relabelfrom relabelto append bind connect listen accept getopt setopt shutdown recvfrom sendto name_bind };
#line 45
# Read and inspect temporary files managed by zygote.
allow app_zygote zygote_tmpfs:file { read getattr };
######
###### Policy below is shared with regular zygote-spawned apps
######
# Child of zygote.
allow app_zygote zygote:fd use;
allow app_zygote zygote:process sigchld;
# For ART (read /data/dalvik-cache).
#line 59
allow app_zygote dalvikcache_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 59
allow app_zygote dalvikcache_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 59
;
allow app_zygote dalvikcache_data_file:file execute;
# For ART (allow userfaultfd and related ioctls)
#line 63
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 63
type app_zygote_userfaultfd;
#line 63
type_transition app_zygote app_zygote:anon_inode app_zygote_userfaultfd "[userfaultfd]";
#line 63
# Allow domain to create/use userfaultfd anon_inode.
#line 63
allow app_zygote app_zygote_userfaultfd:anon_inode { create ioctl read };
#line 63
# Suppress errors generate during bugreport
#line 63
dontaudit su app_zygote_userfaultfd:anon_inode *;
#line 63
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 63
neverallow { domain -app_zygote } app_zygote_userfaultfd:anon_inode *;
#line 63
# Read /data/misc/apexdata/ to (get to com.android.art/dalvik-cache).
allow app_zygote apex_module_data_file:dir search;
# For ART APEX (read /data/misc/apexdata/com.android.art/dalvik-cache).
#line 68
allow app_zygote apex_art_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 68
allow app_zygote apex_art_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 68
# Allow reading/executing installed binaries to enable preloading
# application data
allow app_zygote apk_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow app_zygote apk_data_file:file { { getattr open read ioctl lock map watch watch_reads } execute };
# /oem accesses.
allow app_zygote oemfs:dir search;
# Allow app_zygote access to /vendor/overlay
#line 79
allow app_zygote vendor_overlay_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 79
allow app_zygote vendor_overlay_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 79
# Allow app_zygote to read vendor_overlay_file from vendor apex as well
allow app_zygote vendor_apex_metadata_file:dir { getattr search };
allow app_zygote system_data_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
allow app_zygote system_data_file:file { getattr read map };
# Send unsolicited message to system_server
#line 87
allow app_zygote system_unsolzygote_socket:sock_file write;
#line 87
allow app_zygote system_server:unix_dgram_socket sendto;
#line 87
# Allow the app_zygote to access the runtime feature flag properties.
#line 90
allow app_zygote device_config_runtime_native_prop:file { getattr open read map };
#line 90
#line 91
allow app_zygote device_config_runtime_native_boot_prop:file { getattr open read map };
#line 91
# Allow app_zygote to access odsign verification status
#line 94
allow app_zygote odsign_prop:file { getattr open read map };
#line 94
# /data/resource-cache
allow app_zygote resourcecache_data_file:file { getattr open read ioctl lock map watch watch_reads };
allow app_zygote resourcecache_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#####
##### Neverallow
#####
# Only permit transition to isolated_app.
neverallow app_zygote { domain -isolated_app }:process dyntransition;
# Only setcon() transitions, no exec() based transitions, except for crash_dump.
neverallow app_zygote { domain -crash_dump }:process transition;
# Must not exec() a program without changing domains.
# Having said that, exec() above is not allowed.
neverallow app_zygote *:file execute_no_trans;
# The only way to enter this domain is for the zygote to fork a new
# app_zygote child.
neverallow { domain -zygote } app_zygote:process dyntransition;
# Disallow write access to properties.
neverallow app_zygote property_socket:sock_file write;
neverallow app_zygote property_type:property_service set;
# Should not have any access to data files.
neverallow app_zygote app_data_file_type:file { { { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } { getattr execute execute_no_trans map } } };
neverallow app_zygote {
service_manager_type
-activity_service
-webviewupdate_service
}:service_manager find;
# Isolated apps should not be able to access the driver directly.
neverallow app_zygote gpu_device:chr_file { { { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } { getattr execute execute_no_trans map } } };
# Do not allow app_zygote access to /cache.
neverallow app_zygote cache_file:dir ~{ { open getattr read search ioctl lock watch watch_reads } };
neverallow app_zygote cache_file:file ~{ read getattr };
# Do not allow most socket access. This is socket_class_set, excluding unix_dgram_socket,
# unix_stream_socket, and netlink_selinux_socket.
neverallow app_zygote domain:{
socket tcp_socket udp_socket rawip_socket netlink_socket packet_socket key_socket
appletalk_socket netlink_route_socket netlink_tcpdiag_socket
netlink_nflog_socket netlink_xfrm_socket netlink_audit_socket
netlink_dnrt_socket netlink_kobject_uevent_socket tun_socket netlink_iscsi_socket
netlink_fib_lookup_socket netlink_connector_socket netlink_netfilter_socket
netlink_generic_socket netlink_scsitransport_socket netlink_rdma_socket netlink_crypto_socket
sctp_socket icmp_socket ax25_socket ipx_socket netrom_socket atmpvc_socket
x25_socket rose_socket decnet_socket atmsvc_socket rds_socket irda_socket
pppox_socket llc_socket can_socket tipc_socket bluetooth_socket iucv_socket
rxrpc_socket isdn_socket phonet_socket ieee802154_socket caif_socket
alg_socket nfc_socket vsock_socket kcm_socket qipcrtr_socket smc_socket
} *;
# Only allow app_zygote to talk to the logd socket, and su on eng/userdebug.
# This is because cap_setuid/cap_setgid allow to forge uid/gid in
# SCM_CREDENTIALS. Think twice before changing.
neverallow app_zygote {
domain
-app_zygote
-logd
-system_server
}:unix_dgram_socket *;
neverallow app_zygote {
domain
-app_zygote
-prng_seeder
}:unix_stream_socket *;
# Never allow ptrace
neverallow app_zygote *:process ptrace;
# Do not allow access to Bluetooth-related system properties.
# neverallow rules for Bluetooth-related data files are listed above.
neverallow app_zygote {
bluetooth_a2dp_offload_prop
bluetooth_audio_hal_prop
bluetooth_prop
exported_bluetooth_prop
}:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
#line 1 "system/sepolicy/private/art_boot.te"
# ART boot oneshot service
type art_boot, domain, coredomain;
type art_boot_exec, exec_type, file_type, system_file_type;
#line 5
#line 5
# Allow the necessary permissions.
#line 5
#line 5
# Old domain may exec the file and transition to the new domain.
#line 5
allow init art_boot_exec:file { getattr open read execute map };
#line 5
allow init art_boot:process transition;
#line 5
# New domain is entered by executing the file.
#line 5
allow art_boot art_boot_exec:file { entrypoint open read execute getattr map };
#line 5
# New domain can send SIGCHLD to its caller.
#line 5
#line 5
# Enable AT_SECURE, i.e. libc secure mode.
#line 5
dontaudit init art_boot:process noatsecure;
#line 5
# XXX dontaudit candidate but requires further study.
#line 5
allow init art_boot:process { siginh rlimitinh };
#line 5
#line 5
# Make the transition occur by default.
#line 5
type_transition init art_boot_exec:process art_boot;
#line 5
#line 5
# Allow query of device config properties, typically experiment flags.
#line 8
allow art_boot device_config_runtime_native_boot_prop:file { getattr open read map };
#line 8
#line 9
allow art_boot device_config_runtime_native_prop:file { getattr open read map };
#line 9
# Allow ART to set its config properties at boot, mainly to be able to propagate
# experiment flags to properties that only may change at boot.
#line 13
#line 13
allow art_boot property_socket:sock_file write;
#line 13
allow art_boot init:unix_stream_socket connectto;
#line 13
#line 13
allow art_boot dalvik_config_prop_type:property_service set;
#line 13
#line 13
allow art_boot dalvik_config_prop_type:file { getattr open read map };
#line 13
#line 13
#line 1 "system/sepolicy/private/artd.te"
# ART service daemon.
typeattribute artd coredomain;
typeattribute artd mlstrustedsubject;
type artd_exec, system_file_type, exec_type, file_type;
type artd_tmpfs, file_type;
# Allow artd to publish a binder service and make binder calls.
#line 8
# Call the servicemanager and transfer references to it.
#line 8
allow artd servicemanager:binder { call transfer };
#line 8
# Allow servicemanager to send out callbacks
#line 8
allow servicemanager artd:binder { call transfer };
#line 8
# servicemanager performs getpidcon on clients.
#line 8
allow servicemanager artd:dir search;
#line 8
allow servicemanager artd:file { read open };
#line 8
allow servicemanager artd:process getattr;
#line 8
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 8
# all domains in domain.te.
#line 8
#line 9
allow artd artd_service:service_manager { add find };
#line 9
neverallow { domain -artd } artd_service:service_manager add;
#line 9
#line 9
# On debug builds with root, allow binder services to use binder over TCP.
#line 9
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 9
#line 9
#line 10
allow artd artd_pre_reboot_service:service_manager { add find };
#line 10
neverallow { domain -artd } artd_pre_reboot_service:service_manager add;
#line 10
#line 10
# On debug builds with root, allow binder services to use binder over TCP.
#line 10
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 10
#line 10
allow artd dumpstate:fifo_file { getattr write };
allow artd dumpstate:fd use;
#line 14
#line 14
# Allow the necessary permissions.
#line 14
#line 14
# Old domain may exec the file and transition to the new domain.
#line 14
allow init artd_exec:file { getattr open read execute map };
#line 14
allow init artd:process transition;
#line 14
# New domain is entered by executing the file.
#line 14
allow artd artd_exec:file { entrypoint open read execute getattr map };
#line 14
# New domain can send SIGCHLD to its caller.
#line 14
#line 14
# Enable AT_SECURE, i.e. libc secure mode.
#line 14
dontaudit init artd:process noatsecure;
#line 14
# XXX dontaudit candidate but requires further study.
#line 14
allow init artd:process { siginh rlimitinh };
#line 14
#line 14
# Make the transition occur by default.
#line 14
type_transition init artd_exec:process artd;
#line 14
#line 14
# Allow query ART device config properties
#line 17
allow artd device_config_runtime_native_prop:file { getattr open read map };
#line 17
#line 18
allow artd device_config_runtime_native_boot_prop:file { getattr open read map };
#line 18
# Access to "odsign.verification.success" for deciding whether to deny files in
# the ART APEX data directory.
#line 22
allow artd odsign_prop:file { getattr open read map };
#line 22
# Reading an APK opens a ZipArchive, which unpack to tmpfs.
# Use tmpfs_domain() which will give tmpfs files created by artd their
# own label, which differs from other labels created by other processes.
# This allows to distinguish in policy files created by artd vs other
# processes.
#line 29
type_transition artd tmpfs:file artd_tmpfs;
#line 29
allow artd artd_tmpfs:file { read write getattr map };
#line 29
# Allow testing userfaultfd support.
#line 32
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 32
type artd_userfaultfd;
#line 32
type_transition artd artd:anon_inode artd_userfaultfd "[userfaultfd]";
#line 32
# Allow domain to create/use userfaultfd anon_inode.
#line 32
allow artd artd_userfaultfd:anon_inode { create ioctl read };
#line 32
# Suppress errors generate during bugreport
#line 32
dontaudit su artd_userfaultfd:anon_inode *;
#line 32
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 32
neverallow { domain -artd } artd_userfaultfd:anon_inode *;
#line 32
# Read access to primary dex'es on writable partitions
# ({/data,/mnt/expand/<volume-uuid>}/app/...).
# Also allow creating the "oat" directory before restorecon.
allow artd mnt_expand_file:dir { getattr search };
allow artd apk_data_file:dir { { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } create setattr relabelfrom };
allow artd apk_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Read access to vendor APKs ({/vendor,/odm}/{app,priv-app}/...).
#line 42
allow artd vendor_app_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 42
allow artd vendor_app_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 42
# Read access to vendor overlay APKs ({/vendor,/odm,/oem,/apex/*}/overlay/...).
allow artd oemfs:dir { getattr search };
#line 46
allow artd vendor_overlay_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 46
allow artd vendor_overlay_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 46
# Vendor overlay can be found in vendor apex
allow artd vendor_apex_metadata_file:dir { getattr search };
# Read access to vendor shared libraries ({/vendor,/odm}/framework/...).
#line 51
allow artd vendor_framework_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 51
allow artd vendor_framework_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 51
# Read/write access to all compilation artifacts generated on device for apps'
# primary dex'es. (/data/dalvik-cache/..., /data/app/.../oat/..., etc.)
allow artd dalvikcache_data_file:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } relabelto };
allow artd dalvikcache_data_file:file { { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } } relabelto };
# Read access to the ART APEX data directory.
# Needed for reading the boot image generated on device.
allow artd apex_module_data_file:dir { getattr search };
#line 61
allow artd apex_art_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 61
allow artd apex_art_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 61
# Read access to /apex/apex-info-list.xml
# Needed for getting APEX versions.
allow artd apex_info_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow getting root capabilities to bypass permission checks.
# - "dac_override" and "dac_read_search" are for
# - reading secondary dex'es in app data directories (reading primary dex'es
# doesn't need root capabilities)
# - managing (CRUD) compilation artifacts in both APK directories for primary
# dex'es and in app data directories for secondary dex'es
# - managing (CRUD) profile files for both primary dex'es and secondary dex'es
# - "fowner" is for adjusting the file permissions of compilation artifacts and
# profile files based on whether they include user data or not.
# - "chown" is for transferring the ownership of compilation artifacts and
# profile files to the system or apps.
allow artd self:{ capability cap_userns } { dac_override dac_read_search fowner chown };
# Read/write access to profiles (/data/misc/profiles/{ref,cur}/...). Also allow
# scanning /data/misc/profiles/cur, for cleaning up obsolete managed files.
allow artd user_profile_root_file:dir { open getattr read search ioctl lock watch watch_reads };
allow artd user_profile_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow artd user_profile_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Read/write access to secondary dex files, their profiles, and their
# compilation artifacts
# ({/data,/mnt/expand/<volume-uuid>}/{user,user_de}/<user-id>/<package-name>/...).
allow artd app_data_file_type:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } relabelfrom relabelto };
allow artd app_data_file_type:file { { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } } relabelfrom relabelto };
# Allow symlinks for secondary dex files. This has be to restricted because
# symlinks can cause various security issues. We allow "privapp_data_file" just
# for GMS because so far we only see GMS using symlinks.
allow artd privapp_data_file:lnk_file { getattr read };
# Read access to SELinux context files, for restorecon.
allow artd file_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
allow artd seapp_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
# Check validity of SELinux context, for restorecon.
#line 102
#line 102
allow artd selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 102
allow artd selinuxfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 102
#line 102
allow artd selinuxfs:file { open append write lock map };
#line 102
allow artd kernel:security check_context;
#line 102
# Allow scanning /, for cleaning up obsolete managed files.
allow artd rootfs:dir { open getattr read search ioctl lock watch watch_reads };
# Allow scanning /data, for cleaning up obsolete managed files.
allow artd system_data_root_file:dir { open getattr read search ioctl lock watch watch_reads };
# Allow scanning /mnt, for cleaning up obsolete managed files.
allow artd tmpfs:dir { open getattr read search ioctl lock watch watch_reads };
# Allow scanning /mnt/expand, for cleaning up obsolete managed files.
allow artd mnt_expand_file:dir { open getattr read search ioctl lock watch watch_reads };
# Allow scanning {/data,/mnt/expand/<volume-uuid>}/{user,user_de}, for cleaning
# up obsolete managed files.
allow artd system_userdir_file:dir { open getattr read search ioctl lock watch watch_reads };
# Allow scanning {/data,/mnt/expand/<volume-uuid>}/{user,user_de}/<user-id> and
# /mnt/expand/<volume-uuid>, for cleaning up obsolete managed files.
allow artd system_data_file:dir { open getattr read search ioctl lock watch watch_reads };
# Never allow running other binaries without a domain transition.
# The only exception is art_exec. It is allowed to use the artd domain because
# it is a thin wrapper that executes other binaries on behalf of artd.
neverallow artd ~{art_exec_exec}:file execute_no_trans;
allow artd art_exec_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Allow running other binaries in their own domains.
#line 131
# Allow the necessary permissions.
#line 131
#line 131
# Old domain may exec the file and transition to the new domain.
#line 131
allow artd profman_exec:file { getattr open read execute map };
#line 131
allow artd profman:process transition;
#line 131
# New domain is entered by executing the file.
#line 131
allow profman profman_exec:file { entrypoint open read execute getattr map };
#line 131
# New domain can send SIGCHLD to its caller.
#line 131
allow profman artd:process sigchld;
#line 131
# Enable AT_SECURE, i.e. libc secure mode.
#line 131
dontaudit artd profman:process noatsecure;
#line 131
# XXX dontaudit candidate but requires further study.
#line 131
allow artd profman:process { siginh rlimitinh };
#line 131
#line 131
# Make the transition occur by default.
#line 131
type_transition artd profman_exec:process profman;
#line 131
#line 132
# Allow the necessary permissions.
#line 132
#line 132
# Old domain may exec the file and transition to the new domain.
#line 132
allow artd dex2oat_exec:file { getattr open read execute map };
#line 132
allow artd dex2oat:process transition;
#line 132
# New domain is entered by executing the file.
#line 132
allow dex2oat dex2oat_exec:file { entrypoint open read execute getattr map };
#line 132
# New domain can send SIGCHLD to its caller.
#line 132
allow dex2oat artd:process sigchld;
#line 132
# Enable AT_SECURE, i.e. libc secure mode.
#line 132
dontaudit artd dex2oat:process noatsecure;
#line 132
# XXX dontaudit candidate but requires further study.
#line 132
allow artd dex2oat:process { siginh rlimitinh };
#line 132
#line 132
# Make the transition occur by default.
#line 132
type_transition artd dex2oat_exec:process dex2oat;
#line 132
# Allow sending sigkill to subprocesses.
allow artd { profman dex2oat }:process sigkill;
# Allow reading process info (/proc/<pid>/...).
# This is needed for getting CPU time and wall time spent on subprocesses.
#line 139
allow artd profman:dir { open getattr read search ioctl lock watch watch_reads };
#line 139
allow artd profman:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 139
;
#line 140
allow artd dex2oat:dir { open getattr read search ioctl lock watch watch_reads };
#line 140
allow artd dex2oat:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 140
;
# Allow artd to reopen its own memfd.
# artd needs to reopen a memfd with readonly in order to pass it to subprocesses
# that don't have write permissions on memfds.
allow artd artd_tmpfs:file open;
#line 1 "system/sepolicy/private/asan_extract.te"
# type_transition must be private policy the domain_trans rules could stay
# public, but conceptually should go with this
# Technically not a daemon but we do want the transition from init domain to
# asan_extract to occur.
#line 11
#line 1 "system/sepolicy/private/atrace.te"
# Domain for atrace process.
# It is spawned either by traced_probes or by init for the boottrace service.
type atrace_exec, exec_type, file_type, system_file_type;
# boottrace services uses /data/misc/boottrace/categories
allow atrace boottrace_data_file:dir search;
allow atrace boottrace_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow atrace to access tracefs.
allow atrace debugfs_tracing:dir { open getattr read search ioctl lock watch watch_reads };
allow atrace debugfs_tracing:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow atrace debugfs_trace_marker:file getattr;
# Allow atrace to write data when a pipe is used for stdout/stderr.
# This is used by Perfetto to capture atrace stdout/stderr.
allow atrace traced_probes:fd use;
allow atrace traced_probes:fifo_file { getattr write };
# atrace sets debug.atrace.* properties
#line 21
#line 21
allow atrace property_socket:sock_file write;
#line 21
allow atrace init:unix_stream_socket connectto;
#line 21
#line 21
allow atrace debug_prop:property_service set;
#line 21
#line 21
allow atrace debug_prop:file { getattr open read map };
#line 21
#line 21
# atrace pokes all the binder-enabled processes at startup with a
# SYSPROPS_TRANSACTION, to tell them to reload the debug.atrace.* properties.
# Allow discovery of binder services.
allow atrace {
service_manager_type
-apex_service
-dnsresolver_service
-dumpstate_service
-incident_service
-installd_service
-lpdump_service
-mdns_service
-netd_service
-stats_service
-tracingproxy_service
-vold_service
-default_android_service
}:service_manager { find };
allow atrace servicemanager:service_manager list;
# Allow notifying the processes hosting specific binder services that
# trace-related system properties have changed.
#line 46
# Call the servicemanager and transfer references to it.
#line 46
allow atrace servicemanager:binder { call transfer };
#line 46
# Allow servicemanager to send out callbacks
#line 46
allow servicemanager atrace:binder { call transfer };
#line 46
# servicemanager performs getpidcon on clients.
#line 46
allow servicemanager atrace:dir search;
#line 46
allow servicemanager atrace:file { read open };
#line 46
allow servicemanager atrace:process getattr;
#line 46
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 46
# all domains in domain.te.
#line 46
allow atrace surfaceflinger:binder call;
allow atrace system_server:binder call;
allow atrace cameraserver:binder call;
# Similarly, on debug builds, allow specific HALs to be notified that
# trace-related system properties have changed.
#line 59
# Remove logspam from notification attempts to non-allowlisted services.
dontaudit atrace hwservice_manager_type:hwservice_manager find;
dontaudit atrace service_manager_type:service_manager find;
dontaudit atrace domain:binder call;
# atrace can call atrace HAL
#line 67
typeattribute atrace halclientdomain;
#line 67
typeattribute atrace hal_atrace_client;
#line 67
#line 67
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 67
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 67
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 67
#line 67
typeattribute atrace hal_atrace;
#line 67
# Find passthrough HAL implementations
#line 67
allow hal_atrace system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 67
allow hal_atrace vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 67
allow hal_atrace vendor_file:file { read open getattr execute map };
#line 67
#line 67
#line 69
allow atrace hwservicemanager_prop:file { getattr open read map };
#line 69
#line 79
dontaudit atrace debugfs_tracing_debug:file audit_access;
#line 1 "system/sepolicy/private/audioserver.te"
# audioserver - audio services daemon
typeattribute audioserver coredomain;
type audioserver_exec, exec_type, file_type, system_file_type;
#line 6
#line 6
# Allow the necessary permissions.
#line 6
#line 6
# Old domain may exec the file and transition to the new domain.
#line 6
allow init audioserver_exec:file { getattr open read execute map };
#line 6
allow init audioserver:process transition;
#line 6
# New domain is entered by executing the file.
#line 6
allow audioserver audioserver_exec:file { entrypoint open read execute getattr map };
#line 6
# New domain can send SIGCHLD to its caller.
#line 6
#line 6
# Enable AT_SECURE, i.e. libc secure mode.
#line 6
dontaudit init audioserver:process noatsecure;
#line 6
# XXX dontaudit candidate but requires further study.
#line 6
allow init audioserver:process { siginh rlimitinh };
#line 6
#line 6
# Make the transition occur by default.
#line 6
type_transition init audioserver_exec:process audioserver;
#line 6
#line 6
#line 7
type_transition audioserver tmpfs:file audioserver_tmpfs;
#line 7
allow audioserver audioserver_tmpfs:file { read write getattr map };
#line 7
#line 9
allow audioserver sdcard_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 9
allow audioserver sdcard_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 9
#line 10
allow audioserver fuse:dir { open getattr read search ioctl lock watch watch_reads };
#line 10
allow audioserver fuse:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 10
#line 12
# Call the servicemanager and transfer references to it.
#line 12
allow audioserver servicemanager:binder { call transfer };
#line 12
# Allow servicemanager to send out callbacks
#line 12
allow servicemanager audioserver:binder { call transfer };
#line 12
# servicemanager performs getpidcon on clients.
#line 12
allow servicemanager audioserver:dir search;
#line 12
allow servicemanager audioserver:file { read open };
#line 12
allow servicemanager audioserver:process getattr;
#line 12
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 12
# all domains in domain.te.
#line 12
#line 13
# Call the server domain and optionally transfer references to it.
#line 13
allow audioserver binderservicedomain:binder { call transfer };
#line 13
# Allow the serverdomain to transfer references to the client on the reply.
#line 13
allow binderservicedomain audioserver:binder transfer;
#line 13
# Receive and use open files from the server.
#line 13
allow audioserver binderservicedomain:fd use;
#line 13
#line 14
# Call the server domain and optionally transfer references to it.
#line 14
allow audioserver appdomain:binder { call transfer };
#line 14
# Allow the serverdomain to transfer references to the client on the reply.
#line 14
allow appdomain audioserver:binder transfer;
#line 14
# Receive and use open files from the server.
#line 14
allow audioserver appdomain:fd use;
#line 14
#line 15
typeattribute audioserver binderservicedomain;
#line 15
#line 17
typeattribute audioserver halclientdomain;
#line 17
typeattribute audioserver hal_allocator_client;
#line 17
#line 17
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 17
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 17
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 17
#line 17
typeattribute audioserver hal_allocator;
#line 17
# Find passthrough HAL implementations
#line 17
allow hal_allocator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 17
allow hal_allocator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 17
allow hal_allocator vendor_file:file { read open getattr execute map };
#line 17
#line 17
# /system/lib64/hw for always-passthrough Allocator HAL ashmem / mapper .so
#line 19
allow audioserver system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 19
allow audioserver system_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 19
#line 21
typeattribute audioserver halclientdomain;
#line 21
typeattribute audioserver hal_audio_client;
#line 21
#line 21
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 21
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 21
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 21
#line 21
typeattribute audioserver hal_audio;
#line 21
# Find passthrough HAL implementations
#line 21
allow hal_audio system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 21
allow hal_audio vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 21
allow hal_audio vendor_file:file { read open getattr execute map };
#line 21
#line 21
#line 31
#line 33
allow audioserver audioserver_service:service_manager { add find };
#line 33
neverallow { domain -audioserver } audioserver_service:service_manager add;
#line 33
#line 33
# On debug builds with root, allow binder services to use binder over TCP.
#line 33
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 33
#line 33
allow audioserver activity_service:service_manager find;
allow audioserver appops_service:service_manager find;
allow audioserver batterystats_service:service_manager find;
allow audioserver external_vibrator_service:service_manager find;
allow audioserver package_native_service:service_manager find;
allow audioserver permission_service:service_manager find;
allow audioserver permission_checker_service:service_manager find;
allow audioserver power_service:service_manager find;
allow audioserver scheduling_policy_service:service_manager find;
allow audioserver mediametrics_service:service_manager find;
allow audioserver sensor_privacy_service:service_manager find;
allow audioserver soundtrigger_middleware_service:service_manager find;
allow audioserver audio_service:service_manager find;
# Allow read/write access to bluetooth-specific properties
#line 49
#line 49
allow audioserver property_socket:sock_file write;
#line 49
allow audioserver init:unix_stream_socket connectto;
#line 49
#line 49
allow audioserver bluetooth_a2dp_offload_prop:property_service set;
#line 49
#line 49
allow audioserver bluetooth_a2dp_offload_prop:file { getattr open read map };
#line 49
#line 49
#line 50
#line 50
allow audioserver property_socket:sock_file write;
#line 50
allow audioserver init:unix_stream_socket connectto;
#line 50
#line 50
allow audioserver bluetooth_audio_hal_prop:property_service set;
#line 50
#line 50
allow audioserver bluetooth_audio_hal_prop:file { getattr open read map };
#line 50
#line 50
#line 51
#line 51
allow audioserver property_socket:sock_file write;
#line 51
allow audioserver init:unix_stream_socket connectto;
#line 51
#line 51
allow audioserver bluetooth_prop:property_service set;
#line 51
#line 51
allow audioserver bluetooth_prop:file { getattr open read map };
#line 51
#line 51
#line 52
#line 52
allow audioserver property_socket:sock_file write;
#line 52
allow audioserver init:unix_stream_socket connectto;
#line 52
#line 52
allow audioserver exported_bluetooth_prop:property_service set;
#line 52
#line 52
allow audioserver exported_bluetooth_prop:file { getattr open read map };
#line 52
#line 52
# Grant access to audio files to audioserver
allow audioserver audio_data_file:dir { { open getattr read search ioctl lock watch watch_reads } add_name write };
allow audioserver audio_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# allow access to ALSA MMAP FDs for AAudio API
allow audioserver audio_device:chr_file { read write };
allow audioserver audio_device:dir { open getattr read search ioctl lock watch watch_reads };
allow audioserver audio_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# For A2DP bridge which is loaded directly into audioserver
#line 65
allow audioserver bluetooth_socket:sock_file write;
#line 65
allow audioserver bluetooth:unix_stream_socket connectto;
#line 65
# Allow shell commands from ADB and shell for CTS testing/dumping
allow audioserver adbd:fd use;
allow audioserver adbd:unix_stream_socket { read write };
allow audioserver shell:fifo_file { read write };
# Allow shell commands from ADB for CTS testing/dumping
#line 77
# Allow write access to log tag property
#line 80
#line 80
allow audioserver property_socket:sock_file write;
#line 80
allow audioserver init:unix_stream_socket connectto;
#line 80
#line 80
allow audioserver log_tag_prop:property_service set;
#line 80
#line 80
allow audioserver log_tag_prop:file { getattr open read map };
#line 80
#line 80
;
###
### neverallow rules
###
# audioserver should never execute any executable without a
# domain transition
neverallow audioserver { file_type fs_type }:file execute_no_trans;
# The goal of the mediaserver split is to place media processing code into
# restrictive sandboxes with limited responsibilities and thus limited
# permissions. Example: Audioserver is only responsible for controlling audio
# hardware and processing audio content. Cameraserver does the same for camera
# hardware/content. Etc.
#
# Media processing code is inherently risky and thus should have limited
# permissions and be isolated from the rest of the system and network.
# Lengthier explanation here:
# https://android-developers.googleblog.com/2016/05/hardening-media-stack.html
neverallow audioserver domain:{ udp_socket rawip_socket } *;
neverallow audioserver { domain }:tcp_socket *;
# Allow using wake locks
#line 104
# TODO(b/115946999): Remove /sys/power/* permissions once CONFIG_PM_WAKELOCKS is
#line 104
# deprecated.
#line 104
# Access /sys/power/wake_lock and /sys/power/wake_unlock
#line 104
allow audioserver sysfs_wake_lock:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 104
# Accessing these files requires CAP_BLOCK_SUSPEND
#line 104
allow audioserver self:{ capability2 cap2_userns } block_suspend;
#line 104
# system_suspend permissions
#line 104
#line 104
# Call the server domain and optionally transfer references to it.
#line 104
allow audioserver system_suspend_server:binder { call transfer };
#line 104
# Allow the serverdomain to transfer references to the client on the reply.
#line 104
allow system_suspend_server audioserver:binder transfer;
#line 104
# Receive and use open files from the server.
#line 104
allow audioserver system_suspend_server:fd use;
#line 104
#line 104
allow audioserver system_suspend_hwservice:hwservice_manager find;
#line 104
# halclientdomain permissions
#line 104
#line 104
# Call the hwservicemanager and transfer references to it.
#line 104
allow audioserver hwservicemanager:binder { call transfer };
#line 104
# Allow hwservicemanager to send out callbacks
#line 104
allow hwservicemanager audioserver:binder { call transfer };
#line 104
# hwservicemanager performs getpidcon on clients.
#line 104
allow hwservicemanager audioserver:dir search;
#line 104
allow hwservicemanager audioserver:file { read open map };
#line 104
allow hwservicemanager audioserver:process getattr;
#line 104
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 104
# all domains in domain.te.
#line 104
#line 104
#line 104
allow audioserver hwservicemanager_prop:file { getattr open read map };
#line 104
#line 104
allow audioserver hidl_manager_hwservice:hwservice_manager find;
#line 104
# AIDL suspend hal permissions
#line 104
allow audioserver hal_system_suspend_service:service_manager find;
#line 104
#line 104
# Call the servicemanager and transfer references to it.
#line 104
allow audioserver servicemanager:binder { call transfer };
#line 104
# Allow servicemanager to send out callbacks
#line 104
allow servicemanager audioserver:binder { call transfer };
#line 104
# servicemanager performs getpidcon on clients.
#line 104
allow servicemanager audioserver:dir search;
#line 104
allow servicemanager audioserver:file { read open };
#line 104
allow servicemanager audioserver:process getattr;
#line 104
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 104
# all domains in domain.te.
#line 104
#line 104
# Allow reading audio config props, e.g. af.fast_track_multiplier
#line 107
allow audioserver audio_config_prop:file { getattr open read map };
#line 107
#line 108
allow audioserver system_audio_config_prop:file { getattr open read map };
#line 108
#line 1 "system/sepolicy/private/auditctl.te"
#
# /system/bin/auditctl executed for logd
#
# Performs maintenance of the kernel auditing system, including
# setting rate limits on SELinux denials.
#
type auditctl, domain, coredomain;
type auditctl_exec, file_type, system_file_type, exec_type;
# Uncomment the line below to put this domain into permissive
# mode. This helps speed SELinux policy development.
# userdebug_or_eng(`permissive auditctl;')
#line 15
#line 15
# Allow the necessary permissions.
#line 15
#line 15
# Old domain may exec the file and transition to the new domain.
#line 15
allow init auditctl_exec:file { getattr open read execute map };
#line 15
allow init auditctl:process transition;
#line 15
# New domain is entered by executing the file.
#line 15
allow auditctl auditctl_exec:file { entrypoint open read execute getattr map };
#line 15
# New domain can send SIGCHLD to its caller.
#line 15
#line 15
# Enable AT_SECURE, i.e. libc secure mode.
#line 15
dontaudit init auditctl:process noatsecure;
#line 15
# XXX dontaudit candidate but requires further study.
#line 15
allow init auditctl:process { siginh rlimitinh };
#line 15
#line 15
# Make the transition occur by default.
#line 15
type_transition init auditctl_exec:process auditctl;
#line 15
#line 15
allow auditctl self:{ capability cap_userns } audit_control;
allow auditctl self:netlink_audit_socket { { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } } nlmsg_write };
#line 1 "system/sepolicy/private/automotive_display_service.te"
# Display proxy service for Automotive
type automotive_display_service, domain, coredomain;
type automotive_display_service_exec, system_file_type, exec_type, file_type;
typeattribute automotive_display_service automotive_display_service_server;
# Allow to add a display service to the hwservicemanager
#line 8
allow automotive_display_service fwk_automotive_display_hwservice:hwservice_manager { add find };
#line 8
allow automotive_display_service hidl_base_hwservice:hwservice_manager add;
#line 8
neverallow { domain -automotive_display_service } fwk_automotive_display_hwservice:hwservice_manager add;
#line 8
;
# Allow init to launch automotive display service
#line 11
#line 11
# Allow the necessary permissions.
#line 11
#line 11
# Old domain may exec the file and transition to the new domain.
#line 11
allow init automotive_display_service_exec:file { getattr open read execute map };
#line 11
allow init automotive_display_service:process transition;
#line 11
# New domain is entered by executing the file.
#line 11
allow automotive_display_service automotive_display_service_exec:file { entrypoint open read execute getattr map };
#line 11
# New domain can send SIGCHLD to its caller.
#line 11
#line 11
# Enable AT_SECURE, i.e. libc secure mode.
#line 11
dontaudit init automotive_display_service:process noatsecure;
#line 11
# XXX dontaudit candidate but requires further study.
#line 11
allow init automotive_display_service:process { siginh rlimitinh };
#line 11
#line 11
# Make the transition occur by default.
#line 11
type_transition init automotive_display_service_exec:process automotive_display_service;
#line 11
#line 11
# Allow to use Binder IPC for SurfaceFlinger.
#line 14
# Call the servicemanager and transfer references to it.
#line 14
allow automotive_display_service servicemanager:binder { call transfer };
#line 14
# Allow servicemanager to send out callbacks
#line 14
allow servicemanager automotive_display_service:binder { call transfer };
#line 14
# servicemanager performs getpidcon on clients.
#line 14
allow servicemanager automotive_display_service:dir search;
#line 14
allow servicemanager automotive_display_service:file { read open };
#line 14
allow servicemanager automotive_display_service:process getattr;
#line 14
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 14
# all domains in domain.te.
#line 14
# Allow to use HwBinder IPC for HAL implementations.
#line 17
# Call the hwservicemanager and transfer references to it.
#line 17
allow automotive_display_service hwservicemanager:binder { call transfer };
#line 17
# Allow hwservicemanager to send out callbacks
#line 17
allow hwservicemanager automotive_display_service:binder { call transfer };
#line 17
# hwservicemanager performs getpidcon on clients.
#line 17
allow hwservicemanager automotive_display_service:dir search;
#line 17
allow hwservicemanager automotive_display_service:file { read open map };
#line 17
allow hwservicemanager automotive_display_service:process getattr;
#line 17
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 17
# all domains in domain.te.
#line 17
#line 18
typeattribute automotive_display_service halclientdomain;
#line 18
typeattribute automotive_display_service hal_graphics_composer_client;
#line 18
#line 18
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 18
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 18
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 18
#line 18
typeattribute automotive_display_service hal_graphics_composer;
#line 18
# Find passthrough HAL implementations
#line 18
allow hal_graphics_composer system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 18
allow hal_graphics_composer vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 18
allow hal_graphics_composer vendor_file:file { read open getattr execute map };
#line 18
#line 18
#line 19
typeattribute automotive_display_service halclientdomain;
#line 19
typeattribute automotive_display_service hal_graphics_allocator_client;
#line 19
#line 19
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 19
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 19
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 19
#line 19
typeattribute automotive_display_service hal_graphics_allocator;
#line 19
# Find passthrough HAL implementations
#line 19
allow hal_graphics_allocator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 19
allow hal_graphics_allocator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 19
allow hal_graphics_allocator vendor_file:file { read open getattr execute map };
#line 19
#line 19
# Allow to read the target property.
#line 22
allow automotive_display_service hwservicemanager_prop:file { getattr open read map };
#line 22
# Allow to find SurfaceFlinger.
allow automotive_display_service surfaceflinger_service:service_manager find;
# Allow client domain to do binder IPC to serverdomain.
#line 28
# Call the server domain and optionally transfer references to it.
#line 28
allow automotive_display_service surfaceflinger:binder { call transfer };
#line 28
# Allow the serverdomain to transfer references to the client on the reply.
#line 28
allow surfaceflinger automotive_display_service:binder transfer;
#line 28
# Receive and use open files from the server.
#line 28
allow automotive_display_service surfaceflinger:fd use;
#line 28
# Allow to use a graphics mapper
allow automotive_display_service hal_graphics_mapper_hwservice:hwservice_manager find;
# Allow to use hidl token service
allow automotive_display_service hidl_token_hwservice:hwservice_manager find;
# Allow to access EGL files
allow automotive_display_service gpu_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow automotive_display_service gpu_device:dir search;
# Allow to add a service to the servicemanager
#line 41
allow automotive_display_service fwk_automotive_display_service:service_manager { add find };
#line 41
neverallow { domain -automotive_display_service } fwk_automotive_display_service:service_manager add;
#line 41
#line 41
# On debug builds with root, allow binder services to use binder over TCP.
#line 41
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 41
#line 41
;
# Allow to communicate with EVS services
#line 44
# Call the server domain and optionally transfer references to it.
#line 44
allow automotive_display_service hal_evs:binder { call transfer };
#line 44
# Allow the serverdomain to transfer references to the client on the reply.
#line 44
allow hal_evs automotive_display_service:binder transfer;
#line 44
# Receive and use open files from the server.
#line 44
allow automotive_display_service hal_evs:fd use;
#line 44
#line 1 "system/sepolicy/private/binderservicedomain.te"
# Rules common to some specific binder service domains.
# Deprecated. Consider granting the exact permissions required by your service.
# Allow dumpstate and incidentd to collect information from binder services
allow binderservicedomain { dumpstate incidentd }:fd use;
allow binderservicedomain { dumpstate incidentd }:unix_stream_socket { read write getopt getattr };
allow binderservicedomain { dumpstate incidentd }:fifo_file { getattr write };
allow binderservicedomain shell_data_file:file { getattr write };
# Allow dumpsys to work from adb shell or the serial console
allow binderservicedomain devpts:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow binderservicedomain console_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Receive and write to a pipe received over Binder from an app.
allow binderservicedomain appdomain:fd use;
allow binderservicedomain appdomain:fifo_file write;
# allow all services to run permission checks
allow binderservicedomain permission_service:service_manager find;
allow binderservicedomain keystore:keystore2_key { delete get_info rebind use };
#line 23
allow keystore binderservicedomain:dir search;
#line 23
allow keystore binderservicedomain:file { read open };
#line 23
allow keystore binderservicedomain:process getattr;
#line 23
allow binderservicedomain apc_service:service_manager find;
#line 23
allow binderservicedomain keystore_service:service_manager find;
#line 23
allow binderservicedomain legacykeystore_service:service_manager find;
#line 23
#line 23
# Call the server domain and optionally transfer references to it.
#line 23
allow binderservicedomain keystore:binder { call transfer };
#line 23
# Allow the serverdomain to transfer references to the client on the reply.
#line 23
allow keystore binderservicedomain:binder transfer;
#line 23
# Receive and use open files from the server.
#line 23
allow binderservicedomain keystore:fd use;
#line 23
#line 23
#line 23
# Call the server domain and optionally transfer references to it.
#line 23
allow keystore binderservicedomain:binder { call transfer };
#line 23
# Allow the serverdomain to transfer references to the client on the reply.
#line 23
allow binderservicedomain keystore:binder transfer;
#line 23
# Receive and use open files from the server.
#line 23
allow keystore binderservicedomain:fd use;
#line 23
#line 23
# binderservicedomain is using apex_info via libvintf
#line 25
allow binderservicedomain apex_mnt_dir:dir { open getattr read search ioctl lock watch watch_reads };
#line 25
allow binderservicedomain apex_info_file:file { getattr open read ioctl lock map watch watch_reads };
#line 25
#line 25
allow binderservicedomain vendor_apex_metadata_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 25
allow binderservicedomain vendor_apex_metadata_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 25
#line 25
#line 1 "system/sepolicy/private/blank_screen.te"
type blank_screen, domain, coredomain;
type blank_screen_exec, exec_type, file_type, system_file_type;
#line 4
#line 4
# Allow the necessary permissions.
#line 4
#line 4
# Old domain may exec the file and transition to the new domain.
#line 4
allow init blank_screen_exec:file { getattr open read execute map };
#line 4
allow init blank_screen:process transition;
#line 4
# New domain is entered by executing the file.
#line 4
allow blank_screen blank_screen_exec:file { entrypoint open read execute getattr map };
#line 4
# New domain can send SIGCHLD to its caller.
#line 4
#line 4
# Enable AT_SECURE, i.e. libc secure mode.
#line 4
dontaudit init blank_screen:process noatsecure;
#line 4
# XXX dontaudit candidate but requires further study.
#line 4
allow init blank_screen:process { siginh rlimitinh };
#line 4
#line 4
# Make the transition occur by default.
#line 4
type_transition init blank_screen_exec:process blank_screen;
#line 4
#line 4
# hal_light_client has access to hal_light_server
#line 7
typeattribute blank_screen halclientdomain;
#line 7
typeattribute blank_screen hal_light_client;
#line 7
#line 7
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 7
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 7
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 7
#line 7
typeattribute blank_screen hal_light;
#line 7
# Find passthrough HAL implementations
#line 7
allow hal_light system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 7
allow hal_light vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 7
allow hal_light vendor_file:file { read open getattr execute map };
#line 7
#line 7
#line 1 "system/sepolicy/private/blkid.te"
# blkid called from vold
typeattribute blkid coredomain;
type blkid_exec, system_file_type, exec_type, file_type;
# Allowed read-only access to encrypted devices to extract UUID/label
allow blkid block_device:dir search;
allow blkid userdata_block_device:blk_file { getattr open read ioctl lock map watch watch_reads };
allow blkid dm_device:blk_file { getattr open read ioctl lock map watch watch_reads };
# Allow stdin/out back to vold
allow blkid vold:fd use;
allow blkid vold:fifo_file { read write getattr };
# For blkid launched through popen()
allow blkid blkid_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Only allow entry from vold
neverallow { domain -vold } blkid:process transition;
neverallow * blkid:process dyntransition;
neverallow blkid { file_type fs_type -blkid_exec -shell_exec }:file entrypoint;
#line 1 "system/sepolicy/private/blkid_untrusted.te"
# blkid for untrusted block devices
typeattribute blkid_untrusted coredomain;
# Allowed read-only access to vold block devices to extract UUID/label
allow blkid_untrusted block_device:dir search;
allow blkid_untrusted vold_device:blk_file { getattr open read ioctl lock map watch watch_reads };
# Allow stdin/out back to vold
allow blkid_untrusted vold:fd use;
allow blkid_untrusted vold:fifo_file { read write getattr };
# For blkid launched through popen()
allow blkid_untrusted blkid_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
###
### neverallow rules
###
# Untrusted blkid should never be run on block devices holding sensitive data
neverallow blkid_untrusted {
boot_block_device
frp_block_device
metadata_block_device
recovery_block_device
root_block_device
swap_block_device
system_block_device
userdata_block_device
cache_block_device
dm_device
}:blk_file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Only allow entry from vold via blkid binary
neverallow { domain -vold } blkid_untrusted:process transition;
neverallow * blkid_untrusted:process dyntransition;
neverallow blkid_untrusted { file_type fs_type -blkid_exec -shell_exec }:file entrypoint;
#line 1 "system/sepolicy/private/bluetooth.te"
# bluetooth app
typeattribute bluetooth coredomain, mlstrustedsubject;
#line 5
typeattribute bluetooth appdomain;
#line 5
# Label tmpfs objects for all apps.
#line 5
type_transition bluetooth tmpfs:file appdomain_tmpfs;
#line 5
#line 5
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 5
type bluetooth_userfaultfd;
#line 5
type_transition bluetooth bluetooth:anon_inode bluetooth_userfaultfd "[userfaultfd]";
#line 5
# Allow domain to create/use userfaultfd anon_inode.
#line 5
allow bluetooth bluetooth_userfaultfd:anon_inode { create ioctl read };
#line 5
# Suppress errors generate during bugreport
#line 5
dontaudit su bluetooth_userfaultfd:anon_inode *;
#line 5
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 5
neverallow { domain -bluetooth } bluetooth_userfaultfd:anon_inode *;
#line 5
#line 5
allow bluetooth appdomain_tmpfs:file { execute getattr map read write };
#line 5
neverallow { bluetooth -runas_app -shell -simpleperf } { domain -bluetooth }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 5
neverallow { appdomain -runas_app -shell -simpleperf -bluetooth } bluetooth:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 5
# The Android security model guarantees the confidentiality and integrity
#line 5
# of application data and execution state. Ptrace bypasses those
#line 5
# confidentiality guarantees. Disallow ptrace access from system components to
#line 5
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 5
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 5
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 5
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 5
# live lock conditions.
#line 5
neverallow { domain -bluetooth -crash_dump -runas_app -simpleperf } bluetooth:process ptrace;
#line 5
#line 6
typeattribute bluetooth netdomain;
#line 6
# Socket creation under /data/misc/bluedroid.
type_transition bluetooth bluetooth_data_file:sock_file bluetooth_socket;
# Allow access to net_admin ioctls
allowxperm bluetooth self:udp_socket ioctl
#line 12
{
#line 12
# qualcomm rmnet ioctls
#line 12
0x00006900 0x00006902
#line 12
# socket ioctls
#line 12
0x0000890b 0x0000890c 0x0000890d 0x00008911 0x00008914 0x00008916
#line 12
0x00008918 0x0000891a 0x0000891c 0x0000891d 0x0000891e 0x0000891f
#line 12
0x00008920 0x00008922 0x00008923 0x00008924 0x00008925 0x00008926
#line 12
0x00008927 0x00008929 0x00008930 0x00008931 0x00008932
#line 12
0x00008934 0x00008935 0x00008936 0x00008937 0x00008939 0x00008940 0x00008941
#line 12
0x00008943 0x00008946 0x00008947 0x00008948 0x00008949 0x0000894a
#line 12
0x0000894b 0x00008953 0x00008954 0x00008955 0x00008960 0x00008961 0x00008962 0x00008970
#line 12
0x00008971 0x00008980 0x00008981 0x00008982 0x00008983 0x00008990
#line 12
0x00008991 0x00008992 0x00008993 0x00008994
#line 12
0x00008995 0x000089a0 0x000089a1 0x000089a2 0x000089a3 0x000089b0
#line 12
# device and protocol specific ioctls
#line 12
0x000089f0-0x000089ff
#line 12
0x000089e0-0x000089ef
#line 12
# Wireless extension ioctls
#line 12
0x00008b00 0x00008b02 0x00008b04 0x00008b06 0x00008b08 0x00008b0a
#line 12
0x00008b0c 0x00008b0e 0x00008b10 0x00008b14 0x00008b15 0x00008b16 0x00008b17
#line 12
0x00008b18 0x00008b19 0x00008b1a 0x00008b1b 0x00008b1c 0x00008b1d
#line 12
0x00008b20 0x00008b22 0x00008b24 0x00008b26 0x00008b28 0x00008b2a
#line 12
0x00008b2b 0x00008b2c 0x00008b30 0x00008b31 0x00008b32 0x00008b33
#line 12
0x00008b34 0x00008b35 0x00008b36
#line 12
# Dev private ioctl i.e. hardware specific ioctls
#line 12
0x00008be0-0x00008bff
#line 12
};
#line 14
# TODO(b/115946999): Remove /sys/power/* permissions once CONFIG_PM_WAKELOCKS is
#line 14
# deprecated.
#line 14
# Access /sys/power/wake_lock and /sys/power/wake_unlock
#line 14
allow bluetooth sysfs_wake_lock:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 14
# Accessing these files requires CAP_BLOCK_SUSPEND
#line 14
allow bluetooth self:{ capability2 cap2_userns } block_suspend;
#line 14
# system_suspend permissions
#line 14
#line 14
# Call the server domain and optionally transfer references to it.
#line 14
allow bluetooth system_suspend_server:binder { call transfer };
#line 14
# Allow the serverdomain to transfer references to the client on the reply.
#line 14
allow system_suspend_server bluetooth:binder transfer;
#line 14
# Receive and use open files from the server.
#line 14
allow bluetooth system_suspend_server:fd use;
#line 14
#line 14
allow bluetooth system_suspend_hwservice:hwservice_manager find;
#line 14
# halclientdomain permissions
#line 14
#line 14
# Call the hwservicemanager and transfer references to it.
#line 14
allow bluetooth hwservicemanager:binder { call transfer };
#line 14
# Allow hwservicemanager to send out callbacks
#line 14
allow hwservicemanager bluetooth:binder { call transfer };
#line 14
# hwservicemanager performs getpidcon on clients.
#line 14
allow hwservicemanager bluetooth:dir search;
#line 14
allow hwservicemanager bluetooth:file { read open map };
#line 14
allow hwservicemanager bluetooth:process getattr;
#line 14
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 14
# all domains in domain.te.
#line 14
#line 14
#line 14
allow bluetooth hwservicemanager_prop:file { getattr open read map };
#line 14
#line 14
allow bluetooth hidl_manager_hwservice:hwservice_manager find;
#line 14
# AIDL suspend hal permissions
#line 14
allow bluetooth hal_system_suspend_service:service_manager find;
#line 14
#line 14
# Call the servicemanager and transfer references to it.
#line 14
allow bluetooth servicemanager:binder { call transfer };
#line 14
# Allow servicemanager to send out callbacks
#line 14
allow servicemanager bluetooth:binder { call transfer };
#line 14
# servicemanager performs getpidcon on clients.
#line 14
allow servicemanager bluetooth:dir search;
#line 14
allow servicemanager bluetooth:file { read open };
#line 14
allow servicemanager bluetooth:process getattr;
#line 14
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 14
# all domains in domain.te.
#line 14
#line 14
;
# Data file accesses.
allow bluetooth bluetooth_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow bluetooth bluetooth_data_file:{ file lnk_file sock_file fifo_file } { { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } } link };
allow bluetooth bluetooth_logs_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow bluetooth bluetooth_logs_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Socket creation under /data/misc/bluedroid.
allow bluetooth bluetooth_socket:sock_file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow bluetooth self:{ capability cap_userns } net_admin;
allow bluetooth self:{ capability2 cap2_userns } wake_alarm;
# tethering
allow bluetooth self:packet_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow bluetooth self:{ capability cap_userns } { net_admin net_raw net_bind_service };
allow bluetooth self:tun_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow bluetooth tun_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allowxperm bluetooth tun_device:chr_file ioctl { 0x800454d2 0x400454ca };
allow bluetooth efs_file:dir search;
# allow Bluetooth to access uhid device for HID profile
allow bluetooth uhid_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow bluetooth gpu_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow bluetooth gpu_device:dir { open getattr read search ioctl lock watch watch_reads };
# proc access.
allow bluetooth proc_bluetooth_writable:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# For Bluetooth to check what profile are available
allow bluetooth proc_filesystems:file { getattr open read ioctl lock map watch watch_reads };
#line 47
allow bluetooth incremental_prop:file { getattr open read map };
#line 47
# For Bluetooth to check security logging state
#line 50
allow bluetooth device_logging_prop:file { getattr open read map };
#line 50
# Allow write access to bluetooth specific properties
#line 53
#line 53
allow bluetooth property_socket:sock_file write;
#line 53
allow bluetooth init:unix_stream_socket connectto;
#line 53
#line 53
allow bluetooth binder_cache_bluetooth_server_prop:property_service set;
#line 53
#line 53
allow bluetooth binder_cache_bluetooth_server_prop:file { getattr open read map };
#line 53
#line 53
;
neverallow { domain -bluetooth -init }
binder_cache_bluetooth_server_prop:property_service set;
#line 56
#line 56
allow bluetooth property_socket:sock_file write;
#line 56
allow bluetooth init:unix_stream_socket connectto;
#line 56
#line 56
allow bluetooth bluetooth_a2dp_offload_prop:property_service set;
#line 56
#line 56
allow bluetooth bluetooth_a2dp_offload_prop:file { getattr open read map };
#line 56
#line 56
#line 57
#line 57
allow bluetooth property_socket:sock_file write;
#line 57
allow bluetooth init:unix_stream_socket connectto;
#line 57
#line 57
allow bluetooth bluetooth_audio_hal_prop:property_service set;
#line 57
#line 57
allow bluetooth bluetooth_audio_hal_prop:file { getattr open read map };
#line 57
#line 57
#line 58
#line 58
allow bluetooth property_socket:sock_file write;
#line 58
allow bluetooth init:unix_stream_socket connectto;
#line 58
#line 58
allow bluetooth bluetooth_prop:property_service set;
#line 58
#line 58
allow bluetooth bluetooth_prop:file { getattr open read map };
#line 58
#line 58
#line 59
#line 59
allow bluetooth property_socket:sock_file write;
#line 59
allow bluetooth init:unix_stream_socket connectto;
#line 59
#line 59
allow bluetooth exported_bluetooth_prop:property_service set;
#line 59
#line 59
allow bluetooth exported_bluetooth_prop:file { getattr open read map };
#line 59
#line 59
#line 60
#line 60
allow bluetooth property_socket:sock_file write;
#line 60
allow bluetooth init:unix_stream_socket connectto;
#line 60
#line 60
allow bluetooth pan_result_prop:property_service set;
#line 60
#line 60
allow bluetooth pan_result_prop:file { getattr open read map };
#line 60
#line 60
allow bluetooth audioserver_service:service_manager find;
allow bluetooth bluetooth_service:service_manager find;
allow bluetooth drmserver_service:service_manager find;
allow bluetooth mediaserver_service:service_manager find;
allow bluetooth radio_service:service_manager find;
allow bluetooth app_api_service:service_manager find;
allow bluetooth system_api_service:service_manager find;
allow bluetooth network_stack_service:service_manager find;
allow bluetooth system_suspend_control_service:service_manager find;
allow bluetooth hal_audio_service:service_manager find;
# already open bugreport file descriptors may be shared with
# the bluetooth process, from a file in
# /data/data/com.android.shell/files/bugreports/bugreport-*.
allow bluetooth shell_data_file:file read;
# Bluetooth audio needs RT scheduling to meet deadlines, allow sys_nice
allow bluetooth self:{ capability cap_userns } sys_nice;
#line 81
typeattribute bluetooth halclientdomain;
#line 81
typeattribute bluetooth hal_bluetooth_client;
#line 81
#line 81
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 81
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 81
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 81
#line 81
typeattribute bluetooth hal_bluetooth;
#line 81
# Find passthrough HAL implementations
#line 81
allow hal_bluetooth system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 81
allow hal_bluetooth vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 81
allow hal_bluetooth vendor_file:file { read open getattr execute map };
#line 81
#line 81
#line 82
typeattribute bluetooth halclientdomain;
#line 82
typeattribute bluetooth hal_telephony_client;
#line 82
#line 82
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 82
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 82
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 82
#line 82
typeattribute bluetooth hal_telephony;
#line 82
# Find passthrough HAL implementations
#line 82
allow hal_telephony system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 82
allow hal_telephony vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 82
allow hal_telephony vendor_file:file { read open getattr execute map };
#line 82
#line 82
# Bluetooth A2DP offload requires binding with audio HAL
#line 85
typeattribute bluetooth halclientdomain;
#line 85
typeattribute bluetooth hal_audio_client;
#line 85
#line 85
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 85
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 85
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 85
#line 85
typeattribute bluetooth hal_audio;
#line 85
# Find passthrough HAL implementations
#line 85
allow hal_audio system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 85
allow hal_audio vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 85
allow hal_audio vendor_file:file { read open getattr execute map };
#line 85
#line 85
#line 87
allow bluetooth runtime_event_log_tags_file:file { getattr open read ioctl lock map watch watch_reads };
#line 87
###
### Neverallow rules
###
### These are things that the bluetooth app should NEVER be able to do
###
# Superuser capabilities.
# Bluetooth requires net_{admin,raw,bind_service} and wake_alarm and block_suspend and sys_nice.
neverallow bluetooth self:{ capability cap_userns } ~{ net_admin net_raw net_bind_service sys_nice};
neverallow bluetooth self:{ capability2 cap2_userns } ~{ wake_alarm block_suspend };
#line 1 "system/sepolicy/private/bluetoothdomain.te"
# Allow clients to use a socket provided by the bluetooth app.
allow bluetoothdomain bluetooth:unix_stream_socket { getopt setopt getattr read write ioctl shutdown };
#line 1 "system/sepolicy/private/bootanim.te"
typeattribute bootanim coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init bootanim_exec:file { getattr open read execute map };
#line 3
allow init bootanim:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow bootanim bootanim_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init bootanim:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init bootanim:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init bootanim_exec:process bootanim;
#line 3
#line 3
# b/68864350
dontaudit bootanim unlabeled:dir search;
# Bootanim should not be reading default vendor-defined properties.
dontaudit bootanim vendor_default_prop:file read;
# Read ro.boot.bootreason b/30654343
#line 12
allow bootanim bootloader_boot_reason_prop:file { getattr open read map };
#line 12
#line 14
allow bootanim bootanim_config_prop:file { getattr open read map };
#line 14
# Allow updating boot animation status.
#line 17
#line 17
allow bootanim property_socket:sock_file write;
#line 17
allow bootanim init:unix_stream_socket connectto;
#line 17
#line 17
allow bootanim bootanim_system_prop:property_service set;
#line 17
#line 17
allow bootanim bootanim_system_prop:file { getattr open read map };
#line 17
#line 17
# Allow accessing /data/misc/bootanim
#line 20
allow bootanim bootanim_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 20
allow bootanim bootanim_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 20
# Allow accessing vendor apex for EGL/GLES
allow bootanim vendor_apex_metadata_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 1 "system/sepolicy/private/bootstat.te"
typeattribute bootstat coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init bootstat_exec:file { getattr open read execute map };
#line 3
allow init bootstat:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow bootstat bootstat_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init bootstat:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init bootstat:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init bootstat_exec:process bootstat;
#line 3
#line 3
# Collect metrics on boot time created by init
#line 6
allow bootstat boottime_prop:file { getattr open read map };
#line 6
# Read/Write [persist.]sys.boot.reason and ro.boot.bootreason (write if empty)
#line 9
#line 9
allow bootstat property_socket:sock_file write;
#line 9
allow bootstat init:unix_stream_socket connectto;
#line 9
#line 9
allow bootstat bootloader_boot_reason_prop:property_service set;
#line 9
#line 9
allow bootstat bootloader_boot_reason_prop:file { getattr open read map };
#line 9
#line 9
#line 10
#line 10
allow bootstat property_socket:sock_file write;
#line 10
allow bootstat init:unix_stream_socket connectto;
#line 10
#line 10
allow bootstat system_boot_reason_prop:property_service set;
#line 10
#line 10
allow bootstat system_boot_reason_prop:file { getattr open read map };
#line 10
#line 10
#line 11
#line 11
allow bootstat property_socket:sock_file write;
#line 11
allow bootstat init:unix_stream_socket connectto;
#line 11
#line 11
allow bootstat last_boot_reason_prop:property_service set;
#line 11
#line 11
allow bootstat last_boot_reason_prop:file { getattr open read map };
#line 11
#line 11
neverallow {
domain
-bootanim
-bootstat
-dumpstate
-init
-platform_app
-recovery
-shell
-system_server
} { bootloader_boot_reason_prop last_boot_reason_prop }:file { getattr open read ioctl lock map watch watch_reads };
# ... and refine, as these components should not set the last boot reason
neverallow { bootanim recovery } last_boot_reason_prop:file { getattr open read ioctl lock map watch watch_reads };
neverallow {
domain
-bootstat
-init
-system_server
} { bootloader_boot_reason_prop last_boot_reason_prop }:property_service set;
# ... and refine ... for a ro propertly no less ... keep this _tight_
neverallow system_server bootloader_boot_reason_prop:property_service set;
#line 1 "system/sepolicy/private/boringssl_self_test.te"
# System and vendor domains for BoringSSL self test binaries.
#
# For FIPS compliance, all processes linked against libcrypto perform a startup
# self test which computes a hash of the BoringSSL Crypto Module (BCM) and, at least once
# per device boot, also run a series of Known Answer Tests (KAT) to verify functionality.
#
# The KATs are expensive, and to ensure they are run as few times as possible, they
# are skipped if a marker file exists in /dev/boringssl/selftest whose name is
# the hash of the BCM that was computed earlier. The files are zero length and their contents
# should never be read or written. To avoid giving arbitrary processes access to /dev/boringssl
# to create these marker files, there are dedicated self test binaries which this policy
# gives access to and which are run during early-init.
#
# Due to build skew, the version of libcrypto in /vendor may have a different hash than
# the system one. To cater for this there are vendor variants of the self test binaries
# which also have permission to write to the same files in /dev/boringssl. In the case where
# vendor and system libcrypto have the same hash, there will be a race to create the file,
# but this is harmless.
#
# If the self tests fail, then the device should reboot into firmware and for this reason
# the system boringssl_self_test domain needs to be in coredomain. As vendor domains
# are not allowed in coredomain, this means that the vendor self tests cannot trigger a
# reboot. However every binary linked against the vendor libcrypto will abort on startup,
# so in practice the device will crash anyway in this unlikely scenario.
# System boringssl_self_test domain
type boringssl_self_test, domain, coredomain;
type boringssl_self_test_exec, system_file_type, exec_type, file_type;
# Vendor boringssl_self_test domain
type vendor_boringssl_self_test, domain;
type vendor_boringssl_self_test_exec, vendor_file_type, exec_type, file_type;
# Switch to boringssl_self_test security domain when running boringssl_self_test_exec
#line 35
#line 35
# Allow the necessary permissions.
#line 35
#line 35
# Old domain may exec the file and transition to the new domain.
#line 35
allow init boringssl_self_test_exec:file { getattr open read execute map };
#line 35
allow init boringssl_self_test:process transition;
#line 35
# New domain is entered by executing the file.
#line 35
allow boringssl_self_test boringssl_self_test_exec:file { entrypoint open read execute getattr map };
#line 35
# New domain can send SIGCHLD to its caller.
#line 35
#line 35
# Enable AT_SECURE, i.e. libc secure mode.
#line 35
dontaudit init boringssl_self_test:process noatsecure;
#line 35
# XXX dontaudit candidate but requires further study.
#line 35
allow init boringssl_self_test:process { siginh rlimitinh };
#line 35
#line 35
# Make the transition occur by default.
#line 35
type_transition init boringssl_self_test_exec:process boringssl_self_test;
#line 35
#line 35
# Switch to vendor_boringssl_self_test security domain when running vendor_boringssl_self_test_exec
#line 38
#line 38
# Allow the necessary permissions.
#line 38
#line 38
# Old domain may exec the file and transition to the new domain.
#line 38
allow init vendor_boringssl_self_test_exec:file { getattr open read execute map };
#line 38
allow init vendor_boringssl_self_test:process transition;
#line 38
# New domain is entered by executing the file.
#line 38
allow vendor_boringssl_self_test vendor_boringssl_self_test_exec:file { entrypoint open read execute getattr map };
#line 38
# New domain can send SIGCHLD to its caller.
#line 38
#line 38
# Enable AT_SECURE, i.e. libc secure mode.
#line 38
dontaudit init vendor_boringssl_self_test:process noatsecure;
#line 38
# XXX dontaudit candidate but requires further study.
#line 38
allow init vendor_boringssl_self_test:process { siginh rlimitinh };
#line 38
#line 38
# Make the transition occur by default.
#line 38
type_transition init vendor_boringssl_self_test_exec:process vendor_boringssl_self_test;
#line 38
#line 38
# Marker files, common to both domains, indicating KAT have been performed on a particular libcrypto
#
# The files are zero length so there is no issue if both vendor and system code
# try to create the same file simultaneously. One will succeed and the other will fail
# silently, i.e. still indicate success. Similar harmless naming collisions will happen in the
# system domain e.g. when system and APEX copies of libcrypto are identical.
type boringssl_self_test_marker, file_type;
# Allow self test binaries to create/check for the existence of boringssl_self_test_marker files
allow { boringssl_self_test vendor_boringssl_self_test }
boringssl_self_test_marker:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow { boringssl_self_test vendor_boringssl_self_test }
boringssl_self_test_marker:dir { { open getattr read search ioctl lock watch watch_reads } add_name write };
# Allow self test binaries to write their stdout/stderr messages to kmsg_debug
allow { boringssl_self_test vendor_boringssl_self_test }
kmsg_debug_device:chr_file { { open append write lock map } getattr ioctl };
# No other process should be able to create marker files because their existence causes the
# boringssl KAT to be skipped.
neverallow {
domain
-vendor_boringssl_self_test
-boringssl_self_test
-init
-vendor_init
} boringssl_self_test_marker:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow {
domain
-vendor_boringssl_self_test
-boringssl_self_test
-init
-vendor_init
} boringssl_self_test_marker:dir write;
#line 1 "system/sepolicy/private/bpfdomain.te"
# platform should have ownership of network attachpoints for BPF
neverallow {
bpfdomain
-bpfloader
-netd
-netutils_wrapper
-network_stack
-system_server
} self:{ capability cap_userns } { net_admin net_raw };
# any domain which uses bpf is a bpfdomain
neverallow { domain -bpfdomain } *:bpf *;
allow bpfdomain fs_bpf:dir search;
# genfscon doesn't seem to trigger during symlink creation,
# and thus any created symlinks end up as 'fs_bpf:lnk_type',
# however this feels like a kernel bug / missing feature,
# so let's allow all bpffs_type's instead,
# this will keep things working even if this is fixed.
allow bpfdomain bpffs_type:lnk_file read;
# Needed for //frameworks/libs/net:
# common/native/bpf_headers/include/bpf/WaitForProgsLoaded.h
#line 25
allow bpfdomain bpf_progs_loaded_prop:file { getattr open read map };
#line 25
#line 1 "system/sepolicy/private/bpfloader.te"
type bpfloader_exec, system_file_type, exec_type, file_type;
typeattribute bpfloader bpfdomain;
# allow bpfloader to write to the kernel log (starts early)
allow bpfloader kmsg_device:chr_file { open append write lock map };
# These permissions are required to pin ebpf maps & programs.
allow bpfloader bpffs_type:dir { add_name create remove_name search write };
allow bpfloader bpffs_type:file { create getattr read rename setattr };
allow bpfloader bpffs_type:lnk_file { create getattr read };
allow { bpffs_type -fs_bpf } fs_bpf:filesystem associate;
# Allow bpfloader to create bpf maps and programs.
allow bpfloader self:bpf { map_create map_read map_write prog_load prog_run };
allow bpfloader self:capability { chown sys_admin net_admin };
allow bpfloader sysfs_fs_fuse_bpf:file { getattr open read ioctl lock map watch watch_reads };
allow bpfloader proc_bpf:file { open append write lock map };
#line 23
#line 23
allow bpfloader property_socket:sock_file write;
#line 23
allow bpfloader init:unix_stream_socket connectto;
#line 23
#line 23
allow bpfloader bpf_progs_loaded_prop:property_service set;
#line 23
#line 23
allow bpfloader bpf_progs_loaded_prop:file { getattr open read map };
#line 23
#line 23
allow bpfloader bpfloader_exec:file execute_no_trans;
###
### Neverallow rules
###
# Note: we don't care about getattr/mounton/search
neverallow { domain } bpffs_type:dir ~{ add_name create getattr mounton remove_name search write };
neverallow { domain -bpfloader } bpffs_type:dir { add_name create remove_name write };
neverallow { domain } bpffs_type:file ~{ create getattr map open read rename setattr write };
neverallow { domain -bpfloader } bpffs_type:file { create map open rename setattr };
neverallow { domain -bpfloader -gpuservice -lmkd -mediaprovider_app -netd -netutils_wrapper -system_server } fs_bpf:file { getattr read };
neverallow { domain -bpfloader } fs_bpf_loader:file { getattr read };
neverallow { domain -bpfloader -network_stack } fs_bpf_net_private:file { getattr read };
neverallow { domain -bpfloader -network_stack -system_server } fs_bpf_net_shared:file { getattr read };
neverallow { domain -bpfloader -netd -network_stack -system_server } fs_bpf_netd_readonly:file { getattr read };
neverallow { domain -bpfloader -netd -netutils_wrapper -network_stack -system_server } fs_bpf_netd_shared:file { getattr read };
neverallow { domain -bpfloader -network_stack } fs_bpf_tethering:file { getattr read };
neverallow { domain -bpfloader -uprobestats } fs_bpf_uprobestats:file { getattr read };
neverallow { domain -bpfloader -gpuservice -netd -netutils_wrapper -network_stack -system_server -uprobestats } { bpffs_type -fs_bpf_vendor }:file write;
neverallow { domain -bpfloader } bpffs_type:lnk_file ~read;
neverallow { domain -bpfdomain } bpffs_type:lnk_file read;
neverallow { domain -bpfloader } *:bpf { map_create prog_load };
# 'fs_bpf_loader' is for internal use of the BpfLoader oneshot boot time process.
neverallow { domain -bpfloader } fs_bpf_loader:bpf *;
neverallow { domain -bpfloader } fs_bpf_loader:file *;
neverallow {
domain
-bpfloader
-gpuservice
-hal_health_server
-mediaprovider_app
-netd
-netutils_wrapper
-network_stack
-system_server
-uprobestats
} *:bpf prog_run;
neverallow { domain -bpfloader -gpuservice -lmkd -mediaprovider_app -netd -network_stack -system_server -uprobestats } *:bpf { map_read map_write };
neverallow { domain -bpfloader -init } bpfloader_exec:file { execute execute_no_trans };
neverallow { coredomain -bpfloader -netd -netutils_wrapper } fs_bpf_vendor:file *;
neverallow bpfloader *:{ tcp_socket udp_socket rawip_socket } *;
# No domain should be allowed to ptrace bpfloader
neverallow { domain } bpfloader:process ptrace;
neverallow { domain -bpfloader } proc_bpf:file write;
#line 1 "system/sepolicy/private/bufferhubd.te"
typeattribute bufferhubd coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init bufferhubd_exec:file { getattr open read execute map };
#line 3
allow init bufferhubd:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow bufferhubd bufferhubd_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init bufferhubd:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init bufferhubd:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init bufferhubd_exec:process bufferhubd;
#line 3
#line 3
#line 1 "system/sepolicy/private/cameraserver.te"
typeattribute cameraserver coredomain;
typeattribute cameraserver camera_service_server;
#line 5
#line 5
# Allow the necessary permissions.
#line 5
#line 5
# Old domain may exec the file and transition to the new domain.
#line 5
allow init cameraserver_exec:file { getattr open read execute map };
#line 5
allow init cameraserver:process transition;
#line 5
# New domain is entered by executing the file.
#line 5
allow cameraserver cameraserver_exec:file { entrypoint open read execute getattr map };
#line 5
# New domain can send SIGCHLD to its caller.
#line 5
#line 5
# Enable AT_SECURE, i.e. libc secure mode.
#line 5
dontaudit init cameraserver:process noatsecure;
#line 5
# XXX dontaudit candidate but requires further study.
#line 5
allow init cameraserver:process { siginh rlimitinh };
#line 5
#line 5
# Make the transition occur by default.
#line 5
type_transition init cameraserver_exec:process cameraserver;
#line 5
#line 5
#line 6
type_transition cameraserver tmpfs:file cameraserver_tmpfs;
#line 6
allow cameraserver cameraserver_tmpfs:file { read write getattr map };
#line 6
allow cameraserver gpu_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow cameraserver gpu_device:dir { open getattr read search ioctl lock watch watch_reads };
allow cameraserver virtual_camera:binder call;
#line 1 "system/sepolicy/private/canhalconfigurator.te"
type canhalconfigurator, domain, coredomain;
type canhalconfigurator_exec, exec_type, system_file_type, file_type;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init canhalconfigurator_exec:file { getattr open read execute map };
#line 3
allow init canhalconfigurator:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow canhalconfigurator canhalconfigurator_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init canhalconfigurator:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init canhalconfigurator:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init canhalconfigurator_exec:process canhalconfigurator;
#line 3
#line 3
# This allows the configurator to look up the CAN HAL controller via
# hwservice_manager and communicate with it.
#line 7
typeattribute canhalconfigurator halclientdomain;
#line 7
typeattribute canhalconfigurator hal_can_controller_client;
#line 7
#line 7
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 7
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 7
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 7
#line 7
typeattribute canhalconfigurator hal_can_controller;
#line 7
# Find passthrough HAL implementations
#line 7
allow hal_can_controller system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 7
allow hal_can_controller vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 7
allow hal_can_controller vendor_file:file { read open getattr execute map };
#line 7
#line 7
#line 9
# Call the servicemanager and transfer references to it.
#line 9
allow canhalconfigurator servicemanager:binder { call transfer };
#line 9
# Allow servicemanager to send out callbacks
#line 9
allow servicemanager canhalconfigurator:binder { call transfer };
#line 9
# servicemanager performs getpidcon on clients.
#line 9
allow servicemanager canhalconfigurator:dir search;
#line 9
allow servicemanager canhalconfigurator:file { read open };
#line 9
allow servicemanager canhalconfigurator:process getattr;
#line 9
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 9
# all domains in domain.te.
#line 9
#line 10
# Call the server domain and optionally transfer references to it.
#line 10
allow hal_can_controller canhalconfigurator:binder { call transfer };
#line 10
# Allow the serverdomain to transfer references to the client on the reply.
#line 10
allow canhalconfigurator hal_can_controller:binder transfer;
#line 10
# Receive and use open files from the server.
#line 10
allow hal_can_controller canhalconfigurator:fd use;
#line 10
#line 1 "system/sepolicy/private/charger.te"
typeattribute charger coredomain;
# charger needs to tell init to continue the boot
# process when running in charger mode.
# The system charger needs to be allowed to set these properties on legacy devices.
#line 6
#line 6
allow charger property_socket:sock_file write;
#line 6
allow charger init:unix_stream_socket connectto;
#line 6
#line 6
allow charger system_prop:property_service set;
#line 6
#line 6
allow charger system_prop:file { getattr open read map };
#line 6
#line 6
#line 7
#line 7
allow charger property_socket:sock_file write;
#line 7
allow charger init:unix_stream_socket connectto;
#line 7
#line 7
allow charger exported_system_prop:property_service set;
#line 7
#line 7
allow charger exported_system_prop:file { getattr open read map };
#line 7
#line 7
#line 8
#line 8
allow charger property_socket:sock_file write;
#line 8
allow charger init:unix_stream_socket connectto;
#line 8
#line 8
allow charger exported3_system_prop:property_service set;
#line 8
#line 8
allow charger exported3_system_prop:file { getattr open read map };
#line 8
#line 8
# The system charger can read ro.charger.*
#line 11
allow charger charger_prop:file { getattr open read map };
#line 11
# BEGIN_COMPATIBLE_PROPERTY_ONLY -- this marker is used by CTS -- do not modify
#line 13
#line 13
neverallow {
#line 13
domain
#line 13
-init
#line 13
-dumpstate
#line 13
-charger
#line 13
} charger_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 13
#line 13
# END_COMPATIBLE_PROPERTY_ONLY -- this marker is used by CTS -- do not modify
#line 20
#line 1 "system/sepolicy/private/charger_type.te"
# charger needs to tell init to continue the boot
# process when running in charger mode.
#line 3
#line 3
allow charger_type property_socket:sock_file write;
#line 3
allow charger_type init:unix_stream_socket connectto;
#line 3
#line 3
allow charger_type charger_status_prop:property_service set;
#line 3
#line 3
allow charger_type charger_status_prop:file { getattr open read map };
#line 3
#line 3
#line 4
allow charger_type charger_config_prop:file { getattr open read map };
#line 4
# get minui properties
#line 7
allow charger_type recovery_config_prop:file { getattr open read map };
#line 7
### Neverallow rules for charger properties
# charger_config_prop: Only init and vendor_init is allowed to set it
neverallow {
domain
-init
-vendor_init
} charger_config_prop:property_service set;
# charger_status_prop: Only init, vendor_init, charger, and charger_vendor
# are allowed to set it
neverallow {
domain
-init
-vendor_init
-charger
-charger_vendor
} charger_status_prop:property_service set;
# Both charger_config_prop and charger_status_prop:
# Only init, vendor_init, dumpstate, charger, and charger_vendor
# are allowed to read it
neverallow {
domain
-init
-dumpstate
-vendor_init
-charger
-charger_vendor
} { charger_config_prop charger_status_prop }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 1 "system/sepolicy/private/clatd.te"
# 464xlat daemon
type clatd, domain, coredomain;
type clatd_exec, system_file_type, exec_type, file_type;
#line 5
typeattribute clatd netdomain;
#line 5
# Access objects inherited from system_server.
allow clatd system_server:fd use;
allow clatd system_server:packet_socket { read write };
allow clatd system_server:rawip_socket { read write };
allow clatd tun_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 1 "system/sepolicy/private/compos_fd_server.te"
# Make ART inputs and outputs available to the CompOS VM
type compos_fd_server, domain, coredomain;
# Allow access to open fds inherited from composd
allow compos_fd_server composd:fd use;
# Allow creating new files and directories in the staging directory.
allow compos_fd_server apex_art_staging_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow compos_fd_server apex_art_staging_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow creating new files and directories in the artifacts directory.
allow compos_fd_server apex_art_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow compos_fd_server apex_art_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Use a pipe to signal readiness
allow compos_fd_server composd:fifo_file write;
# TODO(b/196109647) - remove this when no longer needed by minijail
allow compos_fd_server composd:fifo_file read;
# Create a listening vsock for the VM to connect back to
allow compos_fd_server self:vsock_socket { { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } } listen accept };
# Only composd can enter the domain via exec
neverallow { domain -composd } compos_fd_server:process transition;
neverallow * compos_fd_server:process dyntransition;
#line 1 "system/sepolicy/private/compos_verify.te"
# Run by odsign to verify a CompOS signature
type compos_verify, domain, coredomain;
type compos_verify_exec, exec_type, file_type, system_file_type;
# Start a VM
#line 6
# Call the servicemanager and transfer references to it.
#line 6
allow compos_verify servicemanager:binder { call transfer };
#line 6
# Allow servicemanager to send out callbacks
#line 6
allow servicemanager compos_verify:binder { call transfer };
#line 6
# servicemanager performs getpidcon on clients.
#line 6
allow servicemanager compos_verify:dir search;
#line 6
allow servicemanager compos_verify:file { read open };
#line 6
allow servicemanager compos_verify:process getattr;
#line 6
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 6
# all domains in domain.te.
#line 6
;
#line 7
# Transition to virtualizationmanager when the client executes it.
#line 7
#line 7
# Allow the necessary permissions.
#line 7
#line 7
# Old domain may exec the file and transition to the new domain.
#line 7
allow compos_verify virtualizationmanager_exec:file { getattr open read execute map };
#line 7
allow compos_verify virtualizationmanager:process transition;
#line 7
# New domain is entered by executing the file.
#line 7
allow virtualizationmanager virtualizationmanager_exec:file { entrypoint open read execute getattr map };
#line 7
# New domain can send SIGCHLD to its caller.
#line 7
allow virtualizationmanager compos_verify:process sigchld;
#line 7
# Enable AT_SECURE, i.e. libc secure mode.
#line 7
dontaudit compos_verify virtualizationmanager:process noatsecure;
#line 7
# XXX dontaudit candidate but requires further study.
#line 7
allow compos_verify virtualizationmanager:process { siginh rlimitinh };
#line 7
#line 7
# Make the transition occur by default.
#line 7
type_transition compos_verify virtualizationmanager_exec:process virtualizationmanager;
#line 7
#line 7
# Allow virtualizationmanager to communicate over UDS with the client.
#line 7
allow { virtualizationmanager crosvm } compos_verify:unix_stream_socket { ioctl getattr read write };
#line 7
# Let the client pass file descriptors to virtualizationmanager and on to crosvm.
#line 7
allow { virtualizationmanager crosvm } compos_verify:fd use;
#line 7
# Let the client use file descriptors created by virtualizationmanager.
#line 7
allow compos_verify virtualizationmanager:fd use;
#line 7
# Allow piping console log to the client
#line 7
allow { virtualizationmanager crosvm } compos_verify:fifo_file { ioctl getattr read write };
#line 7
# Allow client to read/write vsock created by virtualizationmanager to communicate with the VM
#line 7
# that it created. Notice that we do not grant permission to create a vsock;
#line 7
# the client can only connect to VMs that it owns.
#line 7
allow compos_verify virtualizationmanager:vsock_socket { getattr getopt read write };
#line 7
# Allow client to inspect hypervisor capabilities
#line 7
#line 7
allow compos_verify hypervisor_prop:file { getattr open read map };
#line 7
#line 7
# Allow client to read (but not open) the crashdump provided by virtualizationmanager
#line 7
allow compos_verify virtualizationservice_data_file:file { getattr read };
#line 7
;
# Read instance image & write VM logs
allow compos_verify apex_module_data_file:dir search;
allow compos_verify apex_compos_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow compos_verify apex_compos_data_file:file { { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } create };
# Read CompOS info & signature files
allow compos_verify apex_art_data_file:dir search;
allow compos_verify apex_art_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow odsign to redirect our stdout/stderr to log
allow compos_verify odsign:fd use;
allow compos_verify odsign_devpts:chr_file { read write };
# Only odsign can enter the domain via exec
neverallow { domain -odsign } compos_verify:process transition;
neverallow * compos_verify:process dyntransition;
#line 1 "system/sepolicy/private/composd.te"
type composd, domain, coredomain;
type composd_exec, system_file_type, exec_type, file_type;
# Host dynamic AIDL services
#line 5
#line 5
# Allow the necessary permissions.
#line 5
#line 5
# Old domain may exec the file and transition to the new domain.
#line 5
allow init composd_exec:file { getattr open read execute map };
#line 5
allow init composd:process transition;
#line 5
# New domain is entered by executing the file.
#line 5
allow composd composd_exec:file { entrypoint open read execute getattr map };
#line 5
# New domain can send SIGCHLD to its caller.
#line 5
#line 5
# Enable AT_SECURE, i.e. libc secure mode.
#line 5
dontaudit init composd:process noatsecure;
#line 5
# XXX dontaudit candidate but requires further study.
#line 5
allow init composd:process { siginh rlimitinh };
#line 5
#line 5
# Make the transition occur by default.
#line 5
type_transition init composd_exec:process composd;
#line 5
#line 5
#line 6
# Call the servicemanager and transfer references to it.
#line 6
allow composd servicemanager:binder { call transfer };
#line 6
# Allow servicemanager to send out callbacks
#line 6
allow servicemanager composd:binder { call transfer };
#line 6
# servicemanager performs getpidcon on clients.
#line 6
allow servicemanager composd:dir search;
#line 6
allow servicemanager composd:file { read open };
#line 6
allow servicemanager composd:process getattr;
#line 6
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 6
# all domains in domain.te.
#line 6
#line 7
allow composd compos_service:service_manager { add find };
#line 7
neverallow { domain -composd } compos_service:service_manager add;
#line 7
#line 7
# On debug builds with root, allow binder services to use binder over TCP.
#line 7
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 7
#line 7
# Call back into system server
#line 10
# Call the server domain and optionally transfer references to it.
#line 10
allow composd system_server:binder { call transfer };
#line 10
# Allow the serverdomain to transfer references to the client on the reply.
#line 10
allow system_server composd:binder transfer;
#line 10
# Receive and use open files from the server.
#line 10
allow composd system_server:fd use;
#line 10
# Start a VM
#line 13
# Transition to virtualizationmanager when the client executes it.
#line 13
#line 13
# Allow the necessary permissions.
#line 13
#line 13
# Old domain may exec the file and transition to the new domain.
#line 13
allow composd virtualizationmanager_exec:file { getattr open read execute map };
#line 13
allow composd virtualizationmanager:process transition;
#line 13
# New domain is entered by executing the file.
#line 13
allow virtualizationmanager virtualizationmanager_exec:file { entrypoint open read execute getattr map };
#line 13
# New domain can send SIGCHLD to its caller.
#line 13
allow virtualizationmanager composd:process sigchld;
#line 13
# Enable AT_SECURE, i.e. libc secure mode.
#line 13
dontaudit composd virtualizationmanager:process noatsecure;
#line 13
# XXX dontaudit candidate but requires further study.
#line 13
allow composd virtualizationmanager:process { siginh rlimitinh };
#line 13
#line 13
# Make the transition occur by default.
#line 13
type_transition composd virtualizationmanager_exec:process virtualizationmanager;
#line 13
#line 13
# Allow virtualizationmanager to communicate over UDS with the client.
#line 13
allow { virtualizationmanager crosvm } composd:unix_stream_socket { ioctl getattr read write };
#line 13
# Let the client pass file descriptors to virtualizationmanager and on to crosvm.
#line 13
allow { virtualizationmanager crosvm } composd:fd use;
#line 13
# Let the client use file descriptors created by virtualizationmanager.
#line 13
allow composd virtualizationmanager:fd use;
#line 13
# Allow piping console log to the client
#line 13
allow { virtualizationmanager crosvm } composd:fifo_file { ioctl getattr read write };
#line 13
# Allow client to read/write vsock created by virtualizationmanager to communicate with the VM
#line 13
# that it created. Notice that we do not grant permission to create a vsock;
#line 13
# the client can only connect to VMs that it owns.
#line 13
allow composd virtualizationmanager:vsock_socket { getattr getopt read write };
#line 13
# Allow client to inspect hypervisor capabilities
#line 13
#line 13
allow composd hypervisor_prop:file { getattr open read map };
#line 13
#line 13
# Allow client to read (but not open) the crashdump provided by virtualizationmanager
#line 13
allow composd virtualizationservice_data_file:file { getattr read };
#line 13
# Prepare staging directory for odrefresh
allow composd apex_art_data_file:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } relabelfrom };
allow composd apex_art_staging_data_file:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } relabelto };
allow composd apex_art_staging_data_file:file { getattr unlink };
# Delete files or enable fs-verity in the odrefresh target directory
allow composd apex_art_data_file:file { open ioctl read unlink write };
allowxperm composd apex_art_data_file:file ioctl 0x6685;
# Access our APEX data files
allow composd apex_module_data_file:dir search;
allow composd apex_compos_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow composd apex_compos_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Run fd_server in its own domain, and send SIGTERM when finished.
#line 30
# Allow the necessary permissions.
#line 30
#line 30
# Old domain may exec the file and transition to the new domain.
#line 30
allow composd fd_server_exec:file { getattr open read execute map };
#line 30
allow composd compos_fd_server:process transition;
#line 30
# New domain is entered by executing the file.
#line 30
allow compos_fd_server fd_server_exec:file { entrypoint open read execute getattr map };
#line 30
# New domain can send SIGCHLD to its caller.
#line 30
allow compos_fd_server composd:process sigchld;
#line 30
# Enable AT_SECURE, i.e. libc secure mode.
#line 30
dontaudit composd compos_fd_server:process noatsecure;
#line 30
# XXX dontaudit candidate but requires further study.
#line 30
allow composd compos_fd_server:process { siginh rlimitinh };
#line 30
#line 30
# Make the transition occur by default.
#line 30
type_transition composd fd_server_exec:process compos_fd_server;
#line 30
allow composd compos_fd_server:process signal;
# Read properties used to configure the CompOS VM
#line 34
allow composd composd_vm_art_prop:file { getattr open read map };
#line 34
#line 35
allow composd composd_vm_vendor_prop:file { getattr open read map };
#line 35
# Read ART's properties
#line 38
allow composd dalvik_config_prop_type:file { getattr open read map };
#line 38
#line 39
allow composd device_config_runtime_native_boot_prop:file { getattr open read map };
#line 39
# We never create any artifact files directly
neverallow composd apex_art_data_file:file create;
# ART sets these properties via init script, nothing else should
neverallow { domain -init } composd_vm_art_prop:property_service set;
#line 1 "system/sepolicy/private/coredomain.te"
#line 1
allow coredomain apex_ready_prop:file { getattr open read map };
#line 1
#line 2
allow coredomain boot_status_prop:file { getattr open read map };
#line 2
#line 3
allow coredomain camera_config_prop:file { getattr open read map };
#line 3
#line 4
allow coredomain dalvik_config_prop_type:file { getattr open read map };
#line 4
#line 5
allow coredomain dalvik_runtime_prop:file { getattr open read map };
#line 5
#line 6
allow coredomain exported_pm_prop:file { getattr open read map };
#line 6
#line 7
allow coredomain ffs_config_prop:file { getattr open read map };
#line 7
#line 8
allow coredomain graphics_config_prop:file { getattr open read map };
#line 8
#line 9
allow coredomain graphics_config_writable_prop:file { getattr open read map };
#line 9
#line 10
allow coredomain hdmi_config_prop:file { getattr open read map };
#line 10
#line 11
allow coredomain init_service_status_private_prop:file { getattr open read map };
#line 11
#line 12
allow coredomain lmkd_config_prop:file { getattr open read map };
#line 12
#line 13
allow coredomain localization_prop:file { getattr open read map };
#line 13
#line 14
allow coredomain pm_prop:file { getattr open read map };
#line 14
#line 15
allow coredomain radio_control_prop:file { getattr open read map };
#line 15
#line 16
allow coredomain rollback_test_prop:file { getattr open read map };
#line 16
#line 17
allow coredomain setupwizard_prop:file { getattr open read map };
#line 17
#line 18
allow coredomain setupwizard_mode_prop:file { getattr open read map };
#line 18
#line 19
allow coredomain sqlite_log_prop:file { getattr open read map };
#line 19
#line 20
allow coredomain storagemanager_config_prop:file { getattr open read map };
#line 20
#line 21
allow coredomain surfaceflinger_color_prop:file { getattr open read map };
#line 21
#line 22
allow coredomain systemsound_config_prop:file { getattr open read map };
#line 22
#line 23
allow coredomain telephony_config_prop:file { getattr open read map };
#line 23
#line 24
allow coredomain usb_config_prop:file { getattr open read map };
#line 24
#line 25
allow coredomain usb_control_prop:file { getattr open read map };
#line 25
#line 26
allow coredomain userspace_reboot_config_prop:file { getattr open read map };
#line 26
#line 27
allow coredomain vold_config_prop:file { getattr open read map };
#line 27
#line 28
allow coredomain vts_status_prop:file { getattr open read map };
#line 28
#line 29
allow coredomain zygote_config_prop:file { getattr open read map };
#line 29
#line 30
allow coredomain zygote_wrap_prop:file { getattr open read map };
#line 30
# TODO(b/170590987): remove this after cleaning up default_prop
#line 33
allow coredomain default_prop:file { getattr open read map };
#line 33
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 35
#line 35
neverallow {
#line 35
coredomain
#line 35
#line 35
# for chowning
#line 35
-init
#line 35
#line 35
# generic access to sysfs_type
#line 35
-apexd
#line 35
-ueventd
#line 35
-vold
#line 35
} sysfs_leds:file *;
#line 35
#line 35
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 47
# On TREBLE devices, a limited set of files in /vendor are accessible to
# only a few allowlisted coredomains to keep system/vendor separation.
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 51
#line 51
# Limit access to /vendor/app
#line 51
neverallow {
#line 51
coredomain
#line 51
-appdomain
#line 51
-artd
#line 51
-dex2oat
#line 51
-dexoptanalyzer
#line 51
-idmap
#line 51
-init
#line 51
-installd
#line 51
-heapprofd
#line 51
-postinstall_dexopt
#line 51
-rs # spawned by appdomain, so carryover the exception above
#line 51
-system_server
#line 51
-traced_perf
#line 51
} vendor_app_file:dir { open read getattr search };
#line 51
#line 51
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 68
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 70
#line 70
neverallow {
#line 70
coredomain
#line 70
-appdomain
#line 70
-artd
#line 70
-dex2oat
#line 70
-dexoptanalyzer
#line 70
-idmap
#line 70
-init
#line 70
-installd
#line 70
-heapprofd
#line 70
#line 70
-postinstall_dexopt
#line 70
-profman
#line 70
-rs # spawned by appdomain, so carryover the exception above
#line 70
#line 70
-system_server
#line 70
-traced_perf
#line 70
-mediaserver
#line 70
} vendor_app_file:file { getattr open read ioctl lock map watch watch_reads };
#line 70
#line 70
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 90
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 92
#line 92
# Limit access to /vendor/overlay
#line 92
neverallow {
#line 92
coredomain
#line 92
-appdomain
#line 92
-artd
#line 92
-dex2oat
#line 92
-dexoptanalyzer
#line 92
-idmap
#line 92
-init
#line 92
-installd
#line 92
-postinstall_dexopt
#line 92
-rs # spawned by appdomain, so carryover the exception above
#line 92
-system_server
#line 92
-traced_perf
#line 92
-app_zygote
#line 92
-webview_zygote
#line 92
-zygote
#line 92
-heapprofd
#line 92
} vendor_overlay_file:dir { getattr open read search };
#line 92
#line 92
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 112
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 114
#line 114
neverallow {
#line 114
coredomain
#line 114
-appdomain
#line 114
-artd
#line 114
-dex2oat
#line 114
-dexoptanalyzer
#line 114
-idmap
#line 114
-init
#line 114
-installd
#line 114
-postinstall_dexopt
#line 114
-rs # spawned by appdomain, so carryover the exception above
#line 114
-system_server
#line 114
-traced_perf
#line 114
-app_zygote
#line 114
-webview_zygote
#line 114
-zygote
#line 114
-heapprofd
#line 114
#line 114
#line 114
} vendor_overlay_file:file open;
#line 114
#line 114
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 135
# Core domains are not permitted to use kernel interfaces which are not
# explicitly labeled.
# TODO(b/65643247): Apply these neverallow rules to all coredomain.
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 140
#line 140
# /proc
#line 140
neverallow {
#line 140
coredomain
#line 140
-init
#line 140
-vold
#line 140
} proc:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 140
#line 140
# /sys
#line 140
neverallow {
#line 140
coredomain
#line 140
-apexd
#line 140
-init
#line 140
-ueventd
#line 140
#line 140
-vold
#line 140
} sysfs:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 140
#line 140
# /dev
#line 140
neverallow {
#line 140
coredomain
#line 140
-apexd
#line 140
-fsck
#line 140
-init
#line 140
-ueventd
#line 140
} device:{ blk_file file } { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 140
#line 140
# debugfs
#line 140
neverallow {
#line 140
coredomain
#line 140
#line 140
-dumpstate
#line 140
-init
#line 140
-system_server
#line 140
#line 140
} debugfs:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 140
#line 140
# tracefs
#line 140
neverallow {
#line 140
coredomain
#line 140
-atrace
#line 140
-dumpstate
#line 140
-gpuservice
#line 140
-init
#line 140
-traced_perf
#line 140
-traced_probes
#line 140
-shell
#line 140
-system_server
#line 140
-traceur_app
#line 140
#line 140
#line 140
} debugfs_tracing:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 140
#line 140
# inotifyfs
#line 140
neverallow {
#line 140
coredomain
#line 140
-init
#line 140
} inotify:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 140
#line 140
# pstorefs
#line 140
neverallow {
#line 140
coredomain
#line 140
-bootstat
#line 140
-charger
#line 140
-dumpstate
#line 140
#line 140
-init
#line 140
-logd
#line 140
-logpersist
#line 140
-recovery_persist
#line 140
-recovery_refresh
#line 140
-shell
#line 140
-system_server
#line 140
} pstorefs:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 140
#line 140
# configfs
#line 140
neverallow {
#line 140
coredomain
#line 140
-init
#line 140
-system_server
#line 140
} configfs:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 140
#line 140
# functionfs
#line 140
neverallow {
#line 140
coredomain
#line 140
-adbd
#line 140
-init
#line 140
-mediaprovider
#line 140
-system_server
#line 140
} functionfs:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 140
#line 140
# usbfs and binfmt_miscfs
#line 140
neverallow {
#line 140
coredomain
#line 140
-init
#line 140
}{ usbfs binfmt_miscfs }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 140
#line 140
# dmabuf heaps
#line 140
neverallow {
#line 140
coredomain
#line 140
-init
#line 140
-ueventd
#line 140
}{
#line 140
dmabuf_heap_device_type
#line 140
-dmabuf_system_heap_device
#line 140
-dmabuf_system_secure_heap_device
#line 140
}:chr_file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 140
#line 140
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 247
# Following /dev nodes must not be directly accessed by coredomain, but should
# instead be wrapped by HALs.
neverallow coredomain {
iio_device
radio_device
}:chr_file { open read append write ioctl };
# TODO(b/120243891): HAL permission to tee_device is included into coredomain
# on non-Treble devices.
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 258
#line 258
neverallow coredomain tee_device:chr_file { open read append write ioctl };
#line 258
#line 258
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 260
#line 1 "system/sepolicy/private/cppreopts.te"
# cppreopts
#
# This command copies preopted files from the system_b partition to the data
# partition. This domain ensures that we are only copying into specific
# directories.
type cppreopts, domain, mlstrustedsubject, coredomain;
type cppreopts_exec, system_file_type, exec_type, file_type;
# Technically not a daemon but we do want the transition from init domain to
# cppreopts to occur.
#line 12
#line 12
# Allow the necessary permissions.
#line 12
#line 12
# Old domain may exec the file and transition to the new domain.
#line 12
allow init cppreopts_exec:file { getattr open read execute map };
#line 12
allow init cppreopts:process transition;
#line 12
# New domain is entered by executing the file.
#line 12
allow cppreopts cppreopts_exec:file { entrypoint open read execute getattr map };
#line 12
# New domain can send SIGCHLD to its caller.
#line 12
#line 12
# Enable AT_SECURE, i.e. libc secure mode.
#line 12
dontaudit init cppreopts:process noatsecure;
#line 12
# XXX dontaudit candidate but requires further study.
#line 12
allow init cppreopts:process { siginh rlimitinh };
#line 12
#line 12
# Make the transition occur by default.
#line 12
type_transition init cppreopts_exec:process cppreopts;
#line 12
#line 12
#line 13
# Allow the necessary permissions.
#line 13
#line 13
# Old domain may exec the file and transition to the new domain.
#line 13
allow cppreopts preopt2cachename_exec:file { getattr open read execute map };
#line 13
allow cppreopts preopt2cachename:process transition;
#line 13
# New domain is entered by executing the file.
#line 13
allow preopt2cachename preopt2cachename_exec:file { entrypoint open read execute getattr map };
#line 13
# New domain can send SIGCHLD to its caller.
#line 13
allow preopt2cachename cppreopts:process sigchld;
#line 13
# Enable AT_SECURE, i.e. libc secure mode.
#line 13
dontaudit cppreopts preopt2cachename:process noatsecure;
#line 13
# XXX dontaudit candidate but requires further study.
#line 13
allow cppreopts preopt2cachename:process { siginh rlimitinh };
#line 13
#line 13
# Make the transition occur by default.
#line 13
type_transition cppreopts preopt2cachename_exec:process preopt2cachename;
#line 13
;
# Allow cppreopts copy files into the dalvik-cache
allow cppreopts dalvikcache_data_file:dir { add_name remove_name search write };
allow cppreopts dalvikcache_data_file:file { create getattr open read rename write unlink };
# Allow cppreopts to execute itself using #!/system/bin/sh
allow cppreopts shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Allow us to run find on /postinstall
allow cppreopts system_file:dir { open read };
# Allow running the cp command using cppreopts permissions. Needed so we can
# write into dalvik-cache
allow cppreopts toolbox_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Silence the denial when /postinstall cannot be mounted, e.g., system_other
# is wiped, but cppreopts.sh still runs.
dontaudit cppreopts postinstall_mnt_dir:dir search;
#line 1 "system/sepolicy/private/crash_dump.te"
typeattribute crash_dump coredomain;
# Crash dump does not need to access devices passed across exec().
dontaudit crash_dump { devpts dev_type }:chr_file { read write };
allow crash_dump {
domain
-apexd
-bpfloader
-crash_dump
-init
-kernel
-keystore
-llkd
-logd
-ueventd
-vendor_init
-vold
}:process { ptrace signal sigchld sigstop sigkill };
#line 29
# Read ART APEX data directory
allow crash_dump apex_art_data_file:dir { getattr search };
allow crash_dump apex_art_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow crash dump to read bootstrap libraries
allow crash_dump system_bootstrap_lib_file:dir { getattr search };
allow crash_dump system_bootstrap_lib_file:file { getattr open read ioctl lock map watch watch_reads };
# Read Vendor APEX directories
allow crash_dump vendor_apex_metadata_file:dir { getattr search };
###
### neverallow assertions
###
# sigchld not explicitly forbidden since it's part of the
# domain-transition-on-exec macros, and is by itself not sensitive
neverallow crash_dump {
apexd
bpfloader
init
kernel
keystore
llkd
logd
ueventd
vendor_init
vold
}:process { ptrace signal sigstop sigkill };
neverallow crash_dump self:process ptrace;
neverallow crash_dump gpu_device:chr_file *;
#line 1 "system/sepolicy/private/credstore.te"
typeattribute credstore coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init credstore_exec:file { getattr open read execute map };
#line 3
allow init credstore:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow credstore credstore_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init credstore:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init credstore:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init credstore_exec:process credstore;
#line 3
#line 3
# talk to Identity Credential
#line 6
typeattribute credstore halclientdomain;
#line 6
typeattribute credstore hal_identity_client;
#line 6
#line 6
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 6
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 6
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 6
#line 6
typeattribute credstore hal_identity;
#line 6
# Find passthrough HAL implementations
#line 6
allow hal_identity system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 6
allow hal_identity vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 6
allow hal_identity vendor_file:file { read open getattr execute map };
#line 6
#line 6
# talk to keymint, specifically for IRemotelyProvisionedComponent/default
#line 9
typeattribute credstore halclientdomain;
#line 9
typeattribute credstore hal_keymint_client;
#line 9
#line 9
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 9
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 9
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 9
#line 9
typeattribute credstore hal_keymint;
#line 9
# Find passthrough HAL implementations
#line 9
allow hal_keymint system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 9
allow hal_keymint vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 9
allow hal_keymint vendor_file:file { read open getattr execute map };
#line 9
#line 9
# credstore needs to get keys from the RKPD
#line 12
allow credstore remote_prov_prop:file { getattr open read map };
#line 12
allow credstore remote_provisioning_service:service_manager find;
#line 1 "system/sepolicy/private/crosvm.te"
type crosvm, domain, coredomain;
type crosvm_exec, system_file_type, exec_type, file_type;
type crosvm_tmpfs, file_type;
# Let crosvm open VM manager devices such as /dev/kvm.
allow crosvm vm_manager_device_type:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Most other domains shouldn't access /dev/kvm.
neverallow { domain -crosvm -ueventd -shell } kvm_device:chr_file getattr;
neverallow { domain -crosvm -ueventd } kvm_device:chr_file ~getattr;
neverallowxperm { domain -crosvm } kvm_device:chr_file ioctl ~{ 0x0000ae03 };
# Most other domains shouldn't access other vm managers either.
# These restrictions need to be slightly looser than for kvm_device to allow
# for different implementations.
neverallow { coredomain appdomain -crosvm -ueventd -shell } vm_manager_device_type:chr_file getattr;
neverallow { coredomain appdomain -crosvm -ueventd } vm_manager_device_type:chr_file ~getattr;
# Let crosvm create temporary files.
#line 20
type_transition crosvm tmpfs:file crosvm_tmpfs;
#line 20
allow crosvm crosvm_tmpfs:file { read write getattr map };
#line 20
# Let crosvm receive file descriptors from VirtualizationService.
allow crosvm virtualizationmanager:fd use;
# Allow sending VirtualizationService the failure reason and console/log from the VM via pipe.
allow crosvm virtualizationmanager:fifo_file write;
# Let crosvm read the composite disk images (virtualizationservice_data_file), APEXes
# (staging_data_file), APKs (apk_data_file and shell_data_file where the latter is for test apks in
# /data/local/tmp), instance.img (app_data_file), and microdroid vendor image (vendor_microdroid_file).
# Allow crosvm to read the instance image of the service VM saved in apex_virt_data_file.
# Note that the open permission is not given as the files are passed as file descriptors.
allow crosvm {
virtualizationservice_data_file
staging_data_file
apk_data_file
app_data_file
privapp_data_file
apex_compos_data_file
apex_virt_data_file
shell_data_file
vendor_microdroid_file
}:file { getattr read ioctl lock };
# Allow searching the directory where the composite disk images are.
allow crosvm virtualizationservice_data_file:dir search;
# When running a VM as root we get spurious capability denials.
# Suppress them.
#line 52
# Allow crosvm to tune for performance.
allow crosvm self:{ capability cap_userns } sys_nice;
# Let crosvm access its control socket as created by VS.
# read, write, getattr: listener socket polling
# accept: listener socket accepting new connection
# Note that the open permission is not given as the socket is passed by FD.
allow crosvm virtualizationmanager:unix_stream_socket { accept read write getattr getopt };
# Let crosvm open test artifacts under /data/local/tmp with file path. (e.g. custom pvmfw.img)
#line 67
# The instance image and the composite image should be writable as well because they could represent
# mutable disks.
allow crosvm {
virtualizationservice_data_file
app_data_file
privapp_data_file
apex_compos_data_file
apex_virt_data_file
}:file write;
# Allow crosvm to pipe console log to shell or app which could be the owner of a VM.
allow crosvm adbd:fd use;
allow crosvm adbd:unix_stream_socket { read write };
allow crosvm devpts:chr_file { read write getattr ioctl };
# crosvm tries to use netlink sockets as part its APCI implementation, but we don't need it for AVF (b/228077254)
dontaudit crosvm self:netlink_generic_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# crosvm can write files in /data/local/tmp which are usually used for instance.img and logging by
# compliance tests and demo apps. Write access to instance.img is particularily important because
# the VM has to initialize the disk image on its first boot. Note that open access is still not
# granted because the files are expected to be opened by the owner of the VM (apps or shell in case
# when the vm is created by the `vm` tool) and handed over to crosvm as FD.
allow crosvm shell_data_file:file write;
# crosvm tries to read serial device, including the write-only pipe from virtualizationmanager (to
# forward console/log to the host logcat).
# crosvm only needs write permission, so dontaudit read
dontaudit crosvm virtualizationmanager:fifo_file { read getattr };
# Required for crosvm to start gdb-server to enable debugging of guest kernel.
allow crosvm self:tcp_socket { bind create read setopt write accept listen };
allow crosvm port:tcp_socket name_bind;
allow crosvm adbd:unix_stream_socket ioctl;
allow crosvm node:tcp_socket node_bind;
# Allow crosvm to interact to VFIO device
allow crosvm vfio_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow crosvm vfio_device:dir { open getattr read search ioctl lock watch watch_reads };
# Allow crosvm to access VM DTBO via a file created by virtualizationmanager.
allow crosvm virtualizationmanager:fd use;
allow crosvm virtualizationservice_data_file:file read;
# Don't allow crosvm to open files that it doesn't own.
# This is important because a malicious application could try to start a VM with a composite disk
# image referring by name to files which it doesn't have permission to open, trying to get crosvm to
# open them on its behalf. By preventing crosvm from opening any other files we prevent this
# potential privilege escalation. See http://b/192453819 for more discussion.
neverallow crosvm {
virtualizationservice_data_file
staging_data_file
apk_data_file
app_data_file
privapp_data_file
}:file open;
# Don't allow crosvm to have access to ordinary vendor files that are not for VMs.
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 128
#line 128
neverallow crosvm {
#line 128
vendor_file_type
#line 128
-vendor_vm_file
#line 128
-vendor_vm_data_file
#line 128
# These types are not required for crosvm, but the access is granted to globally in domain.te
#line 128
# thus should be exempted here.
#line 128
-vendor_configs_file
#line 128
-vendor_microdroid_file
#line 128
-vndk_sp_file
#line 128
-vendor_task_profiles_file
#line 128
}:file *;
#line 128
#line 128
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 140
# Only allow crosvm to read app data files for clients that can start
# VMs. Note that the use of app data files is further restricted
# inside the virtualizationservice by checking the label of all disk
# image files.
neverallow crosvm {
app_data_file_type
-app_data_file
-privapp_data_file
-shell_data_file
}:file read;
# Only virtualizationmanager can run crosvm
neverallow {
domain
-crosvm
-virtualizationmanager
} crosvm_exec:file { execute execute_no_trans };
#line 1 "system/sepolicy/private/derive_classpath.te"
# Domain for derive_classpath
type derive_classpath, domain, coredomain;
type derive_classpath_exec, system_file_type, exec_type, file_type;
#line 5
#line 5
# Allow the necessary permissions.
#line 5
#line 5
# Old domain may exec the file and transition to the new domain.
#line 5
allow init derive_classpath_exec:file { getattr open read execute map };
#line 5
allow init derive_classpath:process transition;
#line 5
# New domain is entered by executing the file.
#line 5
allow derive_classpath derive_classpath_exec:file { entrypoint open read execute getattr map };
#line 5
# New domain can send SIGCHLD to its caller.
#line 5
#line 5
# Enable AT_SECURE, i.e. libc secure mode.
#line 5
dontaudit init derive_classpath:process noatsecure;
#line 5
# XXX dontaudit candidate but requires further study.
#line 5
allow init derive_classpath:process { siginh rlimitinh };
#line 5
#line 5
# Make the transition occur by default.
#line 5
type_transition init derive_classpath_exec:process derive_classpath;
#line 5
#line 5
# Read /apex
allow derive_classpath apex_mnt_dir:dir { open getattr read search ioctl lock watch watch_reads };
allow derive_classpath vendor_apex_metadata_file:dir { open getattr read search ioctl lock watch watch_reads };
# Create /data/system/environ/classpath file
allow derive_classpath environ_system_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow derive_classpath environ_system_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# b/183079517 fails on gphone targets otherwise
allow derive_classpath unlabeled:dir search;
# Allow derive_classpath to write the classpath into ota dexopt
# - Read the ota's apex dir
allow derive_classpath postinstall_apex_mnt_dir:dir { open getattr read search ioctl lock watch watch_reads };
# - Report the BCP to the ota's dexopt
allow derive_classpath postinstall_dexopt:dir search;
allow derive_classpath postinstall_dexopt:fd use;
allow derive_classpath postinstall_dexopt:file read;
allow derive_classpath postinstall_dexopt:lnk_file read;
allow derive_classpath postinstall_dexopt_tmpfs:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 1 "system/sepolicy/private/derive_sdk.te"
# Domain for derive_sdk
type derive_sdk, domain, coredomain;
type derive_sdk_exec, system_file_type, exec_type, file_type;
#line 5
#line 5
# Allow the necessary permissions.
#line 5
#line 5
# Old domain may exec the file and transition to the new domain.
#line 5
allow init derive_sdk_exec:file { getattr open read execute map };
#line 5
allow init derive_sdk:process transition;
#line 5
# New domain is entered by executing the file.
#line 5
allow derive_sdk derive_sdk_exec:file { entrypoint open read execute getattr map };
#line 5
# New domain can send SIGCHLD to its caller.
#line 5
#line 5
# Enable AT_SECURE, i.e. libc secure mode.
#line 5
dontaudit init derive_sdk:process noatsecure;
#line 5
# XXX dontaudit candidate but requires further study.
#line 5
allow init derive_sdk:process { siginh rlimitinh };
#line 5
#line 5
# Make the transition occur by default.
#line 5
type_transition init derive_sdk_exec:process derive_sdk;
#line 5
#line 5
# Read /apex
allow derive_sdk apex_mnt_dir:dir { open getattr read search ioctl lock watch watch_reads };
allow derive_sdk vendor_apex_metadata_file:dir { open getattr read search ioctl lock watch watch_reads };
# Prop rules: writable by derive_sdk, readable by bootclasspath (apps)
#line 12
#line 12
allow derive_sdk property_socket:sock_file write;
#line 12
allow derive_sdk init:unix_stream_socket connectto;
#line 12
#line 12
allow derive_sdk module_sdkextensions_prop:property_service set;
#line 12
#line 12
allow derive_sdk module_sdkextensions_prop:file { getattr open read map };
#line 12
#line 12
neverallow { domain -init -derive_sdk } module_sdkextensions_prop:property_service set;
# Allow derive_sdk to write data back to dumpstate when forked from dumpstate.
# The shell_data_file permissions are needed when a bugreport is taken:
# dumpstate will redirect its stdout to a temporary shell_data_file:file, and
# this makes derive_sdk append to that file.
allow derive_sdk dumpstate:fd use;
allow derive_sdk dumpstate:unix_stream_socket { read write };
allow derive_sdk shell_data_file:file { getattr append read write };
#line 1 "system/sepolicy/private/device_as_webcam.te"
# Domain for DeviceAsWebcam Service
type device_as_webcam, domain, coredomain, mlstrustedsubject;
#line 4
typeattribute device_as_webcam appdomain;
#line 4
# Label tmpfs objects for all apps.
#line 4
type_transition device_as_webcam tmpfs:file appdomain_tmpfs;
#line 4
#line 4
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 4
type device_as_webcam_userfaultfd;
#line 4
type_transition device_as_webcam device_as_webcam:anon_inode device_as_webcam_userfaultfd "[userfaultfd]";
#line 4
# Allow domain to create/use userfaultfd anon_inode.
#line 4
allow device_as_webcam device_as_webcam_userfaultfd:anon_inode { create ioctl read };
#line 4
# Suppress errors generate during bugreport
#line 4
dontaudit su device_as_webcam_userfaultfd:anon_inode *;
#line 4
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 4
neverallow { domain -device_as_webcam } device_as_webcam_userfaultfd:anon_inode *;
#line 4
#line 4
allow device_as_webcam appdomain_tmpfs:file { execute getattr map read write };
#line 4
neverallow { device_as_webcam -runas_app -shell -simpleperf } { domain -device_as_webcam }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 4
neverallow { appdomain -runas_app -shell -simpleperf -device_as_webcam } device_as_webcam:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 4
# The Android security model guarantees the confidentiality and integrity
#line 4
# of application data and execution state. Ptrace bypasses those
#line 4
# confidentiality guarantees. Disallow ptrace access from system components to
#line 4
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 4
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 4
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 4
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 4
# live lock conditions.
#line 4
neverallow { domain -device_as_webcam -crash_dump -runas_app -simpleperf } device_as_webcam:process ptrace;
#line 4
allow device_as_webcam system_app_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow device_as_webcam system_app_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow device_as_webcam { app_api_service cameraserver_service }:service_manager find;
# Allow DeviceAsWebcam Service needs to access ro.usb.uvc.enabled property to
# enale/disable itself
#line 13
allow device_as_webcam usb_uvc_enabled_prop:file { getattr open read map };
#line 13
# need to access /dev to list all devices
allow device_as_webcam device:dir { open getattr read search ioctl lock watch watch_reads };
# UVC nodes are mounted as V4L2 nodes (/dev/video*) on the device. These need to
# be accessed by the DeviceAsWebcam Service.
allow device_as_webcam video_device:dir { open getattr read search ioctl lock watch watch_reads };
allow device_as_webcam video_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 1 "system/sepolicy/private/dex2oat.te"
# dex2oat
type dex2oat, domain, coredomain;
type dex2oat_exec, system_file_type, exec_type, file_type;
#line 5
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 5
type dex2oat_userfaultfd;
#line 5
type_transition dex2oat dex2oat:anon_inode dex2oat_userfaultfd "[userfaultfd]";
#line 5
# Allow domain to create/use userfaultfd anon_inode.
#line 5
allow dex2oat dex2oat_userfaultfd:anon_inode { create ioctl read };
#line 5
# Suppress errors generate during bugreport
#line 5
dontaudit su dex2oat_userfaultfd:anon_inode *;
#line 5
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 5
neverallow { domain -dex2oat } dex2oat_userfaultfd:anon_inode *;
#line 5
#line 7
allow dex2oat apk_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 7
allow dex2oat apk_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 7
# Access to /vendor/app
#line 9
allow dex2oat vendor_app_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 9
allow dex2oat vendor_app_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 9
# Access /vendor/framework
allow dex2oat vendor_framework_file:dir { getattr search };
allow dex2oat vendor_framework_file:file { getattr open read map };
# Access /vendor/overlay
#line 14
allow dex2oat vendor_overlay_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 14
allow dex2oat vendor_overlay_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 14
;
# Vendor overlay can be found in vendor apex
allow dex2oat vendor_apex_metadata_file:dir { getattr search };
allow dex2oat tmpfs:file { read getattr map };
#line 20
allow dex2oat dalvikcache_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 20
allow dex2oat dalvikcache_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 20
allow dex2oat dalvikcache_data_file:file write;
# Acquire advisory lock on /system/framework/arm/*
allow dex2oat system_file:file lock;
allow dex2oat postinstall_file:file lock;
# Read already open asec_apk_file file descriptors passed by installd.
# Also allow reading unlabeled files, to allow for upgrading forward
# locked APKs.
allow dex2oat asec_apk_file:file { read map };
allow dex2oat unlabeled:file { read map };
allow dex2oat oemfs:file { read map };
allow dex2oat apk_tmp_file:dir search;
allow dex2oat apk_tmp_file:file { getattr open read ioctl lock map watch watch_reads };
allow dex2oat user_profile_data_file:file { getattr read lock map };
# Allow dex2oat to compile app's secondary dex files which were reported back to
# the framework.
allow dex2oat { privapp_data_file app_data_file }:file { getattr read write lock map };
# Allow dex2oat to find files and directories under /data/misc/apexdata/com.android.runtime.
allow dex2oat apex_module_data_file:dir search;
# Allow dex2oat to use devpts passed from odsign.
allow dex2oat odsign_devpts:chr_file { read write };
# Allow dex2oat to write to file descriptors from odrefresh for files
# in the staging area.
allow dex2oat apex_art_staging_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow dex2oat apex_art_staging_data_file:file { getattr map read write unlink };
# Allow dex2oat to read artifacts from odrefresh.
allow dex2oat apex_art_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow dex2oat apex_art_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow dex2oat to read runtime native flag properties.
#line 57
allow dex2oat device_config_runtime_native_prop:file { getattr open read map };
#line 57
#line 58
allow dex2oat device_config_runtime_native_boot_prop:file { getattr open read map };
#line 58
# Allow dex2oat to read /apex/apex-info-list.xml
allow dex2oat apex_info_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow dex2oat to use file descriptors passed from privileged programs.
allow dex2oat { artd installd odrefresh odsign }:fd use;
# Allow dex2oat to read the /proc filesystem for CPU features, etc.
allow dex2oat proc_filesystems:file { getattr open read ioctl lock map watch watch_reads };
##################
# A/B OTA Dexopt #
##################
# Allow dex2oat to use file descriptors from otapreopt.
allow dex2oat postinstall_dexopt:fd use;
# Allow dex2oat to read files under /postinstall (e.g. APKs under /system, /system/bin/linker).
allow dex2oat postinstall_file:dir { open getattr read search ioctl lock watch watch_reads };
allow dex2oat postinstall_file:filesystem getattr;
allow dex2oat postinstall_file:lnk_file { getattr read };
allow dex2oat postinstall_file:file read;
# Allow dex2oat to use libraries under /postinstall/system (e.g. /system/lib/libc.so).
# TODO(b/120266448): Remove when Bionic libraries are part of the Runtime APEX.
allow dex2oat postinstall_file:file { execute getattr open };
# Allow dex2oat access to /postinstall/apex.
allow dex2oat postinstall_apex_mnt_dir:dir { getattr search };
allow dex2oat postinstall_apex_mnt_dir:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
# Allow dex2oat access to files in /data/ota.
allow dex2oat ota_data_file:dir { { open getattr read search ioctl lock watch watch_reads } add_name write };
allow dex2oat ota_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Create and read symlinks in /data/ota/dalvik-cache. This is required for PIC mode boot images,
# where the oat file is symlinked to the original file in /system.
allow dex2oat ota_data_file:lnk_file { create read };
# It would be nice to tie this down, but currently, because of how images are written, we can't
# pass file descriptors for the preopted boot image to dex2oat. So dex2oat needs to be able to
# create them itself (and make them world-readable).
allow dex2oat ota_data_file:file { create { open append write lock map } setattr };
###############
# APEX Update #
###############
# /dev/zero is inherited.
allow dex2oat apexd:fd use;
# Allow dex2oat to use file descriptors from preinstall.
##############
# Neverallow #
##############
neverallow dex2oat app_data_file_type:{ file lnk_file sock_file fifo_file } open;
#line 1 "system/sepolicy/private/dexopt_chroot_setup.te"
type dexopt_chroot_setup, domain, coredomain;
type dexopt_chroot_setup_exec, system_file_type, exec_type, file_type;
type dexopt_chroot_setup_tmpfs, file_type;
# Allow dexopt_chroot_setup to publish a binder service and make binder calls.
#line 6
# Call the servicemanager and transfer references to it.
#line 6
allow dexopt_chroot_setup servicemanager:binder { call transfer };
#line 6
# Allow servicemanager to send out callbacks
#line 6
allow servicemanager dexopt_chroot_setup:binder { call transfer };
#line 6
# servicemanager performs getpidcon on clients.
#line 6
allow servicemanager dexopt_chroot_setup:dir search;
#line 6
allow servicemanager dexopt_chroot_setup:file { read open };
#line 6
allow servicemanager dexopt_chroot_setup:process getattr;
#line 6
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 6
# all domains in domain.te.
#line 6
#line 7
allow dexopt_chroot_setup dexopt_chroot_setup_service:service_manager { add find };
#line 7
neverallow { domain -dexopt_chroot_setup } dexopt_chroot_setup_service:service_manager add;
#line 7
#line 7
# On debug builds with root, allow binder services to use binder over TCP.
#line 7
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 7
#line 7
allow dexopt_chroot_setup dumpstate:fifo_file { getattr write };
allow dexopt_chroot_setup dumpstate:fd use;
#line 11
#line 11
# Allow the necessary permissions.
#line 11
#line 11
# Old domain may exec the file and transition to the new domain.
#line 11
allow init dexopt_chroot_setup_exec:file { getattr open read execute map };
#line 11
allow init dexopt_chroot_setup:process transition;
#line 11
# New domain is entered by executing the file.
#line 11
allow dexopt_chroot_setup dexopt_chroot_setup_exec:file { entrypoint open read execute getattr map };
#line 11
# New domain can send SIGCHLD to its caller.
#line 11
#line 11
# Enable AT_SECURE, i.e. libc secure mode.
#line 11
dontaudit init dexopt_chroot_setup:process noatsecure;
#line 11
# XXX dontaudit candidate but requires further study.
#line 11
allow init dexopt_chroot_setup:process { siginh rlimitinh };
#line 11
#line 11
# Make the transition occur by default.
#line 11
type_transition init dexopt_chroot_setup_exec:process dexopt_chroot_setup;
#line 11
#line 11
# Use tmpfs_domain() which will give tmpfs files created by dexopt_chroot_setup their
# own label, which differs from other labels created by other processes.
# This allows to distinguish in policy files created by dexopt_chroot_setup vs other
# processes.
#line 17
type_transition dexopt_chroot_setup tmpfs:file dexopt_chroot_setup_tmpfs;
#line 17
allow dexopt_chroot_setup dexopt_chroot_setup_tmpfs:file { read write getattr map };
#line 17
# libart (mark_compact.cc) has some intialization code that touches the cache
# info file and userfaultfd.
allow dexopt_chroot_setup apex_module_data_file:dir { getattr search };
#line 22
allow dexopt_chroot_setup apex_art_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 22
allow dexopt_chroot_setup apex_art_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 22
#line 23
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 23
type dexopt_chroot_setup_userfaultfd;
#line 23
type_transition dexopt_chroot_setup dexopt_chroot_setup:anon_inode dexopt_chroot_setup_userfaultfd "[userfaultfd]";
#line 23
# Allow domain to create/use userfaultfd anon_inode.
#line 23
allow dexopt_chroot_setup dexopt_chroot_setup_userfaultfd:anon_inode { create ioctl read };
#line 23
# Suppress errors generate during bugreport
#line 23
dontaudit su dexopt_chroot_setup_userfaultfd:anon_inode *;
#line 23
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 23
neverallow { domain -dexopt_chroot_setup } dexopt_chroot_setup_userfaultfd:anon_inode *;
#line 23
#line 1 "system/sepolicy/private/dexoptanalyzer.te"
# dexoptanalyzer
type dexoptanalyzer, domain, coredomain, mlstrustedsubject;
type dexoptanalyzer_exec, system_file_type, exec_type, file_type;
type dexoptanalyzer_tmpfs, file_type;
#line 6
allow dexoptanalyzer apk_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 6
allow dexoptanalyzer apk_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 6
# Access to /vendor/app
#line 8
allow dexoptanalyzer vendor_app_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 8
allow dexoptanalyzer vendor_app_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 8
# Reading an APK opens a ZipArchive, which unpack to tmpfs.
# Use tmpfs_domain() which will give tmpfs files created by dexoptanalyzer their
# own label, which differs from other labels created by other processes.
# This allows to distinguish in policy files created by dexoptanalyzer vs other
# processes.
#line 15
type_transition dexoptanalyzer tmpfs:file dexoptanalyzer_tmpfs;
#line 15
allow dexoptanalyzer dexoptanalyzer_tmpfs:file { read write getattr map };
#line 15
#line 17
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 17
type dexoptanalyzer_userfaultfd;
#line 17
type_transition dexoptanalyzer dexoptanalyzer:anon_inode dexoptanalyzer_userfaultfd "[userfaultfd]";
#line 17
# Allow domain to create/use userfaultfd anon_inode.
#line 17
allow dexoptanalyzer dexoptanalyzer_userfaultfd:anon_inode { create ioctl read };
#line 17
# Suppress errors generate during bugreport
#line 17
dontaudit su dexoptanalyzer_userfaultfd:anon_inode *;
#line 17
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 17
neverallow { domain -dexoptanalyzer } dexoptanalyzer_userfaultfd:anon_inode *;
#line 17
# Allow dexoptanalyzer to read files in the dalvik cache.
allow dexoptanalyzer dalvikcache_data_file:dir { getattr search };
allow dexoptanalyzer dalvikcache_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Read symlinks in /data/dalvik-cache. This is required for PIC mode boot
# app_data_file the oat file is symlinked to the original file in /system.
allow dexoptanalyzer dalvikcache_data_file:lnk_file read;
# Allow dexoptanalyzer to read files in the ART APEX data directory.
allow dexoptanalyzer { apex_art_data_file apex_module_data_file }:dir { getattr search };
allow dexoptanalyzer apex_art_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow dexoptanalyzer to use file descriptors from odrefresh.
allow dexoptanalyzer odrefresh:fd use;
# Use devpts and fd from odsign (which exec()'s odrefresh)
allow dexoptanalyzer odsign:fd use;
allow dexoptanalyzer odsign_devpts:chr_file { read write };
allow dexoptanalyzer installd:fd use;
allow dexoptanalyzer installd:fifo_file { getattr write };
# Acquire advisory lock on /system/framework/arm/*
allow dexoptanalyzer system_file:file lock;
# Allow reading secondary dex files that were reported by the app to the
# package manager.
allow dexoptanalyzer { privapp_data_file app_data_file }:file { getattr read map };
# dexoptanalyzer checks the DM files next to dex files. We don't need this check
# for secondary dex files, but it's not harmful. Just deny it and ignore it.
dontaudit dexoptanalyzer { privapp_data_file app_data_file }:dir search;
# Allow testing /data/user/0 which symlinks to /data/data
allow dexoptanalyzer system_data_file:lnk_file { getattr };
# Allow query ART device config properties
#line 56
allow dexoptanalyzer device_config_runtime_native_prop:file { getattr open read map };
#line 56
#line 57
allow dexoptanalyzer device_config_runtime_native_boot_prop:file { getattr open read map };
#line 57
# Allow dexoptanalyzer to read /apex/apex-info-list.xml
allow dexoptanalyzer apex_info_file:file { getattr open read ioctl lock map watch watch_reads };
#line 1 "system/sepolicy/private/dhcp.te"
typeattribute dhcp coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init dhcp_exec:file { getattr open read execute map };
#line 3
allow init dhcp:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow dhcp dhcp_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init dhcp:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init dhcp:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init dhcp_exec:process dhcp;
#line 3
#line 3
type_transition dhcp system_data_file:{ dir file } dhcp_data_file;
#line 6
#line 6
allow dhcp property_socket:sock_file write;
#line 6
allow dhcp init:unix_stream_socket connectto;
#line 6
#line 6
allow dhcp dhcp_prop:property_service set;
#line 6
#line 6
allow dhcp dhcp_prop:file { getattr open read map };
#line 6
#line 6
#line 7
#line 7
allow dhcp property_socket:sock_file write;
#line 7
allow dhcp init:unix_stream_socket connectto;
#line 7
#line 7
allow dhcp pan_result_prop:property_service set;
#line 7
#line 7
allow dhcp pan_result_prop:file { getattr open read map };
#line 7
#line 7
#line 1 "system/sepolicy/private/dmesgd.te"
type dmesgd, domain, coredomain;
type dmesgd_exec, system_file_type, exec_type, file_type;
#line 4
#line 4
# Allow the necessary permissions.
#line 4
#line 4
# Old domain may exec the file and transition to the new domain.
#line 4
allow init dmesgd_exec:file { getattr open read execute map };
#line 4
allow init dmesgd:process transition;
#line 4
# New domain is entered by executing the file.
#line 4
allow dmesgd dmesgd_exec:file { entrypoint open read execute getattr map };
#line 4
# New domain can send SIGCHLD to its caller.
#line 4
#line 4
# Enable AT_SECURE, i.e. libc secure mode.
#line 4
dontaudit init dmesgd:process noatsecure;
#line 4
# XXX dontaudit candidate but requires further study.
#line 4
allow init dmesgd:process { siginh rlimitinh };
#line 4
#line 4
# Make the transition occur by default.
#line 4
type_transition init dmesgd_exec:process dmesgd;
#line 4
#line 4
allow dmesgd dmesgd_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow dmesgd dmesgd_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow dmesgd kernel:system syslog_read;
allow dmesgd shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow dmesgd toolbox_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
#line 12
# Call the servicemanager and transfer references to it.
#line 12
allow dmesgd servicemanager:binder { call transfer };
#line 12
# Allow servicemanager to send out callbacks
#line 12
allow servicemanager dmesgd:binder { call transfer };
#line 12
# servicemanager performs getpidcon on clients.
#line 12
allow servicemanager dmesgd:dir search;
#line 12
allow servicemanager dmesgd:file { read open };
#line 12
allow servicemanager dmesgd:process getattr;
#line 12
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 12
# all domains in domain.te.
#line 12
#line 13
# Call the server domain and optionally transfer references to it.
#line 13
allow dmesgd system_server:binder { call transfer };
#line 13
# Allow the serverdomain to transfer references to the client on the reply.
#line 13
allow system_server dmesgd:binder transfer;
#line 13
# Receive and use open files from the server.
#line 13
allow dmesgd system_server:fd use;
#line 13
allow dmesgd dropbox_service:service_manager find;
allow dmesgd proc_version:file { getattr open read ioctl lock map watch watch_reads };
#line 1 "system/sepolicy/private/dnsmasq.te"
typeattribute dnsmasq coredomain;
#line 1 "system/sepolicy/private/domain.te"
# Transition to crash_dump when /system/bin/crash_dump* is executed.
# This occurs when the process crashes.
# We do not apply this to the su domain to avoid interfering with
# tests (b/114136122)
#line 5
# Allow the necessary permissions.
#line 5
#line 5
# Old domain may exec the file and transition to the new domain.
#line 5
allow { domain } crash_dump_exec:file { getattr open read execute map };
#line 5
allow { domain } crash_dump:process transition;
#line 5
# New domain is entered by executing the file.
#line 5
allow crash_dump crash_dump_exec:file { entrypoint open read execute getattr map };
#line 5
# New domain can send SIGCHLD to its caller.
#line 5
allow crash_dump { domain }:process sigchld;
#line 5
# Enable AT_SECURE, i.e. libc secure mode.
#line 5
dontaudit { domain } crash_dump:process noatsecure;
#line 5
# XXX dontaudit candidate but requires further study.
#line 5
allow { domain } crash_dump:process { siginh rlimitinh };
#line 5
#line 5
# Make the transition occur by default.
#line 5
type_transition { domain } crash_dump_exec:process crash_dump;
#line 5
;
allow domain crash_dump:process sigchld;
# Allow every process to check the heapprofd.enable properties to determine
# whether to load the heap profiling library. This does not necessarily enable
# heap profiling, as initialization will fail if it does not have the
# necessary SELinux permissions.
#line 12
allow domain heapprofd_prop:file { getattr open read map };
#line 12
;
# See private/crash_dump.te
#line 29
# Allow heap profiling by heapprofd.
# Zygotes are excluded due to potential issues with holding open file
# descriptors or other state across forks. Other exclusions conflict with
# neverallows, and are not considered important to profile.
#line 35
# Allow central daemon to send signal for client initialization.
#line 35
allow heapprofd {
#line 35
{
#line 35
domain
#line 35
-apexd
#line 35
-bpfloader
#line 35
-crash_dump
#line 35
-crosvm # TODO(b/236672526): Remove exception for crosvm
#line 35
-init
#line 35
-kernel
#line 35
-keystore
#line 35
-llkd
#line 35
-logd
#line 35
-ueventd
#line 35
-vendor_init
#line 35
-vold
#line 35
}
#line 35
-app_zygote
#line 35
-hal_configstore_server
#line 35
-logpersist
#line 35
-recovery
#line 35
-recovery_persist
#line 35
-recovery_refresh
#line 35
-webview_zygote
#line 35
-zygote
#line 35
}:process signal;
#line 35
# Allow connecting to the daemon.
#line 35
#line 35
allow {
#line 35
{
#line 35
domain
#line 35
-apexd
#line 35
-bpfloader
#line 35
-crash_dump
#line 35
-crosvm # TODO(b/236672526): Remove exception for crosvm
#line 35
-init
#line 35
-kernel
#line 35
-keystore
#line 35
-llkd
#line 35
-logd
#line 35
-ueventd
#line 35
-vendor_init
#line 35
-vold
#line 35
}
#line 35
-app_zygote
#line 35
-hal_configstore_server
#line 35
-logpersist
#line 35
-recovery
#line 35
-recovery_persist
#line 35
-recovery_refresh
#line 35
-webview_zygote
#line 35
-zygote
#line 35
} heapprofd_socket:sock_file write;
#line 35
allow {
#line 35
{
#line 35
domain
#line 35
-apexd
#line 35
-bpfloader
#line 35
-crash_dump
#line 35
-crosvm # TODO(b/236672526): Remove exception for crosvm
#line 35
-init
#line 35
-kernel
#line 35
-keystore
#line 35
-llkd
#line 35
-logd
#line 35
-ueventd
#line 35
-vendor_init
#line 35
-vold
#line 35
}
#line 35
-app_zygote
#line 35
-hal_configstore_server
#line 35
-logpersist
#line 35
-recovery
#line 35
-recovery_persist
#line 35
-recovery_refresh
#line 35
-webview_zygote
#line 35
-zygote
#line 35
} heapprofd:unix_stream_socket connectto;
#line 35
#line 35
# Allow daemon to use the passed fds.
#line 35
allow heapprofd {
#line 35
{
#line 35
domain
#line 35
-apexd
#line 35
-bpfloader
#line 35
-crash_dump
#line 35
-crosvm # TODO(b/236672526): Remove exception for crosvm
#line 35
-init
#line 35
-kernel
#line 35
-keystore
#line 35
-llkd
#line 35
-logd
#line 35
-ueventd
#line 35
-vendor_init
#line 35
-vold
#line 35
}
#line 35
-app_zygote
#line 35
-hal_configstore_server
#line 35
-logpersist
#line 35
-recovery
#line 35
-recovery_persist
#line 35
-recovery_refresh
#line 35
-webview_zygote
#line 35
-zygote
#line 35
}:fd use;
#line 35
# Allow to read and write to heapprofd shmem.
#line 35
# The client needs to read the read and write pointers in order to write.
#line 35
allow {
#line 35
{
#line 35
domain
#line 35
-apexd
#line 35
-bpfloader
#line 35
-crash_dump
#line 35
-crosvm # TODO(b/236672526): Remove exception for crosvm
#line 35
-init
#line 35
-kernel
#line 35
-keystore
#line 35
-llkd
#line 35
-logd
#line 35
-ueventd
#line 35
-vendor_init
#line 35
-vold
#line 35
}
#line 35
-app_zygote
#line 35
-hal_configstore_server
#line 35
-logpersist
#line 35
-recovery
#line 35
-recovery_persist
#line 35
-recovery_refresh
#line 35
-webview_zygote
#line 35
-zygote
#line 35
} heapprofd_tmpfs:file { read write getattr map };
#line 35
# Use shared memory received over the unix socket.
#line 35
allow {
#line 35
{
#line 35
domain
#line 35
-apexd
#line 35
-bpfloader
#line 35
-crash_dump
#line 35
-crosvm # TODO(b/236672526): Remove exception for crosvm
#line 35
-init
#line 35
-kernel
#line 35
-keystore
#line 35
-llkd
#line 35
-logd
#line 35
-ueventd
#line 35
-vendor_init
#line 35
-vold
#line 35
}
#line 35
-app_zygote
#line 35
-hal_configstore_server
#line 35
-logpersist
#line 35
-recovery
#line 35
-recovery_persist
#line 35
-recovery_refresh
#line 35
-webview_zygote
#line 35
-zygote
#line 35
} heapprofd:fd use;
#line 35
#line 35
# To read and write from the received file descriptors.
#line 35
# /proc/[pid]/maps and /proc/[pid]/mem have the same SELinux label as the
#line 35
# process they relate to.
#line 35
# We need to write to /proc/$PID/page_idle to find idle allocations.
#line 35
# The client only opens /proc/self/page_idle with RDWR, everything else
#line 35
# with RDONLY.
#line 35
# heapprofd cannot open /proc/$PID/mem itself, as it does not have
#line 35
# sys_ptrace.
#line 35
allow heapprofd {
#line 35
{
#line 35
domain
#line 35
-apexd
#line 35
-bpfloader
#line 35
-crash_dump
#line 35
-crosvm # TODO(b/236672526): Remove exception for crosvm
#line 35
-init
#line 35
-kernel
#line 35
-keystore
#line 35
-llkd
#line 35
-logd
#line 35
-ueventd
#line 35
-vendor_init
#line 35
-vold
#line 35
}
#line 35
-app_zygote
#line 35
-hal_configstore_server
#line 35
-logpersist
#line 35
-recovery
#line 35
-recovery_persist
#line 35
-recovery_refresh
#line 35
-webview_zygote
#line 35
-zygote
#line 35
}:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 35
# Allow searching the /proc/[pid] directory for cmdline.
#line 35
allow heapprofd {
#line 35
{
#line 35
domain
#line 35
-apexd
#line 35
-bpfloader
#line 35
-crash_dump
#line 35
-crosvm # TODO(b/236672526): Remove exception for crosvm
#line 35
-init
#line 35
-kernel
#line 35
-keystore
#line 35
-llkd
#line 35
-logd
#line 35
-ueventd
#line 35
-vendor_init
#line 35
-vold
#line 35
}
#line 35
-app_zygote
#line 35
-hal_configstore_server
#line 35
-logpersist
#line 35
-recovery
#line 35
-recovery_persist
#line 35
-recovery_refresh
#line 35
-webview_zygote
#line 35
-zygote
#line 35
}:dir { open getattr read search ioctl lock watch watch_reads };
#line 45
# Allow profiling using perf_event_open by traced_perf.
#line 48
# Allow directory & file read to traced_perf, as it stat(2)s /proc/[pid], and
#line 48
# reads /proc/[pid]/cmdline.
#line 48
allow traced_perf {
#line 48
{
#line 48
domain
#line 48
-apexd
#line 48
-bpfloader
#line 48
-crash_dump
#line 48
-crosvm # TODO(b/236672526): Remove exception for crosvm
#line 48
-init
#line 48
-kernel
#line 48
-keystore
#line 48
-llkd
#line 48
-logd
#line 48
-ueventd
#line 48
-vendor_init
#line 48
-vold
#line 48
}
#line 48
-app_zygote
#line 48
-hal_configstore_server
#line 48
-webview_zygote
#line 48
-zygote
#line 48
}:file { getattr open read ioctl lock map watch watch_reads };
#line 48
allow traced_perf {
#line 48
{
#line 48
domain
#line 48
-apexd
#line 48
-bpfloader
#line 48
-crash_dump
#line 48
-crosvm # TODO(b/236672526): Remove exception for crosvm
#line 48
-init
#line 48
-kernel
#line 48
-keystore
#line 48
-llkd
#line 48
-logd
#line 48
-ueventd
#line 48
-vendor_init
#line 48
-vold
#line 48
}
#line 48
-app_zygote
#line 48
-hal_configstore_server
#line 48
-webview_zygote
#line 48
-zygote
#line 48
}:dir { open getattr read search ioctl lock watch watch_reads };
#line 48
#line 48
# Allow central daemon to send signal to request /proc/[pid]/maps and
#line 48
# /proc/[pid]/mem fds from this process.
#line 48
allow traced_perf {
#line 48
{
#line 48
domain
#line 48
-apexd
#line 48
-bpfloader
#line 48
-crash_dump
#line 48
-crosvm # TODO(b/236672526): Remove exception for crosvm
#line 48
-init
#line 48
-kernel
#line 48
-keystore
#line 48
-llkd
#line 48
-logd
#line 48
-ueventd
#line 48
-vendor_init
#line 48
-vold
#line 48
}
#line 48
-app_zygote
#line 48
-hal_configstore_server
#line 48
-webview_zygote
#line 48
-zygote
#line 48
}:process signal;
#line 48
#line 48
# Allow connecting to the daemon.
#line 48
#line 48
allow {
#line 48
{
#line 48
domain
#line 48
-apexd
#line 48
-bpfloader
#line 48
-crash_dump
#line 48
-crosvm # TODO(b/236672526): Remove exception for crosvm
#line 48
-init
#line 48
-kernel
#line 48
-keystore
#line 48
-llkd
#line 48
-logd
#line 48
-ueventd
#line 48
-vendor_init
#line 48
-vold
#line 48
}
#line 48
-app_zygote
#line 48
-hal_configstore_server
#line 48
-webview_zygote
#line 48
-zygote
#line 48
} traced_perf_socket:sock_file write;
#line 48
allow {
#line 48
{
#line 48
domain
#line 48
-apexd
#line 48
-bpfloader
#line 48
-crash_dump
#line 48
-crosvm # TODO(b/236672526): Remove exception for crosvm
#line 48
-init
#line 48
-kernel
#line 48
-keystore
#line 48
-llkd
#line 48
-logd
#line 48
-ueventd
#line 48
-vendor_init
#line 48
-vold
#line 48
}
#line 48
-app_zygote
#line 48
-hal_configstore_server
#line 48
-webview_zygote
#line 48
-zygote
#line 48
} traced_perf:unix_stream_socket connectto;
#line 48
#line 48
# Allow daemon to use the passed fds.
#line 48
allow traced_perf {
#line 48
{
#line 48
domain
#line 48
-apexd
#line 48
-bpfloader
#line 48
-crash_dump
#line 48
-crosvm # TODO(b/236672526): Remove exception for crosvm
#line 48
-init
#line 48
-kernel
#line 48
-keystore
#line 48
-llkd
#line 48
-logd
#line 48
-ueventd
#line 48
-vendor_init
#line 48
-vold
#line 48
}
#line 48
-app_zygote
#line 48
-hal_configstore_server
#line 48
-webview_zygote
#line 48
-zygote
#line 48
}:fd use;
#line 54
# Everyone can access the IncFS list of features.
#line 57
allow domain sysfs_fs_incfs_features:dir { open getattr read search ioctl lock watch watch_reads };
#line 57
allow domain sysfs_fs_incfs_features:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 57
;
# Everyone can access the fuse list of features.
#line 60
allow domain sysfs_fs_fuse_features:dir { open getattr read search ioctl lock watch watch_reads };
#line 60
allow domain sysfs_fs_fuse_features:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 60
;
# Path resolution access in cgroups.
allow domain cgroup:dir search;
allow { domain -appdomain -rs } cgroup:dir { open search write add_name remove_name lock };
allow { domain -appdomain -rs } cgroup:file { open append write lock map };
allow domain cgroup_v2:dir search;
allow { domain -appdomain -rs } cgroup_v2:dir { open search write add_name remove_name lock };
allow { domain -appdomain -rs } cgroup_v2:file { open append write lock map };
allow domain cgroup_rc_file:dir search;
allow domain cgroup_rc_file:file { getattr open read ioctl lock map watch watch_reads };
allow domain task_profiles_file:file { getattr open read ioctl lock map watch watch_reads };
allow domain task_profiles_api_file:file { getattr open read ioctl lock map watch watch_reads };
allow domain vendor_task_profiles_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow all domains to read sys.use_memfd to determine
# if memfd support can be used if device supports it
#line 79
allow domain use_memfd_prop:file { getattr open read map };
#line 79
;
# Read access to sdkextensions props
#line 82
allow domain module_sdkextensions_prop:file { getattr open read map };
#line 82
# Read access to bq configuration values
#line 85
allow domain bq_config_prop:file { getattr open read map };
#line 85
;
# Allow all domains to check whether MTE is set to permissive mode.
#line 88
allow domain permissive_mte_prop:file { getattr open read map };
#line 88
;
# Allow ART to be configurable via device_config properties
# (ART "runs" inside the app process), and MTE bootloader override to be
# observed by everything
#line 93
allow domain device_config_memory_safety_native_boot_prop:file { getattr open read map };
#line 93
;
#line 94
allow domain device_config_memory_safety_native_prop:file { getattr open read map };
#line 94
;
#line 95
allow domain device_config_runtime_native_boot_prop:file { getattr open read map };
#line 95
;
#line 96
allow domain device_config_runtime_native_prop:file { getattr open read map };
#line 96
;
# For now, everyone can access core property files
# Device specific properties are not granted by default
#line 100
# DO NOT ADD ANY PROPERTIES HERE
#line 100
#line 100
allow domain core_property_type:file { getattr open read map };
#line 100
#line 100
#line 100
allow domain exported3_system_prop:file { getattr open read map };
#line 100
#line 100
#line 100
allow domain vendor_default_prop:file { getattr open read map };
#line 100
#line 105
# BEGIN_COMPATIBLE_PROPERTY_ONLY -- this marker is used by CTS -- do not modify
#line 106
#line 106
# DO NOT ADD ANY PROPERTIES HERE
#line 106
#line 106
allow {coredomain appdomain shell} core_property_type:file { getattr open read map };
#line 106
#line 106
#line 106
allow {coredomain appdomain shell} exported3_system_prop:file { getattr open read map };
#line 106
#line 106
#line 106
allow {coredomain appdomain shell} exported_camera_prop:file { getattr open read map };
#line 106
#line 106
#line 106
allow {coredomain shell} userspace_reboot_exported_prop:file { getattr open read map };
#line 106
#line 106
#line 106
allow {coredomain shell} userspace_reboot_log_prop:file { getattr open read map };
#line 106
#line 106
#line 106
allow {coredomain shell} userspace_reboot_test_prop:file { getattr open read map };
#line 106
#line 106
#line 106
allow {domain -coredomain -appdomain} vendor_default_prop:file { getattr open read map };
#line 106
#line 106
#line 106
# END_COMPATIBLE_PROPERTY_ONLY -- this marker is used by CTS -- do not modify
#line 115
# Public readable properties
#line 118
allow domain aaudio_config_prop:file { getattr open read map };
#line 118
#line 119
allow domain apexd_select_prop:file { getattr open read map };
#line 119
#line 120
allow domain arm64_memtag_prop:file { getattr open read map };
#line 120
#line 121
allow domain bluetooth_config_prop:file { getattr open read map };
#line 121
#line 122
allow domain bootloader_prop:file { getattr open read map };
#line 122
#line 123
allow domain build_odm_prop:file { getattr open read map };
#line 123
#line 124
allow domain build_prop:file { getattr open read map };
#line 124
#line 125
allow domain build_vendor_prop:file { getattr open read map };
#line 125
#line 126
allow domain debug_prop:file { getattr open read map };
#line 126
#line 127
allow domain exported_config_prop:file { getattr open read map };
#line 127
#line 128
allow domain exported_default_prop:file { getattr open read map };
#line 128
#line 129
allow domain exported_dumpstate_prop:file { getattr open read map };
#line 129
#line 130
allow domain exported_secure_prop:file { getattr open read map };
#line 130
#line 131
allow domain exported_system_prop:file { getattr open read map };
#line 131
#line 132
allow domain fingerprint_prop:file { getattr open read map };
#line 132
#line 133
allow domain framework_status_prop:file { getattr open read map };
#line 133
#line 134
allow domain gwp_asan_prop:file { getattr open read map };
#line 134
#line 135
allow domain hal_instrumentation_prop:file { getattr open read map };
#line 135
#line 136
allow domain hw_timeout_multiplier_prop:file { getattr open read map };
#line 136
#line 137
allow domain init_service_status_prop:file { getattr open read map };
#line 137
#line 138
allow domain libc_debug_prop:file { getattr open read map };
#line 138
#line 139
allow domain locale_prop:file { getattr open read map };
#line 139
#line 140
allow domain logd_prop:file { getattr open read map };
#line 140
#line 141
allow domain mediadrm_config_prop:file { getattr open read map };
#line 141
#line 142
allow domain property_service_version_prop:file { getattr open read map };
#line 142
#line 143
allow domain soc_prop:file { getattr open read map };
#line 143
#line 144
allow domain socket_hook_prop:file { getattr open read map };
#line 144
#line 145
allow domain surfaceflinger_prop:file { getattr open read map };
#line 145
#line 146
allow domain telephony_status_prop:file { getattr open read map };
#line 146
#line 147
allow domain timezone_prop:file { getattr open read map };
#line 147
#line 148
allow {domain -untrusted_app_all -isolated_app_all -ephemeral_app } userdebug_or_eng_prop:file { getattr open read map };
#line 148
#line 149
allow domain vendor_socket_hook_prop:file { getattr open read map };
#line 149
#line 150
allow domain vndk_prop:file { getattr open read map };
#line 150
#line 151
allow domain vold_status_prop:file { getattr open read map };
#line 151
#line 152
allow domain vts_config_prop:file { getattr open read map };
#line 152
# Binder cache properties are world-readable
#line 155
allow domain binder_cache_bluetooth_server_prop:file { getattr open read map };
#line 155
#line 156
allow domain binder_cache_system_server_prop:file { getattr open read map };
#line 156
#line 157
allow domain binder_cache_telephony_server_prop:file { getattr open read map };
#line 157
# Allow access to fsverity keyring.
allow domain kernel:key search;
# Allow access to keys in the fsverity keyring that were installed at boot.
allow domain fsverity_init:key search;
# For testing purposes, allow access to keys installed with su.
#line 166
# Allow access to linkerconfig file
allow domain linkerconfig_file:dir search;
allow domain linkerconfig_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow all processes to check for the existence of the boringssl_self_test_marker files.
allow domain boringssl_self_test_marker:dir search;
# Allow all processes to read the file_logger property that liblog uses to check if file_logger
# should be used.
#line 177
allow domain log_file_logger_prop:file { getattr open read map };
#line 177
# Allow all processes to connect to PRNG seeder daemon.
#line 180
allow domain prng_seeder_socket:sock_file write;
#line 180
allow domain prng_seeder:unix_stream_socket connectto;
#line 180
# Allow calls to system(3), popen(3), ...
allow {
domain
# Except domains that explicitly neverallow it.
-kernel
-init
-vendor_init
-app_zygote
-webview_zygote
-system_server
-artd
-audioserver
-cameraserver
-mediadrmserver
-mediaextractor
-mediametrics
-mediaserver
-mediatuner
-mediatranscoding
-ueventd
-hal_audio_server
-hal_camera_server
-hal_cas_server
-hal_codec2_server
-hal_configstore_server
-hal_drm_server
-hal_omx_server
} {shell_exec toolbox_exec}:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# No domains other than a select few can access the misc_block_device. This
# block device is reserved for OTA use.
# Do not assert this rule on userdebug/eng builds, due to some devices using
# this partition for testing purposes.
neverallow {
domain
# exclude debuggable builds
-fastbootd
-hal_bootctl_server
-init
-uncrypt
-update_engine
-vendor_init
-vendor_misc_writer
-vold
-recovery
-ueventd
-mtectrl
-misctrl
} misc_block_device:blk_file { append link relabelfrom rename write open read ioctl lock };
# Limit ability to ptrace or read sensitive /proc/pid files of processes
# with other UIDs to these allowlisted domains.
neverallow {
domain
-vold
-dumpstate
-storaged
-system_server
} self:{ capability cap_userns } sys_ptrace;
# Limit ability to generate hardware unique device ID attestations to priv_apps
neverallow { domain -priv_app -gmscore_app } *:keystore2_key gen_unique_id;
neverallow { domain -system_server } *:keystore2_key use_dev_id;
neverallow { domain -system_server } keystore:keystore2 { clear_ns lock reset unlock };
neverallow {
domain
-init
-vendor_init
} debugfs_tracing_debug:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# System_server owns dropbox data, and init creates/restorecons the directory
# Disallow direct access by other processes.
neverallow {
domain
-init
-system_server
} dropbox_data_file:dir *;
neverallow {
domain
-init
-system_server
} dropbox_data_file:file ~{ getattr read };
###
# Services should respect app sandboxes
neverallow {
domain
-appdomain
-artd # compile secondary dex files
-installd # creation of sandbox
} { privapp_data_file app_data_file }:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } { create unlink };
# Only the following processes should be directly accessing private app
# directories.
neverallow {
domain
-adbd
-appdomain
-app_zygote
-artd # compile secondary dex files
-dexoptanalyzer
-installd
-profman
-rs # spawned by appdomain, so carryover the exception above
-runas
-system_server
-viewcompiler
-zygote
} { privapp_data_file app_data_file }:dir *;
# Only apps should be modifying app data. installd is exempted for
# restorecon and package install/uninstall.
neverallow {
domain
-appdomain
-artd # compile secondary dex files
-installd
-rs # spawned by appdomain, so carryover the exception above
} { privapp_data_file app_data_file }:dir ~{ open getattr read search ioctl lock watch watch_reads };
neverallow {
domain
-appdomain
-app_zygote
-artd # compile secondary dex files
-installd
-rs # spawned by appdomain, so carryover the exception above
} { privapp_data_file app_data_file }:{ { chr_file blk_file } { file lnk_file sock_file fifo_file } } open;
neverallow {
domain
-appdomain
-artd # compile secondary dex files
-installd # creation of sandbox
} { privapp_data_file app_data_file }:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } { create unlink };
neverallow {
domain
-artd # compile secondary dex files
-installd
} { privapp_data_file app_data_file }:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } { relabelfrom relabelto };
# The staging directory contains APEX and APK files. It is important to ensure
# that these files cannot be accessed by other domains to ensure that the files
# do not change between system_server staging the files and apexd processing
# the files.
neverallow {
domain
-init
-system_server
-apexd
-installd
-priv_app
-virtualizationmanager
} staging_data_file:dir *;
neverallow {
domain
-init
-system_app
-system_server
-apexd
-adbd
-kernel
-installd
-priv_app
-shell
-virtualizationmanager
-crosvm
} staging_data_file:file *;
neverallow { domain -init -system_server -installd} staging_data_file:dir { add_name create link relabelfrom remove_name rename reparent rmdir setattr write };
# apexd needs the link and unlink permissions, so list every `no_w_file_perms`
# except for `link` and `unlink`.
neverallow { domain -init -system_server } staging_data_file:file
{ append create relabelfrom rename setattr write { execute execute_no_trans } };
neverallow {
domain
-appdomain # for oemfs
-bootanim # for oemfs
-recovery # for /tmp/update_binary in tmpfs
} { fs_type -rootfs }:file execute;
#
# Assert that, to the extent possible, we're not loading executable content from
# outside the rootfs or /system partition except for a few allowlisted domains.
# Executable files loaded from /data is a persistence vector
# we want to avoid. See
# https://bugs.chromium.org/p/project-zero/issues/detail?id=955 for example.
#
neverallow {
domain
-appdomain
-shell
-system_server_startup # for memfd backed executable regions
-app_zygote
-webview_zygote
-zygote
} {
file_type
-system_file_type
-system_lib_file
-system_linker_exec
-vendor_file_type
-exec_type
-postinstall_file
}:file execute;
# Only init is allowed to write cgroup.rc file
neverallow {
domain
-init
-vendor_init
} cgroup_rc_file:file { append create link unlink relabelfrom rename setattr write };
# Only authorized processes should be writing to files in /data/dalvik-cache
neverallow {
domain
-init # TODO: limit init to relabelfrom for files
-zygote
-installd
-postinstall_dexopt
-cppreopts
-dex2oat
-otapreopt_slot
-artd
} dalvikcache_data_file:file { append create link unlink relabelfrom rename setattr write };
neverallow {
domain
-init
-installd
-postinstall_dexopt
-cppreopts
-dex2oat
-zygote
-otapreopt_slot
-artd
} dalvikcache_data_file:dir { add_name create link relabelfrom remove_name rename reparent rmdir setattr write };
# Only authorized processes should be writing to /data/misc/apexdata/com.android.art as it
# contains boot class path and system server AOT artifacts following an ART APEX Mainline update.
neverallow {
domain
# art-related processes
-composd
-compos_fd_server
-odrefresh
-odsign
# others
-apexd
-init
-vold_prepare_subdirs
} apex_art_data_file:file { append create link unlink relabelfrom rename setattr write };
neverallow {
domain
# art-related processes
-composd
-compos_fd_server
-odrefresh
-odsign
# others
-apexd
-init
-vold_prepare_subdirs
} apex_art_data_file:dir { add_name create link relabelfrom remove_name rename reparent rmdir setattr write };
# Protect most domains from executing arbitrary content from /data.
neverallow {
domain
-appdomain
} {
data_file_type
-apex_art_data_file
-dalvikcache_data_file
-system_data_file # shared libs in apks
-apk_data_file
}:file { execute execute_no_trans };
# Minimize dac_override and dac_read_search.
# Instead of granting them it is usually better to add the domain to
# a Unix group or change the permissions of a file.
#line 498
neverallow ~{
#line 499
apexd
#line 499
artd
#line 499
dnsmasq
#line 499
dumpstate
#line 499
init
#line 499
installd
#line 499
#line 499
lmkd
#line 499
migrate_legacy_obb_data
#line 499
netd
#line 499
postinstall_dexopt
#line 499
recovery
#line 499
rss_hwm_reset
#line 499
sdcardd
#line 499
tee
#line 499
ueventd
#line 499
uncrypt
#line 499
vendor_init
#line 499
vold
#line 499
vold_prepare_subdirs
#line 499
zygote
#line 499
} self:{ capability cap_userns } dac_override;
# Since the kernel checks dac_read_search before dac_override, domains that
# have dac_override should also have dac_read_search to eliminate spurious
# denials. Some domains have dac_read_search without having dac_override, so
# this list should be a superset of the one above.
neverallow ~{
{
#line 505
apexd
#line 505
artd
#line 505
dnsmasq
#line 505
dumpstate
#line 505
init
#line 505
installd
#line 505
#line 505
lmkd
#line 505
migrate_legacy_obb_data
#line 505
netd
#line 505
postinstall_dexopt
#line 505
recovery
#line 505
rss_hwm_reset
#line 505
sdcardd
#line 505
tee
#line 505
ueventd
#line 505
uncrypt
#line 505
vendor_init
#line 505
vold
#line 505
vold_prepare_subdirs
#line 505
zygote
#line 505
}
traced_perf
traced_probes
heapprofd
} self:{ capability cap_userns } dac_read_search;
# Limit what domains can mount filesystems or change their mount flags.
# sdcard_type (including vfat and exfat) and fusefs_type are exempt as a larger
# set of domains need this capability, including device-specific domains.
neverallow {
domain
-apexd
-init
-kernel
-otapreopt_chroot
-recovery
-update_engine
-vold
-zygote
} { fs_type
-sdcard_type
-fusefs_type
}:filesystem { mount remount relabelfrom relabelto };
# BEGIN_LAUNCHING_WITH_S_ONLY -- this marker is used by CTS -- do not modify
#line 530
#line 530
neverallow {
#line 530
domain
#line 530
} { debugfs_type -debugfs_tracing_debug }:filesystem { mount remount relabelfrom relabelto };
#line 530
#line 530
# END_LAUNCHING_WITH_S_ONLY -- this marker is used by CTS -- do not modify
#line 534
# Limit raw I/O to these allowlisted domains. Do not apply to debug builds.
neverallow {
domain
-kernel
-gsid
-init
-recovery
-ueventd
-uncrypt
-tee
-hal_bootctl_server
-fastbootd
} self:{ capability cap_userns } sys_rawio;
# Limit directory operations that doesn't need to do app data isolation.
neverallow {
domain
-fsck
-init
-installd
-zygote
} mirror_data_file:dir *;
# This property is being removed. Remove remaining access.
neverallow { domain -init -system_server -vendor_init } net_dns_prop:property_service set;
neverallow { domain -dumpstate -init -system_server -vendor_init } net_dns_prop:file read;
# Only core domains are allowed to access package_manager properties
neverallow { domain -init -system_server } pm_prop:property_service set;
neverallow { domain -coredomain } pm_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Do not allow reading the last boot timestamp from system properties
neverallow { domain -init -system_server -dumpstate } firstboot_prop:file { getattr open read ioctl lock map watch watch_reads };
# Allow ART to set its config properties in its oneshot boot service, in
# addition to the common init and vendor_init access.
neverallow { domain -art_boot -init -vendor_init } dalvik_config_prop:property_service set;
# Kprobes should only be used by adb root
neverallow { domain -init -vendor_init } debugfs_kprobes:file *;
# On TREBLE devices, most coredomains should not access vendor_files.
# TODO(b/71553434): Remove exceptions here.
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 580
#line 580
neverallow {
#line 580
coredomain
#line 580
-appdomain
#line 580
-bootanim
#line 580
-crash_dump
#line 580
-heapprofd
#line 580
#line 580
-init
#line 580
-kernel
#line 580
#line 580
-traced_perf
#line 580
-ueventd
#line 580
} vendor_file:file { { append create link unlink relabelfrom rename setattr write } { execute execute_no_trans } open };
#line 580
#line 580
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 594
# Vendor domains are not permitted to initiate communications to core domain sockets
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 597
#line 597
#line 597
neverallow {
#line 597
domain
#line 597
-coredomain
#line 597
-appdomain
#line 597
-socket_between_core_and_vendor_violators
#line 597
} {
#line 597
coredomain
#line 597
-logd # Logging by writing to logd Unix domain socket is public API
#line 597
-netd # netdomain needs this
#line 597
-mdnsd # netdomain needs this
#line 597
-prng_seeder # Any process using libcrypto needs this
#line 597
# communications with su are permitted only on userdebug or eng builds
#line 597
-init
#line 597
-tombstoned # linker to tombstoned
#line 597
-heapprofd
#line 597
-traced
#line 597
-traced_perf
#line 597
}:{ socket tcp_socket udp_socket rawip_socket netlink_socket packet_socket key_socket unix_stream_socket unix_dgram_socket appletalk_socket netlink_route_socket netlink_tcpdiag_socket netlink_nflog_socket netlink_xfrm_socket netlink_selinux_socket netlink_audit_socket netlink_dnrt_socket netlink_kobject_uevent_socket tun_socket netlink_iscsi_socket netlink_fib_lookup_socket netlink_connector_socket netlink_netfilter_socket netlink_generic_socket netlink_scsitransport_socket netlink_rdma_socket netlink_crypto_socket sctp_socket icmp_socket ax25_socket ipx_socket netrom_socket atmpvc_socket x25_socket rose_socket decnet_socket atmsvc_socket rds_socket irda_socket pppox_socket llc_socket can_socket tipc_socket bluetooth_socket iucv_socket rxrpc_socket isdn_socket phonet_socket ieee802154_socket caif_socket alg_socket nfc_socket vsock_socket kcm_socket qipcrtr_socket smc_socket xdp_socket } { connect sendto };
#line 597
neverallow {
#line 597
domain
#line 597
-coredomain
#line 597
-appdomain
#line 597
-socket_between_core_and_vendor_violators
#line 597
} {
#line 597
coredomain
#line 597
-logd # Logging by writing to logd Unix domain socket is public API
#line 597
-netd # netdomain needs this
#line 597
-mdnsd # netdomain needs this
#line 597
-prng_seeder # Any process using libcrypto needs this
#line 597
# communications with su are permitted only on userdebug or eng builds
#line 597
-init
#line 597
-tombstoned # linker to tombstoned
#line 597
-heapprofd
#line 597
-traced
#line 597
-traced_perf
#line 597
}:unix_stream_socket connectto;
#line 597
;
#line 597
#line 597
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 616
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 618
#line 618
# Do not allow system components access to /vendor files except for the
#line 618
# ones allowed here.
#line 618
neverallow {
#line 618
coredomain
#line 618
# TODO(b/37168747): clean up fwk access to /vendor
#line 618
-crash_dump
#line 618
-crosvm # loads vendor-specific disk images
#line 618
-init # starts vendor executables
#line 618
-kernel # loads /vendor/firmware
#line 618
-heapprofd
#line 618
#line 618
-shell
#line 618
#line 618
-system_executes_vendor_violators
#line 618
-traced_perf # library/binary access for symbolization
#line 618
-ueventd # reads /vendor/ueventd.rc
#line 618
-vold # loads incremental fs driver
#line 618
} {
#line 618
vendor_file_type
#line 618
-same_process_hal_file
#line 618
-vendor_app_file
#line 618
-vendor_apex_file
#line 618
-vendor_apex_metadata_file
#line 618
-vendor_configs_file
#line 618
-vendor_microdroid_file
#line 618
-vendor_service_contexts_file
#line 618
-vendor_framework_file
#line 618
-vendor_idc_file
#line 618
-vendor_keychars_file
#line 618
-vendor_keylayout_file
#line 618
-vendor_overlay_file
#line 618
-vendor_public_framework_file
#line 618
-vendor_public_lib_file
#line 618
-vendor_task_profiles_file
#line 618
-vendor_uuid_mapping_config_file
#line 618
-vndk_sp_file
#line 618
-vendor_aconfig_storage_file
#line 618
}:file *;
#line 618
#line 618
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 657
# mlsvendorcompat is only for compatibility support for older vendor
# images, and should not be granted to any domain in current policy.
# (Every domain is allowed self:fork, so this will trigger if the
# intsersection of domain & mlsvendorcompat is not empty.)
neverallow domain mlsvendorcompat:process fork;
# Only init and otapreopt_chroot should be mounting filesystems on locations
# labeled system or vendor (/product and /vendor respectively).
neverallow { domain -init -otapreopt_chroot } { system_file_type vendor_file_type }:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } mounton;
# Only allow init and vendor_init to read/write mm_events properties
# NOTE: dumpstate is allowed to read any system property
neverallow {
domain
-init
-vendor_init
-dumpstate
} mm_events_config_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Allow the tracing daemon and callstack sampler to use kallsyms to symbolize
# kernel traces. Addresses are not disclosed, they are repalced with symbol
# names (if available). Traces don't disclose KASLR.
neverallow {
domain
-init
-vendor_init
-traced_probes
-traced_perf
} proc_kallsyms:file { open read };
# debugfs_kcov type is not included in this neverallow statement since the KCOV
# tool uses it for kernel fuzzing.
# vendor_modprobe is also exempted since the kernel modules it loads may create
# debugfs files in its context.
# BEGIN_LAUNCHING_WITH_S_ONLY -- this marker is used by CTS -- do not modify
#line 695
#line 695
neverallow {
#line 695
domain
#line 695
-vendor_modprobe
#line 695
#line 695
} { debugfs_type
#line 695
#line 695
-tracefs_type
#line 695
}:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 695
#line 695
# END_LAUNCHING_WITH_S_ONLY -- this marker is used by CTS -- do not modify
#line 708
# Restrict write access to etm sysfs interface.
neverallow { domain -ueventd -vendor_init } sysfs_devices_cs_etm:file { append create link unlink relabelfrom rename setattr write };
# Restrict CAP_PERFMON.
neverallow {
domain
-init
-vendor_modprobe
-kernel
-uprobestats
} self:capability2 perfmon;
# Restrict direct access to shell owned files. The /data/local/tmp directory is
# untrustworthy, and non-allowed domains should not be trusting any content in
# those directories. We allow shell files to be passed around by file
# descriptor, but not directly opened.
# artd doesn't need to access /data/local/tmp, but it needs to access
# /data/{user,user_de}/<user-id>/com.android.shell/... for compiling secondary
# dex files.
neverallow {
domain
-adbd
-appdomain
-artd
-dumpstate
-installd
} shell_data_file:file open;
# In addition to the symlink reading restrictions above, restrict
# write access to shell owned directories. The /data/local/tmp
# directory is untrustworthy, and non-allowed domains should
# not be trusting any content in those directories.
# artd doesn't need to access /data/local/tmp, but it needs to access
# /data/{user,user_de}/<user-id>/com.android.shell/... for compiling secondary
# dex files.
neverallow {
domain
-adbd
-artd
-dumpstate
-installd
-init
-shell
-vold
} shell_data_file:dir { add_name create link relabelfrom remove_name rename reparent rmdir setattr write };
neverallow {
domain
-adbd
-appdomain
-artd
-dumpstate
-init
-installd
-simpleperf_app_runner
-system_server # why?
} shell_data_file:dir open;
neverallow {
domain
-adbd
-appdomain
-artd
-dumpstate
-init
-installd
-simpleperf_app_runner
-system_server # why?
} shell_data_file:dir search;
# respect system_app sandboxes
neverallow {
domain
-appdomain
-artd # compile secondary dex files
-system_server #populate com.android.providers.settings/databases/settings.db.
-installd # creation of app sandbox
-traced_probes # resolve inodes for i/o tracing.
# only needs open and read, the rest is neverallow in
# traced_probes.te.
} system_app_data_file:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } { create unlink open };
neverallow {
isolated_app_all
ephemeral_app
priv_app
sdk_sandbox_all
untrusted_app_all
} system_app_data_file:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } { create unlink open };
neverallow { domain -init } mtectrl:process { dyntransition transition };
# For now, don't allow processes other than gmscore to access /data/misc_ce/<userid>/checkin
neverallow { domain -gmscore_app -init -vold_prepare_subdirs } checkin_data_file:{dir file} *;
# Do not allow write access to aconfig flag value files except init and aconfigd
neverallow { domain -init -aconfigd } aconfig_storage_metadata_file:dir *;
neverallow { domain -init -aconfigd } aconfig_storage_metadata_file:file { append create link unlink relabelfrom rename setattr write };
#line 1 "system/sepolicy/private/drmserver.te"
typeattribute drmserver coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init drmserver_exec:file { getattr open read execute map };
#line 3
allow init drmserver:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow drmserver drmserver_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init drmserver:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init drmserver:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init drmserver_exec:process drmserver;
#line 3
#line 3
type_transition drmserver apk_data_file:sock_file drmserver_socket;
typeattribute drmserver_socket coredomain_socket;
#line 9
allow drmserver drm_service_config_prop:file { getattr open read map };
#line 9
#line 1 "system/sepolicy/private/dumpstate.te"
typeattribute dumpstate coredomain;
type dumpstate_tmpfs, file_type;
#line 4
#line 4
# Allow the necessary permissions.
#line 4
#line 4
# Old domain may exec the file and transition to the new domain.
#line 4
allow init dumpstate_exec:file { getattr open read execute map };
#line 4
allow init dumpstate:process transition;
#line 4
# New domain is entered by executing the file.
#line 4
allow dumpstate dumpstate_exec:file { entrypoint open read execute getattr map };
#line 4
# New domain can send SIGCHLD to its caller.
#line 4
#line 4
# Enable AT_SECURE, i.e. libc secure mode.
#line 4
dontaudit init dumpstate:process noatsecure;
#line 4
# XXX dontaudit candidate but requires further study.
#line 4
allow init dumpstate:process { siginh rlimitinh };
#line 4
#line 4
# Make the transition occur by default.
#line 4
type_transition init dumpstate_exec:process dumpstate;
#line 4
#line 4
# Execute and transition to the vdc domain
#line 7
# Allow the necessary permissions.
#line 7
#line 7
# Old domain may exec the file and transition to the new domain.
#line 7
allow dumpstate vdc_exec:file { getattr open read execute map };
#line 7
allow dumpstate vdc:process transition;
#line 7
# New domain is entered by executing the file.
#line 7
allow vdc vdc_exec:file { entrypoint open read execute getattr map };
#line 7
# New domain can send SIGCHLD to its caller.
#line 7
allow vdc dumpstate:process sigchld;
#line 7
# Enable AT_SECURE, i.e. libc secure mode.
#line 7
dontaudit dumpstate vdc:process noatsecure;
#line 7
# XXX dontaudit candidate but requires further study.
#line 7
allow dumpstate vdc:process { siginh rlimitinh };
#line 7
#line 7
# Make the transition occur by default.
#line 7
type_transition dumpstate vdc_exec:process vdc;
#line 7
# Create tmpfs files for using memfd descriptors to get output from child
# processes.
#line 11
type_transition dumpstate tmpfs:file dumpstate_tmpfs;
#line 11
allow dumpstate dumpstate_tmpfs:file { read write getattr map };
#line 11
# Acquire advisory lock on /system/etc/xtables.lock from ip[6]tables
allow dumpstate system_file:file lock;
allow dumpstate storaged_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# /data/misc/a11ytrace for accessibility traces
#line 22
# /data/misc/wmtrace for wm traces
#line 28
# /data/system/dropbox for dropbox entries
#line 34
# Allow dumpstate to make binder calls to incidentd
#line 37
# Call the server domain and optionally transfer references to it.
#line 37
allow dumpstate incidentd:binder { call transfer };
#line 37
# Allow the serverdomain to transfer references to the client on the reply.
#line 37
allow incidentd dumpstate:binder transfer;
#line 37
# Receive and use open files from the server.
#line 37
allow dumpstate incidentd:fd use;
#line 37
# Kill incident in case of a timeout
allow dumpstate incident:process { signal sigkill };
# Allow dumpstate to make binder calls to storaged service
#line 43
# Call the server domain and optionally transfer references to it.
#line 43
allow dumpstate storaged:binder { call transfer };
#line 43
# Allow the serverdomain to transfer references to the client on the reply.
#line 43
allow storaged dumpstate:binder transfer;
#line 43
# Receive and use open files from the server.
#line 43
allow dumpstate storaged:fd use;
#line 43
# Allow dumpstate to make binder calls to statsd
#line 46
# Call the server domain and optionally transfer references to it.
#line 46
allow dumpstate statsd:binder { call transfer };
#line 46
# Allow the serverdomain to transfer references to the client on the reply.
#line 46
allow statsd dumpstate:binder transfer;
#line 46
# Receive and use open files from the server.
#line 46
allow dumpstate statsd:fd use;
#line 46
# Allow dumpstate to talk to gpuservice over binder
#line 49
# Call the server domain and optionally transfer references to it.
#line 49
allow dumpstate gpuservice:binder { call transfer };
#line 49
# Allow the serverdomain to transfer references to the client on the reply.
#line 49
allow gpuservice dumpstate:binder transfer;
#line 49
# Receive and use open files from the server.
#line 49
allow dumpstate gpuservice:fd use;
#line 49
;
# Allow dumpstate to talk to idmap over binder
#line 52
# Call the server domain and optionally transfer references to it.
#line 52
allow dumpstate idmap:binder { call transfer };
#line 52
# Allow the serverdomain to transfer references to the client on the reply.
#line 52
allow idmap dumpstate:binder transfer;
#line 52
# Receive and use open files from the server.
#line 52
allow dumpstate idmap:fd use;
#line 52
;
# Allow dumpstate to talk to profcollectd over binder
#line 57
# Allow dumpstate to talk to automotive_display_service over binder
#line 60
# Call the server domain and optionally transfer references to it.
#line 60
allow dumpstate automotive_display_service:binder { call transfer };
#line 60
# Allow the serverdomain to transfer references to the client on the reply.
#line 60
allow automotive_display_service dumpstate:binder transfer;
#line 60
# Receive and use open files from the server.
#line 60
allow dumpstate automotive_display_service:fd use;
#line 60
# Allow dumpstate to talk to virtual_camera service over binder
#line 63
# Call the server domain and optionally transfer references to it.
#line 63
allow dumpstate virtual_camera:binder { call transfer };
#line 63
# Allow the serverdomain to transfer references to the client on the reply.
#line 63
allow virtual_camera dumpstate:binder transfer;
#line 63
# Receive and use open files from the server.
#line 63
allow dumpstate virtual_camera:fd use;
#line 63
# Allow dumpstate to talk to ot_daemon service over binder
#line 66
# Call the server domain and optionally transfer references to it.
#line 66
allow dumpstate ot_daemon:binder { call transfer };
#line 66
# Allow the serverdomain to transfer references to the client on the reply.
#line 66
allow ot_daemon dumpstate:binder transfer;
#line 66
# Receive and use open files from the server.
#line 66
allow dumpstate ot_daemon:fd use;
#line 66
# Collect metrics on boot time created by init
#line 69
allow dumpstate boottime_prop:file { getattr open read map };
#line 69
#line 71
allow dumpstate misctrl_prop:file { getattr open read map };
#line 71
# Signal native processes to dump their stack.
allow dumpstate {
mediatranscoding
statsd
netd
virtual_camera
ot_daemon
}:process signal;
# Only allow dumpstate to dump Keystore on debuggable builds.
#line 85
dontaudit dumpstate keystore:process { signal };
# For collecting bugreports.
#line 89
allow dumpstate debugfs_wakeup_sources:file { getattr open read ioctl lock map watch watch_reads };
#line 91
allow dumpstate dev_type:blk_file getattr;
allow dumpstate webview_zygote:process signal;
allow dumpstate sysfs_dmabuf_stats:file { getattr open read ioctl lock map watch watch_reads };
dontaudit dumpstate update_engine:binder call;
# Read files in /proc
allow dumpstate {
config_gz
proc_net_tcp_udp
proc_pid_max
}:file { getattr open read ioctl lock map watch watch_reads };
# For comminucating with the system process to do confirmation ui.
#line 106
# Call the server domain and optionally transfer references to it.
#line 106
allow dumpstate incidentcompanion_service:binder { call transfer };
#line 106
# Allow the serverdomain to transfer references to the client on the reply.
#line 106
allow incidentcompanion_service dumpstate:binder transfer;
#line 106
# Receive and use open files from the server.
#line 106
allow dumpstate incidentcompanion_service:fd use;
#line 106
# Set properties.
# dumpstate_prop is used to share state with the Shell app.
#line 110
#line 110
allow dumpstate property_socket:sock_file write;
#line 110
allow dumpstate init:unix_stream_socket connectto;
#line 110
#line 110
allow dumpstate dumpstate_prop:property_service set;
#line 110
#line 110
allow dumpstate dumpstate_prop:file { getattr open read map };
#line 110
#line 110
#line 111
#line 111
allow dumpstate property_socket:sock_file write;
#line 111
allow dumpstate init:unix_stream_socket connectto;
#line 111
#line 111
allow dumpstate exported_dumpstate_prop:property_service set;
#line 111
#line 111
allow dumpstate exported_dumpstate_prop:file { getattr open read map };
#line 111
#line 111
# dumpstate_options_prop is used to pass extra command-line args.
#line 114
#line 114
allow dumpstate property_socket:sock_file write;
#line 114
allow dumpstate init:unix_stream_socket connectto;
#line 114
#line 114
allow dumpstate dumpstate_options_prop:property_service set;
#line 114
#line 114
allow dumpstate dumpstate_options_prop:file { getattr open read map };
#line 114
#line 114
# Allow dumpstate to kill vendor dumpstate service by init
#line 117
#line 117
allow dumpstate property_socket:sock_file write;
#line 117
allow dumpstate init:unix_stream_socket connectto;
#line 117
#line 117
allow dumpstate ctl_dumpstate_prop:property_service set;
#line 117
#line 117
allow dumpstate ctl_dumpstate_prop:file { getattr open read map };
#line 117
#line 117
# For dumping dynamic partition information.
#line 120
#line 120
allow dumpstate property_socket:sock_file write;
#line 120
allow dumpstate init:unix_stream_socket connectto;
#line 120
#line 120
allow dumpstate lpdumpd_prop:property_service set;
#line 120
#line 120
allow dumpstate lpdumpd_prop:file { getattr open read map };
#line 120
#line 120
#line 121
# Call the server domain and optionally transfer references to it.
#line 121
allow dumpstate lpdumpd:binder { call transfer };
#line 121
# Allow the serverdomain to transfer references to the client on the reply.
#line 121
allow lpdumpd dumpstate:binder transfer;
#line 121
# Receive and use open files from the server.
#line 121
allow dumpstate lpdumpd:fd use;
#line 121
# For dumping hypervisor information.
#line 124
allow dumpstate hypervisor_prop:file { getattr open read map };
#line 124
# For dumping device-mapper and snapshot information.
allow dumpstate gsid_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
#line 128
#line 128
allow dumpstate property_socket:sock_file write;
#line 128
allow dumpstate init:unix_stream_socket connectto;
#line 128
#line 128
allow dumpstate ctl_gsid_prop:property_service set;
#line 128
#line 128
allow dumpstate ctl_gsid_prop:file { getattr open read map };
#line 128
#line 128
#line 129
# Call the server domain and optionally transfer references to it.
#line 129
allow dumpstate gsid:binder { call transfer };
#line 129
# Allow the serverdomain to transfer references to the client on the reply.
#line 129
allow gsid dumpstate:binder transfer;
#line 129
# Receive and use open files from the server.
#line 129
allow dumpstate gsid:fd use;
#line 129
#line 131
allow dumpstate ota_metadata_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 131
allow dumpstate ota_metadata_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 131
# For starting (and killing) perfetto --save-for-bugreport. If a labelled trace
# is being recorded, the command above will serialize it into
# /data/misc/perfetto-traces/bugreport/*.pftrace .
#line 136
# Allow the necessary permissions.
#line 136
#line 136
# Old domain may exec the file and transition to the new domain.
#line 136
allow dumpstate perfetto_exec:file { getattr open read execute map };
#line 136
allow dumpstate perfetto:process transition;
#line 136
# New domain is entered by executing the file.
#line 136
allow perfetto perfetto_exec:file { entrypoint open read execute getattr map };
#line 136
# New domain can send SIGCHLD to its caller.
#line 136
allow perfetto dumpstate:process sigchld;
#line 136
# Enable AT_SECURE, i.e. libc secure mode.
#line 136
dontaudit dumpstate perfetto:process noatsecure;
#line 136
# XXX dontaudit candidate but requires further study.
#line 136
allow dumpstate perfetto:process { siginh rlimitinh };
#line 136
#line 136
# Make the transition occur by default.
#line 136
type_transition dumpstate perfetto_exec:process perfetto;
#line 136
allow dumpstate perfetto:process signal;
allow dumpstate perfetto_traces_data_file:dir { search };
allow dumpstate perfetto_traces_bugreport_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow dumpstate perfetto_traces_bugreport_data_file:file { { getattr open read ioctl lock map watch watch_reads } unlink };
# When exec-ing /system/bin/perfetto, dumpstates redirects stdio to /dev/null
# (which is labelled as dumpstate_tmpfs) to avoid leaking a FD to the bugreport
# zip file. These rules are to allow perfetto.te to inherit dumpstate's
# /dev/null.
allow perfetto dumpstate_tmpfs:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow perfetto dumpstate:fd use;
# system_dlkm_file for /system_dlkm partition
allow dumpstate system_dlkm_file:dir getattr;
# Allow dumpstate to execute derive_sdk in its own domain
#line 153
# Allow the necessary permissions.
#line 153
#line 153
# Old domain may exec the file and transition to the new domain.
#line 153
allow dumpstate derive_sdk_exec:file { getattr open read execute map };
#line 153
allow dumpstate derive_sdk:process transition;
#line 153
# New domain is entered by executing the file.
#line 153
allow derive_sdk derive_sdk_exec:file { entrypoint open read execute getattr map };
#line 153
# New domain can send SIGCHLD to its caller.
#line 153
allow derive_sdk dumpstate:process sigchld;
#line 153
# Enable AT_SECURE, i.e. libc secure mode.
#line 153
dontaudit dumpstate derive_sdk:process noatsecure;
#line 153
# XXX dontaudit candidate but requires further study.
#line 153
allow dumpstate derive_sdk:process { siginh rlimitinh };
#line 153
#line 153
# Make the transition occur by default.
#line 153
type_transition dumpstate derive_sdk_exec:process derive_sdk;
#line 153
#line 1 "system/sepolicy/private/ephemeral_app.te"
###
### Ephemeral apps.
###
### This file defines the security policy for apps with the ephemeral
### feature.
###
### The ephemeral_app domain is a reduced permissions sandbox allowing
### ephemeral applications to be safely installed and run. Non ephemeral
### applications may also opt-in to ephemeral to take advantage of the
### additional security features.
###
### PackageManager flags an app as ephemeral at install time.
typeattribute ephemeral_app coredomain;
#line 16
typeattribute ephemeral_app netdomain;
#line 16
#line 17
typeattribute ephemeral_app appdomain;
#line 17
# Label tmpfs objects for all apps.
#line 17
type_transition ephemeral_app tmpfs:file appdomain_tmpfs;
#line 17
#line 17
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 17
type ephemeral_app_userfaultfd;
#line 17
type_transition ephemeral_app ephemeral_app:anon_inode ephemeral_app_userfaultfd "[userfaultfd]";
#line 17
# Allow domain to create/use userfaultfd anon_inode.
#line 17
allow ephemeral_app ephemeral_app_userfaultfd:anon_inode { create ioctl read };
#line 17
# Suppress errors generate during bugreport
#line 17
dontaudit su ephemeral_app_userfaultfd:anon_inode *;
#line 17
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 17
neverallow { domain -ephemeral_app } ephemeral_app_userfaultfd:anon_inode *;
#line 17
#line 17
allow ephemeral_app appdomain_tmpfs:file { execute getattr map read write };
#line 17
neverallow { ephemeral_app -runas_app -shell -simpleperf } { domain -ephemeral_app }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 17
neverallow { appdomain -runas_app -shell -simpleperf -ephemeral_app } ephemeral_app:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 17
# The Android security model guarantees the confidentiality and integrity
#line 17
# of application data and execution state. Ptrace bypasses those
#line 17
# confidentiality guarantees. Disallow ptrace access from system components to
#line 17
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 17
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 17
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 17
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 17
# live lock conditions.
#line 17
neverallow { domain -ephemeral_app -crash_dump -runas_app -simpleperf } ephemeral_app:process ptrace;
#line 17
# Allow ephemeral apps to read/write files in visible storage if provided fds
allow ephemeral_app { sdcard_type fuse media_rw_data_file }:file {read write getattr ioctl lock append};
# Some apps ship with shared libraries and binaries that they write out
# to their sandbox directory and then execute.
allow ephemeral_app privapp_data_file:file { { getattr open read ioctl lock map watch watch_reads } execute };
allow ephemeral_app app_data_file:file { { getattr open read ioctl lock map watch watch_reads } execute };
# Follow priv-app symlinks. This is used for dynamite functionality.
allow ephemeral_app privapp_data_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
# Allow the renderscript compiler to be run.
#line 31
# Allow the necessary permissions.
#line 31
#line 31
# Old domain may exec the file and transition to the new domain.
#line 31
allow ephemeral_app rs_exec:file { getattr open read execute map };
#line 31
allow ephemeral_app rs:process transition;
#line 31
# New domain is entered by executing the file.
#line 31
allow rs rs_exec:file { entrypoint open read execute getattr map };
#line 31
# New domain can send SIGCHLD to its caller.
#line 31
allow rs ephemeral_app:process sigchld;
#line 31
# Enable AT_SECURE, i.e. libc secure mode.
#line 31
dontaudit ephemeral_app rs:process noatsecure;
#line 31
# XXX dontaudit candidate but requires further study.
#line 31
allow ephemeral_app rs:process { siginh rlimitinh };
#line 31
#line 31
# Make the transition occur by default.
#line 31
type_transition ephemeral_app rs_exec:process rs;
#line 31
# Allow loading and deleting shared libraries created by trusted system
# components within an application home directory.
allow ephemeral_app app_exec_data_file:file { { getattr open read ioctl lock map watch watch_reads } execute unlink };
# services
allow ephemeral_app audioserver_service:service_manager find;
allow ephemeral_app cameraserver_service:service_manager find;
allow ephemeral_app mediaserver_service:service_manager find;
allow ephemeral_app mediaextractor_service:service_manager find;
allow ephemeral_app mediametrics_service:service_manager find;
allow ephemeral_app mediadrmserver_service:service_manager find;
allow ephemeral_app drmserver_service:service_manager find;
allow ephemeral_app radio_service:service_manager find;
allow ephemeral_app ephemeral_app_api_service:service_manager find;
# allow ephemeral apps to use UDP sockets provided by the system server but not
# modify them other than to connect
allow ephemeral_app system_server:udp_socket {
connect getattr read recvfrom sendto write getopt setopt };
allow ephemeral_app ashmem_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
###
### neverallow rules
###
neverallow ephemeral_app app_data_file_type:file execute_no_trans;
# Receive or send uevent messages.
neverallow ephemeral_app domain:netlink_kobject_uevent_socket *;
# Receive or send generic netlink messages
neverallow ephemeral_app domain:netlink_socket *;
# Too much leaky information in debugfs. It's a security
# best practice to ensure these files aren't readable.
neverallow ephemeral_app debugfs_type:file read;
# execute gpu_device
neverallow ephemeral_app gpu_device:chr_file execute;
# access files in /sys with the default sysfs label
neverallow ephemeral_app sysfs:file *;
# Avoid reads from generically labeled /proc files
# Create a more specific label if needed
neverallow ephemeral_app proc:file { { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads } { execute execute_no_trans } };
# Directly access external storage
neverallow ephemeral_app { sdcard_type fuse media_rw_data_file }:file {open create};
neverallow ephemeral_app { sdcard_type fuse media_rw_data_file }:dir search;
# Avoid reads to proc_net, it contains too much device wide information about
# ongoing connections.
neverallow ephemeral_app proc_net:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 1 "system/sepolicy/private/evsmanagerd.te"
# evsmanager
typeattribute evsmanagerd coredomain;
typeattribute evsmanagerd evsmanager_service_server;
type evsmanagerd_exec, system_file_type, exec_type, file_type;
#line 7
#line 7
# Allow the necessary permissions.
#line 7
#line 7
# Old domain may exec the file and transition to the new domain.
#line 7
allow init evsmanagerd_exec:file { getattr open read execute map };
#line 7
allow init evsmanagerd:process transition;
#line 7
# New domain is entered by executing the file.
#line 7
allow evsmanagerd evsmanagerd_exec:file { entrypoint open read execute getattr map };
#line 7
# New domain can send SIGCHLD to its caller.
#line 7
#line 7
# Enable AT_SECURE, i.e. libc secure mode.
#line 7
dontaudit init evsmanagerd:process noatsecure;
#line 7
# XXX dontaudit candidate but requires further study.
#line 7
allow init evsmanagerd:process { siginh rlimitinh };
#line 7
#line 7
# Make the transition occur by default.
#line 7
type_transition init evsmanagerd_exec:process evsmanagerd;
#line 7
#line 7
;
# Declares as a binder service
#line 10
typeattribute evsmanagerd binderservicedomain;
#line 10
# Allows to add a service to service_manager
#line 13
allow evsmanagerd evsmanagerd_service:service_manager { add find };
#line 13
neverallow { domain -evsmanagerd } evsmanagerd_service:service_manager add;
#line 13
#line 13
# On debug builds with root, allow binder services to use binder over TCP.
#line 13
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 13
#line 13
# Allows to use the binder IPC
#line 16
# Call the servicemanager and transfer references to it.
#line 16
allow evsmanagerd servicemanager:binder { call transfer };
#line 16
# Allow servicemanager to send out callbacks
#line 16
allow servicemanager evsmanagerd:binder { call transfer };
#line 16
# servicemanager performs getpidcon on clients.
#line 16
allow servicemanager evsmanagerd:dir search;
#line 16
allow servicemanager evsmanagerd:file { read open };
#line 16
allow servicemanager evsmanagerd:process getattr;
#line 16
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 16
# all domains in domain.te.
#line 16
# Allows binder IPCs to the various system services
#line 19
# Call the server domain and optionally transfer references to it.
#line 19
allow evsmanagerd system_server:binder { call transfer };
#line 19
# Allow the serverdomain to transfer references to the client on the reply.
#line 19
allow system_server evsmanagerd:binder transfer;
#line 19
# Receive and use open files from the server.
#line 19
allow evsmanagerd system_server:fd use;
#line 19
# Allows to use EVS HAL implementations
#line 22
typeattribute evsmanagerd halclientdomain;
#line 22
typeattribute evsmanagerd hal_evs_client;
#line 22
#line 22
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 22
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 22
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 22
#line 22
typeattribute evsmanagerd hal_evs;
#line 22
# Find passthrough HAL implementations
#line 22
allow hal_evs system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 22
allow hal_evs vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 22
allow hal_evs vendor_file:file { read open getattr execute map };
#line 22
#line 22
# Allows to write messages to the shell
allow evsmanagerd shell:fd use;
allow evsmanagerd shell:fifo_file write;
# Allows to use the graphics allocator
allow evsmanagerd hal_graphics_allocator:fd use;
# Allows to use a bootstrap statsd
allow evsmanagerd statsbootstrap_service:service_manager find;
# Allows binder IPCs to the CarService
#line 35
# Call the server domain and optionally transfer references to it.
#line 35
allow evsmanagerd appdomain:binder { call transfer };
#line 35
# Allow the serverdomain to transfer references to the client on the reply.
#line 35
allow appdomain evsmanagerd:binder transfer;
#line 35
# Receive and use open files from the server.
#line 35
allow evsmanagerd appdomain:fd use;
#line 35
# For HIDL evs manager implementation
allow evsmanagerd hal_evs_hwservice:hwservice_manager add;
allow evsmanagerd hidl_base_hwservice:hwservice_manager add;
#line 1 "system/sepolicy/private/extra_free_kbytes.te"
typeattribute extra_free_kbytes coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init extra_free_kbytes_exec:file { getattr open read execute map };
#line 3
allow init extra_free_kbytes:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow extra_free_kbytes extra_free_kbytes_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init extra_free_kbytes:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init extra_free_kbytes:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init extra_free_kbytes_exec:process extra_free_kbytes;
#line 3
#line 3
# Only extra_free_kbytes script is allowed to store these properties
#line 6
#line 6
allow extra_free_kbytes property_socket:sock_file write;
#line 6
allow extra_free_kbytes init:unix_stream_socket connectto;
#line 6
#line 6
allow extra_free_kbytes init_storage_prop:property_service set;
#line 6
#line 6
allow extra_free_kbytes init_storage_prop:file { getattr open read map };
#line 6
#line 6
#line 1 "system/sepolicy/private/fastbootd.te"
typeattribute fastbootd coredomain;
# The allow rules are only included in the recovery policy.
# Otherwise fastbootd is only allowed the domain rules.
#line 52
# This capability allows fastbootd to circumvent memlock rlimits while using
# io_uring. An Alternative would be to up the memlock rlimit for the fastbootd service.
allow fastbootd self:capability ipc_lock;
#line 57
# Set up a type_transition to "io_uring" named anonymous inode object.
#line 57
type fastbootd_iouring;
#line 57
type_transition fastbootd fastbootd:anon_inode fastbootd_iouring "[io_uring]";
#line 57
# Allow domain to create/use io_uring anon_inode.
#line 57
allow fastbootd fastbootd_iouring:anon_inode { create map read write };
#line 57
allow fastbootd self:io_uring sqpoll;
#line 57
# Other domains may not use iouring anon_inodes created by this domain.
#line 57
neverallow { domain -fastbootd } fastbootd_iouring:anon_inode *;
#line 57
# io_uring checks for CAP_IPC_LOCK to determine whether or not to track
#line 57
# memory usage per uid against RLIMIT_MEMLOCK. This can lead folks to
#line 57
# grant CAP_IPC_LOCK to silence avc denials, which is undesireable.
#line 57
dontaudit fastbootd self:{ capability cap_userns } ipc_lock;
#line 57
#line 1 "system/sepolicy/private/file.te"
# /proc/config.gz
type config_gz, fs_type, proc_type;
# /sys/fs/bpf/<dir> for mainline tethering use
# TODO: move S+ fs_bpf_tethering here from public/file.te
type fs_bpf_net_private, fs_type, bpffs_type;
type fs_bpf_net_shared, fs_type, bpffs_type;
type fs_bpf_netd_readonly, fs_type, bpffs_type;
type fs_bpf_netd_shared, fs_type, bpffs_type;
type fs_bpf_loader, fs_type, bpffs_type;
type fs_bpf_uprobestats, fs_type, bpffs_type;
# /data/misc/storaged
type storaged_data_file, file_type, data_file_type, core_data_file_type;
# /data/misc/wmtrace for wm traces
type wm_trace_data_file, file_type, data_file_type, core_data_file_type, mlstrustedobject;
# /data/misc/a11ytrace for accessibility traces
type accessibility_trace_data_file, file_type, data_file_type, core_data_file_type;
# /data/misc/perfetto-traces for perfetto traces
type perfetto_traces_data_file, file_type, data_file_type, core_data_file_type;
# /data/misc/perfetto-traces/bugreport for perfetto traces for bugreports.
type perfetto_traces_bugreport_data_file, file_type, data_file_type, core_data_file_type;
# /data/misc/perfetto-traces/profiling for perfetto traces from profiling apis.
type perfetto_traces_profiling_data_file, file_type, data_file_type, core_data_file_type;
# /data/misc/perfetto-configs for perfetto configs
type perfetto_configs_data_file, file_type, data_file_type, core_data_file_type;
# /data/misc/uprobestats-configs for uprobestats configs
type uprobestats_configs_data_file, file_type, data_file_type, core_data_file_type;
# /apex/com.android.art/bin/oatdump
type oatdump_exec, system_file_type, exec_type, file_type;
# /data/misc_{ce/de}/<user>/sdksandbox root data directory for sdk sandbox processes
type sdk_sandbox_system_data_file, file_type, data_file_type, core_data_file_type;
# /data/misc_{ce/de}/<user>/sdksandbox/<app-name>/* subdirectory for sdk sandbox processes
type sdk_sandbox_data_file, file_type, data_file_type, core_data_file_type, app_data_file_type;
# /sys/kernel/debug/kcov for coverage guided kernel fuzzing in userdebug builds.
type debugfs_kcov, fs_type, debugfs_type;
# App executable files in /data/data directories
type app_exec_data_file, file_type, data_file_type, core_data_file_type;
typealias app_exec_data_file alias rs_data_file;
# /data/misc_[ce|de]/rollback : Used by installd to store snapshots
# of application data.
type rollback_data_file, file_type, data_file_type, core_data_file_type;
# /data/misc_ce/checkin for checkin apps.
type checkin_data_file, file_type, data_file_type, core_data_file_type;
# /data/gsi/ota
type ota_image_data_file, file_type, data_file_type, core_data_file_type;
# /data/gsi_persistent_data
type gsi_persistent_data_file, file_type, data_file_type, core_data_file_type;
# /data/misc/emergencynumberdb
type emergency_data_file, file_type, data_file_type, core_data_file_type;
# /data/misc/profcollectd
type profcollectd_data_file, file_type, data_file_type, core_data_file_type;
# /data/misc/apexdata/com.android.art
type apex_art_data_file, file_type, data_file_type, core_data_file_type, apex_data_file_type;
# /data/misc/apexdata/com.android.art/staging
type apex_art_staging_data_file, file_type, data_file_type, core_data_file_type;
# /data/misc/apexdata/com.android.compos
type apex_compos_data_file, file_type, data_file_type, core_data_file_type, apex_data_file_type;
# /data/misc/apexdata/com.android.virt
type apex_virt_data_file, file_type, data_file_type, core_data_file_type, apex_data_file_type;
# /data/misc/apexdata/com.android.tethering
type apex_tethering_data_file, file_type, data_file_type, core_data_file_type, apex_data_file_type;
# legacy labels for various /data/misc[_ce|_de]/*/apexdata directories - retained
# for backward compatibility b/217581286
type apex_appsearch_data_file, file_type, data_file_type, core_data_file_type, apex_data_file_type;
type apex_permission_data_file, file_type, data_file_type, core_data_file_type, apex_data_file_type;
type apex_scheduling_data_file, file_type, data_file_type, core_data_file_type, apex_data_file_type;
type apex_wifi_data_file, file_type, data_file_type, core_data_file_type, apex_data_file_type;
# /data/font/files
type font_data_file, file_type, data_file_type, core_data_file_type;
# /data/misc/dmesgd
type dmesgd_data_file, file_type, data_file_type, core_data_file_type;
# /data/misc/odrefresh
type odrefresh_data_file, file_type, data_file_type, core_data_file_type;
# /data/misc/odsign
type odsign_data_file, file_type, data_file_type, core_data_file_type;
# /data/misc/odsign_metrics
type odsign_metrics_file, file_type, data_file_type, core_data_file_type;
# /data/misc/virtualizationservice
# The type needs to be mlstrustedobject to allow for being accessed from
# virtualizationmanager, which runs at a more constrained MLS level.
type virtualizationservice_data_file, file_type, data_file_type, core_data_file_type, mlstrustedobject;
# /data/system/environ
type environ_system_data_file, file_type, data_file_type, core_data_file_type;
# /data/misc/bootanim
type bootanim_data_file, file_type, data_file_type, core_data_file_type;
# /dev/kvm
# The type needs to be mlstrustedobject to allow for being accessed from
# crosvm, which runs at a more constrained MLS level.
type kvm_device, dev_type, mlstrustedobject, vm_manager_device_type;
# /apex/com.android.virt/bin/fd_server
type fd_server_exec, system_file_type, exec_type, file_type;
# /apex/com.android.compos/bin/compsvc
type compos_exec, exec_type, file_type, system_file_type;
# /apex/com.android.compos/bin/compos_key_helper
type compos_key_helper_exec, exec_type, file_type, system_file_type;
# /apex/com.android.art/bin/art_exec
# This executable does not have its own domain because it is executed in the caller's domain. For
# example, it is executed in the `artd` domain when artd calls it.
type art_exec_exec, system_file_type, exec_type, file_type;
# Filesystem entry for for PRNG seeder socket. Processes require
# write permission on this to connect, and needs to be mlstrustedobject
# in to satisfy MLS constraints for trusted domains.
type prng_seeder_socket, file_type, coredomain_socket, mlstrustedobject;
# /proc/device-tree/avf and /sys/firmware/devicetree/base/avf
type sysfs_dt_avf, fs_type, sysfs_type;
type proc_dt_avf, fs_type, proc_type;
# Type for /system/fonts/font_fallback.xm
type system_font_fallback_file, system_file_type, file_type;
# Type for /sys/devices/uprobe.
type sysfs_uprobe, fs_type, sysfs_type;
# Type for aconfig daemon socket
type aconfigd_socket, file_type, coredomain_socket;
# Type for /(system|system_ext|product)/etc/aconfig
type system_aconfig_storage_file, system_file_type, file_type;
# Type for /vendor/etc/aconfig
type vendor_aconfig_storage_file, vendor_file_type, file_type;
#line 1 "system/sepolicy/private/fingerprintd.te"
typeattribute fingerprintd coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init fingerprintd_exec:file { getattr open read execute map };
#line 3
allow init fingerprintd:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow fingerprintd fingerprintd_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init fingerprintd:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init fingerprintd:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init fingerprintd_exec:process fingerprintd;
#line 3
#line 3
#line 1 "system/sepolicy/private/flags_health_check.te"
typeattribute flags_health_check coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init flags_health_check_exec:file { getattr open read execute map };
#line 3
allow init flags_health_check:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow flags_health_check flags_health_check_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init flags_health_check:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init flags_health_check:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init flags_health_check_exec:process flags_health_check;
#line 3
#line 3
#line 5
#line 5
allow flags_health_check property_socket:sock_file write;
#line 5
allow flags_health_check init:unix_stream_socket connectto;
#line 5
#line 5
allow flags_health_check device_config_boot_count_prop:property_service set;
#line 5
#line 5
allow flags_health_check device_config_boot_count_prop:file { getattr open read map };
#line 5
#line 5
#line 6
#line 6
allow flags_health_check property_socket:sock_file write;
#line 6
allow flags_health_check init:unix_stream_socket connectto;
#line 6
#line 6
allow flags_health_check device_config_core_experiments_team_internal_prop:property_service set;
#line 6
#line 6
allow flags_health_check device_config_core_experiments_team_internal_prop:file { getattr open read map };
#line 6
#line 6
#line 7
#line 7
allow flags_health_check property_socket:sock_file write;
#line 7
allow flags_health_check init:unix_stream_socket connectto;
#line 7
#line 7
allow flags_health_check device_config_edgetpu_native_prop:property_service set;
#line 7
#line 7
allow flags_health_check device_config_edgetpu_native_prop:file { getattr open read map };
#line 7
#line 7
#line 8
#line 8
allow flags_health_check property_socket:sock_file write;
#line 8
allow flags_health_check init:unix_stream_socket connectto;
#line 8
#line 8
allow flags_health_check device_config_reset_performed_prop:property_service set;
#line 8
#line 8
allow flags_health_check device_config_reset_performed_prop:file { getattr open read map };
#line 8
#line 8
#line 9
#line 9
allow flags_health_check property_socket:sock_file write;
#line 9
allow flags_health_check init:unix_stream_socket connectto;
#line 9
#line 9
allow flags_health_check device_config_runtime_native_boot_prop:property_service set;
#line 9
#line 9
allow flags_health_check device_config_runtime_native_boot_prop:file { getattr open read map };
#line 9
#line 9
#line 10
#line 10
allow flags_health_check property_socket:sock_file write;
#line 10
allow flags_health_check init:unix_stream_socket connectto;
#line 10
#line 10
allow flags_health_check device_config_runtime_native_prop:property_service set;
#line 10
#line 10
allow flags_health_check device_config_runtime_native_prop:file { getattr open read map };
#line 10
#line 10
#line 11
#line 11
allow flags_health_check property_socket:sock_file write;
#line 11
allow flags_health_check init:unix_stream_socket connectto;
#line 11
#line 11
allow flags_health_check device_config_input_native_boot_prop:property_service set;
#line 11
#line 11
allow flags_health_check device_config_input_native_boot_prop:file { getattr open read map };
#line 11
#line 11
#line 12
#line 12
allow flags_health_check property_socket:sock_file write;
#line 12
allow flags_health_check init:unix_stream_socket connectto;
#line 12
#line 12
allow flags_health_check device_config_lmkd_native_prop:property_service set;
#line 12
#line 12
allow flags_health_check device_config_lmkd_native_prop:file { getattr open read map };
#line 12
#line 12
#line 13
#line 13
allow flags_health_check property_socket:sock_file write;
#line 13
allow flags_health_check init:unix_stream_socket connectto;
#line 13
#line 13
allow flags_health_check device_config_netd_native_prop:property_service set;
#line 13
#line 13
allow flags_health_check device_config_netd_native_prop:file { getattr open read map };
#line 13
#line 13
#line 14
#line 14
allow flags_health_check property_socket:sock_file write;
#line 14
allow flags_health_check init:unix_stream_socket connectto;
#line 14
#line 14
allow flags_health_check device_config_nnapi_native_prop:property_service set;
#line 14
#line 14
allow flags_health_check device_config_nnapi_native_prop:file { getattr open read map };
#line 14
#line 14
#line 15
#line 15
allow flags_health_check property_socket:sock_file write;
#line 15
allow flags_health_check init:unix_stream_socket connectto;
#line 15
#line 15
allow flags_health_check device_config_activity_manager_native_boot_prop:property_service set;
#line 15
#line 15
allow flags_health_check device_config_activity_manager_native_boot_prop:file { getattr open read map };
#line 15
#line 15
#line 16
#line 16
allow flags_health_check property_socket:sock_file write;
#line 16
allow flags_health_check init:unix_stream_socket connectto;
#line 16
#line 16
allow flags_health_check device_config_media_native_prop:property_service set;
#line 16
#line 16
allow flags_health_check device_config_media_native_prop:file { getattr open read map };
#line 16
#line 16
#line 17
#line 17
allow flags_health_check property_socket:sock_file write;
#line 17
allow flags_health_check init:unix_stream_socket connectto;
#line 17
#line 17
allow flags_health_check device_config_mglru_native_prop:property_service set;
#line 17
#line 17
allow flags_health_check device_config_mglru_native_prop:file { getattr open read map };
#line 17
#line 17
#line 18
#line 18
allow flags_health_check property_socket:sock_file write;
#line 18
allow flags_health_check init:unix_stream_socket connectto;
#line 18
#line 18
allow flags_health_check device_config_profcollect_native_boot_prop:property_service set;
#line 18
#line 18
allow flags_health_check device_config_profcollect_native_boot_prop:file { getattr open read map };
#line 18
#line 18
#line 19
#line 19
allow flags_health_check property_socket:sock_file write;
#line 19
allow flags_health_check init:unix_stream_socket connectto;
#line 19
#line 19
allow flags_health_check device_config_statsd_native_prop:property_service set;
#line 19
#line 19
allow flags_health_check device_config_statsd_native_prop:file { getattr open read map };
#line 19
#line 19
#line 20
#line 20
allow flags_health_check property_socket:sock_file write;
#line 20
allow flags_health_check init:unix_stream_socket connectto;
#line 20
#line 20
allow flags_health_check device_config_statsd_native_boot_prop:property_service set;
#line 20
#line 20
allow flags_health_check device_config_statsd_native_boot_prop:file { getattr open read map };
#line 20
#line 20
#line 21
#line 21
allow flags_health_check property_socket:sock_file write;
#line 21
allow flags_health_check init:unix_stream_socket connectto;
#line 21
#line 21
allow flags_health_check device_config_storage_native_boot_prop:property_service set;
#line 21
#line 21
allow flags_health_check device_config_storage_native_boot_prop:file { getattr open read map };
#line 21
#line 21
#line 22
#line 22
allow flags_health_check property_socket:sock_file write;
#line 22
allow flags_health_check init:unix_stream_socket connectto;
#line 22
#line 22
allow flags_health_check device_config_swcodec_native_prop:property_service set;
#line 22
#line 22
allow flags_health_check device_config_swcodec_native_prop:file { getattr open read map };
#line 22
#line 22
#line 23
#line 23
allow flags_health_check property_socket:sock_file write;
#line 23
allow flags_health_check init:unix_stream_socket connectto;
#line 23
#line 23
allow flags_health_check device_config_sys_traced_prop:property_service set;
#line 23
#line 23
allow flags_health_check device_config_sys_traced_prop:file { getattr open read map };
#line 23
#line 23
#line 24
#line 24
allow flags_health_check property_socket:sock_file write;
#line 24
allow flags_health_check init:unix_stream_socket connectto;
#line 24
#line 24
allow flags_health_check device_config_window_manager_native_boot_prop:property_service set;
#line 24
#line 24
allow flags_health_check device_config_window_manager_native_boot_prop:file { getattr open read map };
#line 24
#line 24
#line 25
#line 25
allow flags_health_check property_socket:sock_file write;
#line 25
allow flags_health_check init:unix_stream_socket connectto;
#line 25
#line 25
allow flags_health_check device_config_configuration_prop:property_service set;
#line 25
#line 25
allow flags_health_check device_config_configuration_prop:file { getattr open read map };
#line 25
#line 25
#line 26
#line 26
allow flags_health_check property_socket:sock_file write;
#line 26
allow flags_health_check init:unix_stream_socket connectto;
#line 26
#line 26
allow flags_health_check device_config_connectivity_prop:property_service set;
#line 26
#line 26
allow flags_health_check device_config_connectivity_prop:file { getattr open read map };
#line 26
#line 26
#line 27
#line 27
allow flags_health_check property_socket:sock_file write;
#line 27
allow flags_health_check init:unix_stream_socket connectto;
#line 27
#line 27
allow flags_health_check device_config_surface_flinger_native_boot_prop:property_service set;
#line 27
#line 27
allow flags_health_check device_config_surface_flinger_native_boot_prop:file { getattr open read map };
#line 27
#line 27
#line 28
#line 28
allow flags_health_check property_socket:sock_file write;
#line 28
allow flags_health_check init:unix_stream_socket connectto;
#line 28
#line 28
allow flags_health_check device_config_aconfig_flags_prop:property_service set;
#line 28
#line 28
allow flags_health_check device_config_aconfig_flags_prop:file { getattr open read map };
#line 28
#line 28
#line 29
#line 29
allow flags_health_check property_socket:sock_file write;
#line 29
allow flags_health_check init:unix_stream_socket connectto;
#line 29
#line 29
allow flags_health_check device_config_vendor_system_native_prop:property_service set;
#line 29
#line 29
allow flags_health_check device_config_vendor_system_native_prop:file { getattr open read map };
#line 29
#line 29
#line 30
#line 30
allow flags_health_check property_socket:sock_file write;
#line 30
allow flags_health_check init:unix_stream_socket connectto;
#line 30
#line 30
allow flags_health_check device_config_vendor_system_native_boot_prop:property_service set;
#line 30
#line 30
allow flags_health_check device_config_vendor_system_native_boot_prop:file { getattr open read map };
#line 30
#line 30
#line 31
#line 31
allow flags_health_check property_socket:sock_file write;
#line 31
allow flags_health_check init:unix_stream_socket connectto;
#line 31
#line 31
allow flags_health_check device_config_virtualization_framework_native_prop:property_service set;
#line 31
#line 31
allow flags_health_check device_config_virtualization_framework_native_prop:file { getattr open read map };
#line 31
#line 31
#line 32
#line 32
allow flags_health_check property_socket:sock_file write;
#line 32
allow flags_health_check init:unix_stream_socket connectto;
#line 32
#line 32
allow flags_health_check device_config_memory_safety_native_boot_prop:property_service set;
#line 32
#line 32
allow flags_health_check device_config_memory_safety_native_boot_prop:file { getattr open read map };
#line 32
#line 32
#line 33
#line 33
allow flags_health_check property_socket:sock_file write;
#line 33
allow flags_health_check init:unix_stream_socket connectto;
#line 33
#line 33
allow flags_health_check device_config_memory_safety_native_prop:property_service set;
#line 33
#line 33
allow flags_health_check device_config_memory_safety_native_prop:file { getattr open read map };
#line 33
#line 33
#line 34
#line 34
allow flags_health_check property_socket:sock_file write;
#line 34
allow flags_health_check init:unix_stream_socket connectto;
#line 34
#line 34
allow flags_health_check device_config_remote_key_provisioning_native_prop:property_service set;
#line 34
#line 34
allow flags_health_check device_config_remote_key_provisioning_native_prop:file { getattr open read map };
#line 34
#line 34
#line 35
#line 35
allow flags_health_check property_socket:sock_file write;
#line 35
allow flags_health_check init:unix_stream_socket connectto;
#line 35
#line 35
allow flags_health_check device_config_camera_native_prop:property_service set;
#line 35
#line 35
allow flags_health_check device_config_camera_native_prop:file { getattr open read map };
#line 35
#line 35
#line 36
#line 36
allow flags_health_check property_socket:sock_file write;
#line 36
allow flags_health_check init:unix_stream_socket connectto;
#line 36
#line 36
allow flags_health_check device_config_tethering_u_or_later_native_prop:property_service set;
#line 36
#line 36
allow flags_health_check device_config_tethering_u_or_later_native_prop:file { getattr open read map };
#line 36
#line 36
#line 37
#line 37
allow flags_health_check property_socket:sock_file write;
#line 37
allow flags_health_check init:unix_stream_socket connectto;
#line 37
#line 37
allow flags_health_check next_boot_prop:property_service set;
#line 37
#line 37
allow flags_health_check next_boot_prop:file { getattr open read map };
#line 37
#line 37
# system property device_config_boot_count_prop is used for deciding when to perform server
# configurable flags related disaster recovery. Mistakenly set up by unrelated components can, at a
# wrong timing, trigger server configurable flag related disaster recovery, which will override
# server configured values of all flags with default values.
neverallow { domain -init -flags_health_check } device_config_boot_count_prop:property_service set;
# system property device_config_reset_performed_prop is used for indicating whether server
# configurable flags have been reset during booting. Mistakenly modified by unrelated components can
# cause bad server configurable flags synced back to device.
neverallow { domain -init -flags_health_check } device_config_reset_performed_prop:property_service set;
#line 1 "system/sepolicy/private/fsck.te"
typeattribute fsck coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init fsck_exec:file { getattr open read execute map };
#line 3
allow init fsck:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow fsck fsck_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init fsck:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init fsck:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init fsck_exec:process fsck;
#line 3
#line 3
allow fsck metadata_block_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 1 "system/sepolicy/private/fsck_untrusted.te"
typeattribute fsck_untrusted coredomain;
#line 1 "system/sepolicy/private/fsverity_init.te"
type fsverity_init, domain, coredomain;
type fsverity_init_exec, exec_type, file_type, system_file_type;
#line 4
#line 4
# Allow the necessary permissions.
#line 4
#line 4
# Old domain may exec the file and transition to the new domain.
#line 4
allow init fsverity_init_exec:file { getattr open read execute map };
#line 4
allow init fsverity_init:process transition;
#line 4
# New domain is entered by executing the file.
#line 4
allow fsverity_init fsverity_init_exec:file { entrypoint open read execute getattr map };
#line 4
# New domain can send SIGCHLD to its caller.
#line 4
#line 4
# Enable AT_SECURE, i.e. libc secure mode.
#line 4
dontaudit init fsverity_init:process noatsecure;
#line 4
# XXX dontaudit candidate but requires further study.
#line 4
allow init fsverity_init:process { siginh rlimitinh };
#line 4
#line 4
# Make the transition occur by default.
#line 4
type_transition init fsverity_init_exec:process fsverity_init;
#line 4
#line 4
# Allow to read /proc/keys for searching key id.
allow fsverity_init proc_keys:file { getattr open read ioctl lock map watch watch_reads };
# Ignore denials to access irrelevant keys, as a side effect to access /proc/keys.
dontaudit fsverity_init domain:key view;
allow fsverity_init kernel:key { view search write setattr };
allow fsverity_init fsverity_init:key { view search write };
# Read the on-device signing certificate, to be able to add it to the keyring
allow fsverity_init odsign:fd use;
allow fsverity_init odsign_data_file:file { getattr read };
#line 1 "system/sepolicy/private/fuseblkd.te"
# Compartmentalized domain specifically for mounting fuseblk filesystems.
# We need this to not grant fuseblkd_untrusted sys_admin permissions.
type fuseblkd_exec, system_file_type, exec_type, file_type;
type fuseblkd, domain;
typeattribute fuseblkd coredomain;
# Required for mount and unmounting. We can't minimize this permission,
# even though we only allow mount/unmount.
allow fuseblkd self:{ capability cap_userns } sys_admin;
# Permissions for the fuseblk filesystem.
allow fuseblkd fuse_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow fuseblkd fuseblk:filesystem { mount unmount };
allow fuseblkd fuseblkd_untrusted:fd use;
# Look through block devices to find the correct one.
allow fuseblkd block_device:dir search;
# Permissions to mount on the media_rw directory for USB drives.
allow fuseblkd mnt_media_rw_file:dir search;
allow fuseblkd mnt_media_rw_stub_file:dir mounton;
###
### neverallow rules
###
# Only allow entry from fuseblkd_untrusted, and only through fuseblkd_exec binary.
neverallow { domain -fuseblkd_untrusted } fuseblkd:process transition;
neverallow * fuseblkd:process dyntransition;
neverallow fuseblkd { file_type fs_type -fuseblkd_exec }:file entrypoint;
#line 1 "system/sepolicy/private/fuseblkd_untrusted.te"
# Fuseblk is a Filesystem in USErspace for block device. It should only be used
# to mount untrusted blocks like USB drives.
type fuseblkd_untrusted_exec, system_file_type, exec_type, file_type;
type fuseblkd_untrusted, domain;
typeattribute fuseblkd_untrusted coredomain;
#line 8
# Allow the necessary permissions.
#line 8
#line 8
# Old domain may exec the file and transition to the new domain.
#line 8
allow fuseblkd_untrusted fuseblkd_exec:file { getattr open read execute map };
#line 8
allow fuseblkd_untrusted fuseblkd:process transition;
#line 8
# New domain is entered by executing the file.
#line 8
allow fuseblkd fuseblkd_exec:file { entrypoint open read execute getattr map };
#line 8
# New domain can send SIGCHLD to its caller.
#line 8
allow fuseblkd fuseblkd_untrusted:process sigchld;
#line 8
# Enable AT_SECURE, i.e. libc secure mode.
#line 8
dontaudit fuseblkd_untrusted fuseblkd:process noatsecure;
#line 8
# XXX dontaudit candidate but requires further study.
#line 8
allow fuseblkd_untrusted fuseblkd:process { siginh rlimitinh };
#line 8
#line 8
# Make the transition occur by default.
#line 8
type_transition fuseblkd_untrusted fuseblkd_exec:process fuseblkd;
#line 8
;
# Allow stdin/out back to vold.
allow fuseblkd_untrusted vold:fd use;
# Allows fuseblk to read block devices.
allow fuseblkd_untrusted block_device:dir search;
# Permissions to read dynamic partitions blocks.
allow fuseblkd_untrusted super_block_device:blk_file getattr;
# Permissions to access FUSE character devices.
allow fuseblkd_untrusted fuse_device:chr_file { getattr open read write };
# Permissions to access /mnt/media_rw/.
allow fuseblkd_untrusted mnt_media_rw_file:dir { getattr search };
allow fuseblkd_untrusted mnt_media_rw_stub_file:dir getattr;
# Permissions to read device mappers.
allow fuseblkd_untrusted sysfs_dm:dir search;
allow fuseblkd_untrusted sysfs_dm:file { getattr open read };
allow fuseblkd_untrusted dm_device:blk_file getattr;
# Permissions to read links in tmpfs.
allow fuseblkd_untrusted tmpfs:lnk_file read;
# Permissions to read loop device blocks.
allow fuseblkd_untrusted loop_device:blk_file getattr;
# Permissions to access the /proc/filesystems file.
allow fuseblkd_untrusted proc_filesystems:file { open read getattr };
###
### dontaudit rules
###
# ntfs-3g wants this permission to read a fork return code, for some reason.
# It's unclear why, because it still reads the fork return code correctly,
# and nothing breaks. If enforce is set to permissive, the audit goes away.
dontaudit fuseblkd_untrusted self:capability sys_admin;
###
### neverallow rules
###
# Fuseblk should never be run on block devices holding sensitive data.
neverallow fuseblkd_untrusted {
boot_block_device
frp_block_device
metadata_block_device
recovery_block_device
root_block_device
swap_block_device
system_block_device
userdata_block_device
cache_block_device
dm_device
}:blk_file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Only allow entry from vold, and only through fuseblkd_untrusted_exec binaries.
neverallow { domain -vold } fuseblkd_untrusted:process transition;
neverallow * fuseblkd_untrusted:process dyntransition;
neverallow fuseblkd_untrusted { file_type fs_type -fuseblkd_untrusted_exec }:file entrypoint;
# Under no circumstances should fuseblkd_untrusted or any other fuseblk filesystem be
# given sys_admin access. They are fundementally untrusted, insecure filesystems.
# The correct solution here is to compartmentalize permissions correctly so that
# a smaller binary can get the required permissions. See fuseblkd.te.
# Similar to above, we don't need setgid or setuid permissions.
neverallow fuseblkd_untrusted self:capability { setgid setuid sys_admin };
neverallow fuseblkd_untrusted self:{ capability cap_userns } { setgid setuid sys_admin };
# Since we can't have sys_admin permissions, we definitely can't have mount/unmount
# permissions, since we won't be able to use them. Same with relabel permissions.
neverallow fuseblkd_untrusted fuseblk:filesystem { mount unmount relabelto relabelfrom};
#line 1 "system/sepolicy/private/fwk_bufferhub.te"
type fwk_bufferhub, domain, coredomain;
type fwk_bufferhub_exec, system_file_type, exec_type, file_type;
#line 4
typeattribute fwk_bufferhub halclientdomain;
#line 4
typeattribute fwk_bufferhub hal_graphics_allocator_client;
#line 4
#line 4
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 4
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 4
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 4
#line 4
typeattribute fwk_bufferhub hal_graphics_allocator;
#line 4
# Find passthrough HAL implementations
#line 4
allow hal_graphics_allocator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 4
allow hal_graphics_allocator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 4
allow hal_graphics_allocator vendor_file:file { read open getattr execute map };
#line 4
#line 4
allow fwk_bufferhub ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
#line 7
#line 7
# Allow the necessary permissions.
#line 7
#line 7
# Old domain may exec the file and transition to the new domain.
#line 7
allow init fwk_bufferhub_exec:file { getattr open read execute map };
#line 7
allow init fwk_bufferhub:process transition;
#line 7
# New domain is entered by executing the file.
#line 7
allow fwk_bufferhub fwk_bufferhub_exec:file { entrypoint open read execute getattr map };
#line 7
# New domain can send SIGCHLD to its caller.
#line 7
#line 7
# Enable AT_SECURE, i.e. libc secure mode.
#line 7
dontaudit init fwk_bufferhub:process noatsecure;
#line 7
# XXX dontaudit candidate but requires further study.
#line 7
allow init fwk_bufferhub:process { siginh rlimitinh };
#line 7
#line 7
# Make the transition occur by default.
#line 7
type_transition init fwk_bufferhub_exec:process fwk_bufferhub;
#line 7
#line 7
#line 1 "system/sepolicy/private/gatekeeperd.te"
typeattribute gatekeeperd coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init gatekeeperd_exec:file { getattr open read execute map };
#line 3
allow init gatekeeperd:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow gatekeeperd gatekeeperd_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init gatekeeperd:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init gatekeeperd:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init gatekeeperd_exec:process gatekeeperd;
#line 3
#line 3
# For checking whether GSI is running
#line 6
allow gatekeeperd gsid_prop:file { getattr open read map };
#line 6
#line 1 "system/sepolicy/private/gki_apex_prepostinstall.te"
# GKI pre- & post-install hooks.
#
# Allow to run pre- and post-install hooks for GKI APEXes
type gki_apex_prepostinstall, domain, coredomain;
type gki_apex_prepostinstall_exec, system_file_type, exec_type, file_type;
# Execute /system/bin/sh.
allow gki_apex_prepostinstall shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Execute various toolsbox utilities.
allow gki_apex_prepostinstall toolbox_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Allow preinstall.sh to execute update_engine_stable_client binary.
allow gki_apex_prepostinstall gki_apex_prepostinstall_exec:file execute_no_trans;
# Allow preinstall hook to communicate with update_engine to execute update.
#line 18
# Call the servicemanager and transfer references to it.
#line 18
allow gki_apex_prepostinstall servicemanager:binder { call transfer };
#line 18
# Allow servicemanager to send out callbacks
#line 18
allow servicemanager gki_apex_prepostinstall:binder { call transfer };
#line 18
# servicemanager performs getpidcon on clients.
#line 18
allow servicemanager gki_apex_prepostinstall:dir search;
#line 18
allow servicemanager gki_apex_prepostinstall:file { read open };
#line 18
allow servicemanager gki_apex_prepostinstall:process getattr;
#line 18
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 18
# all domains in domain.te.
#line 18
allow gki_apex_prepostinstall update_engine_stable_service:service_manager find;
#line 20
# Call the server domain and optionally transfer references to it.
#line 20
allow gki_apex_prepostinstall update_engine:binder { call transfer };
#line 20
# Allow the serverdomain to transfer references to the client on the reply.
#line 20
allow update_engine gki_apex_prepostinstall:binder transfer;
#line 20
# Receive and use open files from the server.
#line 20
allow gki_apex_prepostinstall update_engine:fd use;
#line 20
# /dev/zero is inherited although it is not used. See b/126787589.
allow gki_apex_prepostinstall apexd:fd use;
#line 1 "system/sepolicy/private/gmscore_app.te"
###
### A domain for further sandboxing the PrebuiltGMSCore app.
###
typeattribute gmscore_app coredomain;
#line 6
typeattribute gmscore_app appdomain;
#line 6
# Label tmpfs objects for all apps.
#line 6
type_transition gmscore_app tmpfs:file appdomain_tmpfs;
#line 6
#line 6
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 6
type gmscore_app_userfaultfd;
#line 6
type_transition gmscore_app gmscore_app:anon_inode gmscore_app_userfaultfd "[userfaultfd]";
#line 6
# Allow domain to create/use userfaultfd anon_inode.
#line 6
allow gmscore_app gmscore_app_userfaultfd:anon_inode { create ioctl read };
#line 6
# Suppress errors generate during bugreport
#line 6
dontaudit su gmscore_app_userfaultfd:anon_inode *;
#line 6
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 6
neverallow { domain -gmscore_app } gmscore_app_userfaultfd:anon_inode *;
#line 6
#line 6
allow gmscore_app appdomain_tmpfs:file { execute getattr map read write };
#line 6
neverallow { gmscore_app -runas_app -shell -simpleperf } { domain -gmscore_app }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 6
neverallow { appdomain -runas_app -shell -simpleperf -gmscore_app } gmscore_app:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 6
# The Android security model guarantees the confidentiality and integrity
#line 6
# of application data and execution state. Ptrace bypasses those
#line 6
# confidentiality guarantees. Disallow ptrace access from system components to
#line 6
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 6
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 6
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 6
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 6
# live lock conditions.
#line 6
neverallow { domain -gmscore_app -crash_dump -runas_app -simpleperf } gmscore_app:process ptrace;
#line 6
allow gmscore_app sysfs_type:dir search;
# Read access to /sys/block/zram*/mm_stat
#line 10
allow gmscore_app sysfs_zram:dir { open getattr read search ioctl lock watch watch_reads };
#line 10
allow gmscore_app sysfs_zram:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 10
#line 12
allow gmscore_app rootfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 12
allow gmscore_app rootfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 12
# Allow GMS core to open kernel config for OTA matching through libvintf
allow gmscore_app config_gz:file { open read getattr };
# Allow GMS core to communicate with update_engine for A/B update.
#line 18
# Call the server domain and optionally transfer references to it.
#line 18
allow gmscore_app update_engine:binder { call transfer };
#line 18
# Allow the serverdomain to transfer references to the client on the reply.
#line 18
allow update_engine gmscore_app:binder transfer;
#line 18
# Receive and use open files from the server.
#line 18
allow gmscore_app update_engine:fd use;
#line 18
allow gmscore_app update_engine_service:service_manager find;
# Allow GMS core to communicate with dumpsys storaged.
#line 22
# Call the server domain and optionally transfer references to it.
#line 22
allow gmscore_app storaged:binder { call transfer };
#line 22
# Allow the serverdomain to transfer references to the client on the reply.
#line 22
allow storaged gmscore_app:binder transfer;
#line 22
# Receive and use open files from the server.
#line 22
allow gmscore_app storaged:fd use;
#line 22
allow gmscore_app storaged_service:service_manager find;
# Allow GMS core to access system_update_service (e.g. to publish pending
# system update info).
allow gmscore_app system_update_service:service_manager find;
# Allow GMS core to communicate with statsd.
#line 30
# Call the server domain and optionally transfer references to it.
#line 30
allow gmscore_app statsd:binder { call transfer };
#line 30
# Allow the serverdomain to transfer references to the client on the reply.
#line 30
allow statsd gmscore_app:binder transfer;
#line 30
# Receive and use open files from the server.
#line 30
allow gmscore_app statsd:fd use;
#line 30
# Allow GMS core to receive Perfetto traces through the framework
# (i.e. TracingServiceProxy) and sendfile them into its private directory
# for reporting when network and battery conditions are appropriate.
allow gmscore_app perfetto:fd use;
allow gmscore_app perfetto_traces_data_file:file { read getattr };
# Allow GMS core to generate unique hardware IDs
allow gmscore_app keystore:keystore2_key gen_unique_id;
# Allow GMS core to access /sys/fs/selinux/policyvers for compatibility check
allow gmscore_app selinuxfs:file { getattr open read ioctl lock map watch watch_reads };
# suppress denials for non-API accesses.
dontaudit gmscore_app exec_type:file { getattr open read ioctl lock map watch watch_reads };
dontaudit gmscore_app device:dir { open getattr read search ioctl lock watch watch_reads };
dontaudit gmscore_app fs_bpf:dir { open getattr read search ioctl lock watch watch_reads };
dontaudit gmscore_app kernel:security *;
dontaudit gmscore_app net_dns_prop:file { getattr open read ioctl lock map watch watch_reads };
dontaudit gmscore_app proc:file { getattr open read ioctl lock map watch watch_reads };
dontaudit gmscore_app proc_interrupts:file { getattr open read ioctl lock map watch watch_reads };
dontaudit gmscore_app proc_modules:file { getattr open read ioctl lock map watch watch_reads };
dontaudit gmscore_app proc_net:file { getattr open read ioctl lock map watch watch_reads };
dontaudit gmscore_app proc_stat:file { getattr open read ioctl lock map watch watch_reads };
dontaudit gmscore_app proc_version:file { getattr open read ioctl lock map watch watch_reads };
dontaudit gmscore_app sysfs:dir { open getattr read search ioctl lock watch watch_reads };
dontaudit gmscore_app sysfs:file { getattr open read ioctl lock map watch watch_reads };
dontaudit gmscore_app sysfs_android_usb:file { getattr open read ioctl lock map watch watch_reads };
dontaudit gmscore_app sysfs_dm:file { getattr open read ioctl lock map watch watch_reads };
dontaudit gmscore_app sysfs_loop:file { getattr open read ioctl lock map watch watch_reads };
dontaudit gmscore_app sysfs_net:file { getattr open read ioctl lock map watch watch_reads };
dontaudit gmscore_app sysfs_net:dir { open getattr read search ioctl lock watch watch_reads };
dontaudit gmscore_app { wifi_prop wifi_hal_prop }:file { getattr open read ioctl lock map watch watch_reads };
dontaudit gmscore_app mirror_data_file:dir search;
dontaudit gmscore_app mnt_vendor_file:dir search;
# Access the network
#line 68
typeattribute gmscore_app netdomain;
#line 68
# webview crash handling depends on self ptrace (b/27697529, b/20150694, b/19277529#comment7)
allow gmscore_app self:process ptrace;
# Allow loading executable code from writable priv-app home
# directories. This is a W^X violation, however, it needs
# to be supported for now for the following reasons.
# * /data/user_*/0/*/code_cache/* POSSIBLE uses (b/117841367)
# 1) com.android.opengl.shaders_cache
# 2) com.android.skia.shaders_cache
# 3) com.android.renderscript.cache
# * /data/user_de/0/com.google.android.gms/app_chimera
# TODO: Tighten (b/112357170)
allow gmscore_app privapp_data_file:file execute;
# Chrome Crashpad uses the the dynamic linker to load native executables
# from an APK (b/112050209, crbug.com/928422)
allow gmscore_app system_linker_exec:file execute_no_trans;
allow gmscore_app privapp_data_file:lnk_file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# /proc access
allow gmscore_app proc_vmstat:file { getattr open read ioctl lock map watch watch_reads };
# Allow interaction with gpuservice
#line 94
# Call the server domain and optionally transfer references to it.
#line 94
allow gmscore_app gpuservice:binder { call transfer };
#line 94
# Allow the serverdomain to transfer references to the client on the reply.
#line 94
allow gpuservice gmscore_app:binder transfer;
#line 94
# Receive and use open files from the server.
#line 94
allow gmscore_app gpuservice:fd use;
#line 94
allow gmscore_app gpu_service:service_manager find;
# find services that expose both @SystemAPI and normal APIs.
allow gmscore_app app_api_service:service_manager find;
allow gmscore_app system_api_service:service_manager find;
allow gmscore_app audioserver_service:service_manager find;
allow gmscore_app cameraserver_service:service_manager find;
allow gmscore_app drmserver_service:service_manager find;
allow gmscore_app mediadrmserver_service:service_manager find;
allow gmscore_app mediaextractor_service:service_manager find;
allow gmscore_app mediametrics_service:service_manager find;
allow gmscore_app mediaserver_service:service_manager find;
allow gmscore_app network_watchlist_service:service_manager find;
allow gmscore_app nfc_service:service_manager find;
allow gmscore_app oem_lock_service:service_manager find;
allow gmscore_app persistent_data_block_service:service_manager find;
allow gmscore_app radio_service:service_manager find;
allow gmscore_app recovery_service:service_manager find;
allow gmscore_app stats_service:service_manager find;
# Used by Finsky / Android "Verify Apps" functionality when
# running "adb install foo.apk".
allow gmscore_app shell_data_file:file { getattr open read ioctl lock map watch watch_reads };
allow gmscore_app shell_data_file:dir { open getattr read search ioctl lock watch watch_reads };
# Write to /cache.
allow gmscore_app { cache_file cache_recovery_file }:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow gmscore_app { cache_file cache_recovery_file }:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# /cache is a symlink to /data/cache on some devices. Allow reading the link.
allow gmscore_app cache_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
# Write to /data/ota_package for OTA packages.
allow gmscore_app ota_package_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow gmscore_app ota_package_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Write the checkin metadata to /data/misc_ce/<userid>/checkin
allow gmscore_app checkin_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow gmscore_app checkin_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Used by Finsky / Android "Verify Apps" functionality when
# running "adb install foo.apk".
allow gmscore_app shell_data_file:file { getattr open read ioctl lock map watch watch_reads };
allow gmscore_app shell_data_file:dir { open getattr read search ioctl lock watch watch_reads };
# b/18504118: Allow reads from /data/anr/traces.txt
allow gmscore_app anr_data_file:file { getattr open read ioctl lock map watch watch_reads };
# b/148974132: com.android.vending needs this
allow gmscore_app priv_app:tcp_socket { read write };
# b/168059475 Allow GMSCore to read Virtual AB properties to determine
# if device supports VAB.
#line 147
allow gmscore_app virtual_ab_prop:file { getattr open read map };
#line 147
# b/186488185: Allow GMSCore to read dck properties
#line 150
allow gmscore_app dck_prop:file { getattr open read map };
#line 150
# Allow GMSCore to read RKP properties for the purpose of GTS testing.
#line 153
allow gmscore_app remote_prov_prop:file { getattr open read map };
#line 153
# Allow GmsCore to read Quick Start properties and prevent access from other
# policies.
#line 157
allow gmscore_app quick_start_prop:file { getattr open read map };
#line 157
neverallow { domain -init -dumpstate -vendor_init -gmscore_app } quick_start_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Do not allow getting permission-protected network information from sysfs.
neverallow gmscore_app sysfs_net:file *;
# Restrict socket ioctls. Either 1. disallow privileged ioctls, 2. disallow the
# ioctl permission, or 3. disallow the socket class.
neverallowxperm gmscore_app domain:{ icmp_socket rawip_socket tcp_socket udp_socket } ioctl
#line 165
{
#line 165
# qualcomm rmnet ioctls
#line 165
0x00006900 0x00006902
#line 165
# socket ioctls
#line 165
0x0000890b 0x0000890c 0x0000890d 0x00008911 0x00008914 0x00008916
#line 165
0x00008918 0x0000891a 0x0000891c 0x0000891d 0x0000891e 0x0000891f
#line 165
0x00008920 0x00008922 0x00008923 0x00008924 0x00008925 0x00008926
#line 165
0x00008927 0x00008929 0x00008930 0x00008931 0x00008932
#line 165
0x00008934 0x00008935 0x00008936 0x00008937 0x00008939 0x00008940 0x00008941
#line 165
0x00008943 0x00008946 0x00008947 0x00008948 0x00008949 0x0000894a
#line 165
0x0000894b 0x00008953 0x00008954 0x00008955 0x00008960 0x00008961 0x00008962 0x00008970
#line 165
0x00008971 0x00008980 0x00008981 0x00008982 0x00008983 0x00008990
#line 165
0x00008991 0x00008992 0x00008993 0x00008994
#line 165
0x00008995 0x000089a0 0x000089a1 0x000089a2 0x000089a3 0x000089b0
#line 165
# device and protocol specific ioctls
#line 165
0x000089f0-0x000089ff
#line 165
0x000089e0-0x000089ef
#line 165
# Wireless extension ioctls
#line 165
0x00008b00 0x00008b02 0x00008b04 0x00008b06 0x00008b08 0x00008b0a
#line 165
0x00008b0c 0x00008b0e 0x00008b10 0x00008b14 0x00008b15 0x00008b16 0x00008b17
#line 165
0x00008b18 0x00008b19 0x00008b1a 0x00008b1b 0x00008b1c 0x00008b1d
#line 165
0x00008b20 0x00008b22 0x00008b24 0x00008b26 0x00008b28 0x00008b2a
#line 165
0x00008b2b 0x00008b2c 0x00008b30 0x00008b31 0x00008b32 0x00008b33
#line 165
0x00008b34 0x00008b35 0x00008b36
#line 165
# Dev private ioctl i.e. hardware specific ioctls
#line 165
0x00008be0-0x00008bff
#line 165
};
neverallow gmscore_app *:{ netlink_route_socket netlink_selinux_socket } ioctl;
neverallow gmscore_app *:{
socket netlink_socket packet_socket key_socket appletalk_socket
netlink_tcpdiag_socket netlink_nflog_socket
netlink_xfrm_socket netlink_audit_socket
netlink_dnrt_socket netlink_kobject_uevent_socket tun_socket
netlink_iscsi_socket netlink_fib_lookup_socket netlink_connector_socket
netlink_netfilter_socket netlink_generic_socket netlink_scsitransport_socket
netlink_rdma_socket netlink_crypto_socket sctp_socket
ax25_socket ipx_socket netrom_socket atmpvc_socket x25_socket rose_socket decnet_socket
atmsvc_socket rds_socket irda_socket pppox_socket llc_socket can_socket tipc_socket
bluetooth_socket iucv_socket rxrpc_socket isdn_socket phonet_socket ieee802154_socket caif_socket
alg_socket nfc_socket kcm_socket qipcrtr_socket smc_socket xdp_socket
} *;
#line 1 "system/sepolicy/private/gpuservice.te"
# gpuservice - server for gpu stats and other gpu related services
typeattribute gpuservice coredomain;
typeattribute gpuservice bpfdomain;
type gpuservice_exec, system_file_type, exec_type, file_type;
#line 7
#line 7
# Allow the necessary permissions.
#line 7
#line 7
# Old domain may exec the file and transition to the new domain.
#line 7
allow init gpuservice_exec:file { getattr open read execute map };
#line 7
allow init gpuservice:process transition;
#line 7
# New domain is entered by executing the file.
#line 7
allow gpuservice gpuservice_exec:file { entrypoint open read execute getattr map };
#line 7
# New domain can send SIGCHLD to its caller.
#line 7
#line 7
# Enable AT_SECURE, i.e. libc secure mode.
#line 7
dontaudit init gpuservice:process noatsecure;
#line 7
# XXX dontaudit candidate but requires further study.
#line 7
allow init gpuservice:process { siginh rlimitinh };
#line 7
#line 7
# Make the transition occur by default.
#line 7
type_transition init gpuservice_exec:process gpuservice;
#line 7
#line 7
#line 9
# Call the server domain and optionally transfer references to it.
#line 9
allow gpuservice adbd:binder { call transfer };
#line 9
# Allow the serverdomain to transfer references to the client on the reply.
#line 9
allow adbd gpuservice:binder transfer;
#line 9
# Receive and use open files from the server.
#line 9
allow gpuservice adbd:fd use;
#line 9
#line 10
# Call the server domain and optionally transfer references to it.
#line 10
allow gpuservice shell:binder { call transfer };
#line 10
# Allow the serverdomain to transfer references to the client on the reply.
#line 10
allow shell gpuservice:binder transfer;
#line 10
# Receive and use open files from the server.
#line 10
allow gpuservice shell:fd use;
#line 10
#line 11
# Call the server domain and optionally transfer references to it.
#line 11
allow gpuservice system_server:binder { call transfer };
#line 11
# Allow the serverdomain to transfer references to the client on the reply.
#line 11
allow system_server gpuservice:binder transfer;
#line 11
# Receive and use open files from the server.
#line 11
allow gpuservice system_server:fd use;
#line 11
#line 12
# Call the servicemanager and transfer references to it.
#line 12
allow gpuservice servicemanager:binder { call transfer };
#line 12
# Allow servicemanager to send out callbacks
#line 12
allow servicemanager gpuservice:binder { call transfer };
#line 12
# servicemanager performs getpidcon on clients.
#line 12
allow servicemanager gpuservice:dir search;
#line 12
allow servicemanager gpuservice:file { read open };
#line 12
allow servicemanager gpuservice:process getattr;
#line 12
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 12
# all domains in domain.te.
#line 12
# Access the GPU.
allow gpuservice gpu_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# GPU service will need to load GPU driver, for example Vulkan driver in order
# to get the capability of the driver.
allow gpuservice same_process_hal_file:file { open read getattr execute map };
allow gpuservice ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
#line 21
allow gpuservice hwservicemanager_prop:file { getattr open read map };
#line 21
#line 22
# Call the hwservicemanager and transfer references to it.
#line 22
allow gpuservice hwservicemanager:binder { call transfer };
#line 22
# Allow hwservicemanager to send out callbacks
#line 22
allow hwservicemanager gpuservice:binder { call transfer };
#line 22
# hwservicemanager performs getpidcon on clients.
#line 22
allow hwservicemanager gpuservice:dir search;
#line 22
allow hwservicemanager gpuservice:file { read open map };
#line 22
allow hwservicemanager gpuservice:process getattr;
#line 22
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 22
# all domains in domain.te.
#line 22
# Access /dev/graphics/fb0.
allow gpuservice graphics_device:dir search;
allow gpuservice graphics_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Allow shell access
allow gpuservice adbd:fd use;
allow gpuservice adbd:unix_stream_socket { getattr read write };
allow gpuservice shell:fifo_file { getattr read write };
# Needed for perfetto producer.
#line 34
allow gpuservice traced:fd use;
#line 34
allow gpuservice traced_tmpfs:file { read write getattr map };
#line 34
#line 34
allow gpuservice traced_producer_socket:sock_file write;
#line 34
allow gpuservice traced:unix_stream_socket connectto;
#line 34
#line 34
#line 34
# Also allow the service to use the producer file descriptors. This is
#line 34
# necessary when the producer is creating the shared memory, as it will be
#line 34
# passed to the service as a file descriptor (obtained from memfd_create).
#line 34
allow traced gpuservice:fd use;
#line 34
# Needed for interactive shell
allow gpuservice devpts:chr_file { read write getattr };
# Needed for dumpstate to dumpsys gpu.
allow gpuservice dumpstate:fd use;
allow gpuservice dumpstate:fifo_file write;
# Needed for stats callback registration to statsd.
allow gpuservice stats_service:service_manager find;
allow gpuservice statsmanager_service:service_manager find;
# TODO(b/146461633): remove this once native pullers talk to StatsManagerService
#line 47
# Call the server domain and optionally transfer references to it.
#line 47
allow gpuservice statsd:binder { call transfer };
#line 47
# Allow the serverdomain to transfer references to the client on the reply.
#line 47
allow statsd gpuservice:binder transfer;
#line 47
# Receive and use open files from the server.
#line 47
allow gpuservice statsd:fd use;
#line 47
;
# Needed for reading tracepoint ids in order to attach bpf programs.
allow gpuservice debugfs_tracing:file { getattr open read ioctl lock map watch watch_reads };
allow gpuservice self:perf_event { cpu kernel open write };
neverallow gpuservice self:perf_event ~{ cpu kernel open write };
# Needed for interact with bpf fs.
# Write is needed to open read/write bpf maps.
allow gpuservice fs_bpf:file { read write };
# Needed for enabling bpf programs and accessing bpf maps (read-only and read/write).
allow gpuservice bpfloader:bpf { map_read map_write prog_run };
#line 61
allow gpuservice gpu_service:service_manager { add find };
#line 61
neverallow { domain -gpuservice } gpu_service:service_manager add;
#line 61
#line 61
# On debug builds with root, allow binder services to use binder over TCP.
#line 61
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 61
#line 61
# Needed for enabling write access to persist.graphics.egl from developer option switch UI, through gpuservice.
#line 64
#line 64
allow gpuservice property_socket:sock_file write;
#line 64
allow gpuservice init:unix_stream_socket connectto;
#line 64
#line 64
allow gpuservice graphics_config_writable_prop:property_service set;
#line 64
#line 64
allow gpuservice graphics_config_writable_prop:file { getattr open read map };
#line 64
#line 64
neverallow { domain -init -vendor_init -gpuservice } graphics_config_writable_prop:property_service set;
# Needed for querying permission
allow gpuservice permission_service:service_manager find;
# Only uncomment below line when in development
# userdebug_or_eng(`permissive gpuservice;')
#line 1 "system/sepolicy/private/gsid.te"
# gsid - Manager for GSI Installation
type gsid, domain;
type gsid_exec, exec_type, file_type, system_file_type;
typeattribute gsid coredomain;
#line 7
#line 7
# Allow the necessary permissions.
#line 7
#line 7
# Old domain may exec the file and transition to the new domain.
#line 7
allow init gsid_exec:file { getattr open read execute map };
#line 7
allow init gsid:process transition;
#line 7
# New domain is entered by executing the file.
#line 7
allow gsid gsid_exec:file { entrypoint open read execute getattr map };
#line 7
# New domain can send SIGCHLD to its caller.
#line 7
#line 7
# Enable AT_SECURE, i.e. libc secure mode.
#line 7
dontaudit init gsid:process noatsecure;
#line 7
# XXX dontaudit candidate but requires further study.
#line 7
allow init gsid:process { siginh rlimitinh };
#line 7
#line 7
# Make the transition occur by default.
#line 7
type_transition init gsid_exec:process gsid;
#line 7
#line 7
#line 9
# Call the servicemanager and transfer references to it.
#line 9
allow gsid servicemanager:binder { call transfer };
#line 9
# Allow servicemanager to send out callbacks
#line 9
allow servicemanager gsid:binder { call transfer };
#line 9
# servicemanager performs getpidcon on clients.
#line 9
allow servicemanager gsid:dir search;
#line 9
allow servicemanager gsid:file { read open };
#line 9
allow servicemanager gsid:process getattr;
#line 9
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 9
# all domains in domain.te.
#line 9
#line 10
typeattribute gsid binderservicedomain;
#line 10
#line 11
allow gsid gsi_service:service_manager { add find };
#line 11
neverallow { domain -gsid } gsi_service:service_manager add;
#line 11
#line 11
# On debug builds with root, allow binder services to use binder over TCP.
#line 11
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 11
#line 11
# Manage DSU metadata encryption key through vold.
allow gsid vold_service:service_manager find;
#line 15
# Call the server domain and optionally transfer references to it.
#line 15
allow gsid vold:binder { call transfer };
#line 15
# Allow the serverdomain to transfer references to the client on the reply.
#line 15
allow vold gsid:binder transfer;
#line 15
# Receive and use open files from the server.
#line 15
allow gsid vold:fd use;
#line 15
#line 17
#line 17
allow gsid property_socket:sock_file write;
#line 17
allow gsid init:unix_stream_socket connectto;
#line 17
#line 17
allow gsid gsid_prop:property_service set;
#line 17
#line 17
allow gsid gsid_prop:file { getattr open read map };
#line 17
#line 17
# Needed to create/delete device-mapper nodes, and read/write to them.
allow gsid dm_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow gsid dm_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow gsid self:{ capability cap_userns } sys_admin;
dontaudit gsid self:{ capability cap_userns } dac_override;
# On FBE devices (not using dm-default-key), gsid will use loop devices to map
# images rather than device-mapper.
allow gsid loop_control_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow gsid loop_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allowxperm gsid loop_device:blk_file ioctl {
0x00004c05
0x00004c04
0x00004c00
0x00004c09
0x00004c08
0x00004c01
0x00001261
};
# libfiemap_writer uses sysfs to derive the bottom of a device-mapper stacking.
# This requires traversing /sys/block/dm-N/slaves/* and reading the list of
# file names.
#line 42
allow gsid sysfs_dm:dir { open getattr read search ioctl lock watch watch_reads };
#line 42
allow gsid sysfs_dm:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 42
# libfiemap_writer needs to read /sys/fs/f2fs/<dev>/features to determine
# whether pin_file support is enabled.
#line 46
allow gsid sysfs_fs_f2fs:dir { open getattr read search ioctl lock watch watch_reads };
#line 46
allow gsid sysfs_fs_f2fs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 46
# Needed to read fstab, which is used to validate that system verity does not
# use check_once_at_most for sdcard installs. (Note: proc_cmdline is needed
# to get the A/B slot suffix).
#line 51
allow gsid { metadata_file gsi_metadata_file_type }:dir search;
#line 51
allow gsid gsi_public_metadata_file:file { getattr open read ioctl lock map watch watch_reads };
#line 51
allow gsid { proc_bootconfig proc_cmdline }:file { getattr open read ioctl lock map watch watch_reads };
#line 51
allow gsid sysfs_dt_firmware_android:dir { open getattr read search ioctl lock watch watch_reads };
allow gsid sysfs_dt_firmware_android:file { getattr open read ioctl lock map watch watch_reads };
# Needed to stat /data/gsi/* and realpath on /dev/block/by-name/*
allow gsid block_device:dir { open getattr read search ioctl lock watch watch_reads };
# Allow querying the size of super_block_device_type.
allow gsid super_block_device_type:blk_file { getattr open read ioctl lock map watch watch_reads };
# liblp queries these block alignment properties.
allowxperm gsid {
userdata_block_device
sdcard_block_device
super_block_device_type
}:blk_file ioctl {
0x00001278
0x0000127a
};
# When installing images to an sdcard, gsid needs to be able to stat() the
# block device. gsid also calls realpath() to remove symlinks.
allow gsid mnt_media_rw_file:dir { open getattr read search ioctl lock watch watch_reads };
allow gsid mnt_media_rw_stub_file:dir { open getattr read search ioctl lock watch watch_reads };
# When installing images to an sdcard, gsid must bypass sdcardfs and install
# directly to vfat, which supports the FIBMAP ioctl.
allow gsid vfat:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow gsid vfat:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow gsid sdcard_block_device:blk_file { getattr open read ioctl lock map watch watch_reads };
# This is needed for FIBMAP unfortunately. Oddly FIEMAP does not carry this
# requirement, but the kernel does not implement FIEMAP support for VFAT.
allow gsid self:{ capability cap_userns } sys_rawio;
# Allow rules for gsi_tool.
#line 95
neverallow {
domain
-gsid
-init
-update_engine_common
-recovery
-fastbootd
} gsid_prop:property_service set;
# gsid needs to store images on /data, but cannot use file I/O. If it did, the
# underlying blocks would be encrypted, and we couldn't mount the GSI image in
# first-stage init. So instead of directly writing to /data, we:
#
# 1. fallocate a file large enough to hold the signed GSI
# 2. extract its block layout with FIEMAP
# 3. create a dm-linear device using the FIEMAP, targeting /dev/block/by-name/userdata
# 4. write system_gsi into that dm device
#
# To make this process work, we need to unwrap the device-mapper stacking for
# userdata to reach the underlying block device. To verify the result we use
# stat(), which requires read access.
allow gsid userdata_block_device:blk_file { getattr open read ioctl lock map watch watch_reads };
# gsid uses /metadata/gsi to communicate GSI boot information to first-stage
# init. It cannot use userdata since data cannot be decrypted during this
# stage.
#
# gsid uses /metadata/gsi to store three files:
# install_status - A short string indicating whether a GSI image is bootable.
# lp_metadata - LpMetadata blob describing the block ranges on userdata
# where system_gsi resides.
# booted - An empty file that, if exists, indicates that a GSI is
# currently running.
#
allow gsid metadata_file:dir { search getattr };
allow gsid {
gsi_metadata_file_type
}:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow gsid {
ota_metadata_file
}:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow gsid {
gsi_metadata_file_type
ota_metadata_file
}:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow restorecon to fix context of gsi_public_metadata_file.
allow gsid file_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
allow gsid gsi_metadata_file:file relabelfrom;
allow gsid gsi_public_metadata_file:file relabelto;
allow gsid {
gsi_data_file
ota_image_data_file
}:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow gsid {
gsi_data_file
ota_image_data_file
}:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allowxperm gsid {
gsi_data_file
ota_image_data_file
}:file ioctl {
0xc020660b
0x80086601
};
allow gsid system_server:binder call;
# Prevent most processes from writing to gsi_metadata_file_type, but allow
# adding rules for path resolution of gsi_public_metadata_file and reading
# gsi_public_metadata_file.
neverallow {
domain
-init
-gsid
-fastbootd
} gsi_metadata_file_type:dir { add_name create link relabelfrom remove_name rename reparent rmdir setattr write };
neverallow {
domain
-init
-gsid
-fastbootd
} { gsi_metadata_file_type -gsi_public_metadata_file }:{ { chr_file blk_file } { file lnk_file sock_file fifo_file } } *;
neverallow {
domain
-init
-gsid
-fastbootd
} gsi_public_metadata_file:{ { chr_file blk_file } { file lnk_file sock_file fifo_file } } ~{ { getattr open read ioctl lock map watch watch_reads } };
# Prevent apps from accessing gsi_metadata_file_type.
neverallow {
appdomain
-shell
} gsi_metadata_file_type:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } *;
neverallow {
domain
-init
-gsid
} gsi_data_file:{ dir { { chr_file blk_file } { file lnk_file sock_file fifo_file } } } *;
neverallow {
domain
-gsid
} gsi_data_file:{ { chr_file blk_file } { file lnk_file sock_file fifo_file } } ~{ relabelto getattr };
#line 1 "system/sepolicy/private/hal_allocator_default.te"
type hal_allocator_default, domain, coredomain;
#line 2
typeattribute hal_allocator_default halserverdomain;
#line 2
typeattribute hal_allocator_default hal_allocator_server;
#line 2
typeattribute hal_allocator_default hal_allocator;
#line 2
type hal_allocator_default_exec, system_file_type, exec_type, file_type;
#line 5
#line 5
# Allow the necessary permissions.
#line 5
#line 5
# Old domain may exec the file and transition to the new domain.
#line 5
allow init hal_allocator_default_exec:file { getattr open read execute map };
#line 5
allow init hal_allocator_default:process transition;
#line 5
# New domain is entered by executing the file.
#line 5
allow hal_allocator_default hal_allocator_default_exec:file { entrypoint open read execute getattr map };
#line 5
# New domain can send SIGCHLD to its caller.
#line 5
#line 5
# Enable AT_SECURE, i.e. libc secure mode.
#line 5
dontaudit init hal_allocator_default:process noatsecure;
#line 5
# XXX dontaudit candidate but requires further study.
#line 5
allow init hal_allocator_default:process { siginh rlimitinh };
#line 5
#line 5
# Make the transition occur by default.
#line 5
type_transition init hal_allocator_default_exec:process hal_allocator_default;
#line 5
#line 5
# to force stop the service when it's not supported
#line 8
#line 8
allow hal_allocator_default property_socket:sock_file write;
#line 8
allow hal_allocator_default init:unix_stream_socket connectto;
#line 8
#line 8
allow hal_allocator_default hidl_memory_prop:property_service set;
#line 8
#line 8
allow hal_allocator_default hidl_memory_prop:file { getattr open read map };
#line 8
#line 8
#line 3 "system/sepolicy/private/hal_lazy_test.te"
#line 1 "system/sepolicy/private/halclientdomain.te"
###
### Rules for all domains which are clients of a HAL
###
# Find out whether a HAL in passthrough/in-process mode or
# binderized/out-of-process mode
#line 7
# Call the hwservicemanager and transfer references to it.
#line 7
allow halclientdomain hwservicemanager:binder { call transfer };
#line 7
# Allow hwservicemanager to send out callbacks
#line 7
allow hwservicemanager halclientdomain:binder { call transfer };
#line 7
# hwservicemanager performs getpidcon on clients.
#line 7
allow hwservicemanager halclientdomain:dir search;
#line 7
allow hwservicemanager halclientdomain:file { read open map };
#line 7
allow hwservicemanager halclientdomain:process getattr;
#line 7
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 7
# all domains in domain.te.
#line 7
# Used to wait for hwservicemanager
#line 10
allow halclientdomain hwservicemanager_prop:file { getattr open read map };
#line 10
# Wait for HAL server to be up (used by getService)
allow halclientdomain hidl_manager_hwservice:hwservice_manager find;
#line 1 "system/sepolicy/private/halserverdomain.te"
###
### Rules for all domains which offer a HAL service over HwBinder
###
# Register the HAL service with hwservicemanager
#line 6
# Call the hwservicemanager and transfer references to it.
#line 6
allow halserverdomain hwservicemanager:binder { call transfer };
#line 6
# Allow hwservicemanager to send out callbacks
#line 6
allow hwservicemanager halserverdomain:binder { call transfer };
#line 6
# hwservicemanager performs getpidcon on clients.
#line 6
allow hwservicemanager halserverdomain:dir search;
#line 6
allow hwservicemanager halserverdomain:file { read open map };
#line 6
allow hwservicemanager halserverdomain:process getattr;
#line 6
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 6
# all domains in domain.te.
#line 6
# Find HAL implementations
allow halserverdomain system_file:dir { open getattr read search ioctl lock watch watch_reads };
# Used to wait for hwservicemanager
#line 12
allow halserverdomain hwservicemanager_prop:file { getattr open read map };
#line 12
#line 1 "system/sepolicy/private/healthd.te"
typeattribute healthd coredomain;
#line 1 "system/sepolicy/private/heapprofd.te"
# Android heap profiling daemon. go/heapprofd.
type heapprofd_exec, exec_type, file_type, system_file_type;
type heapprofd_tmpfs, file_type;
#line 5
#line 5
# Allow the necessary permissions.
#line 5
#line 5
# Old domain may exec the file and transition to the new domain.
#line 5
allow init heapprofd_exec:file { getattr open read execute map };
#line 5
allow init heapprofd:process transition;
#line 5
# New domain is entered by executing the file.
#line 5
allow heapprofd heapprofd_exec:file { entrypoint open read execute getattr map };
#line 5
# New domain can send SIGCHLD to its caller.
#line 5
#line 5
# Enable AT_SECURE, i.e. libc secure mode.
#line 5
dontaudit init heapprofd:process noatsecure;
#line 5
# XXX dontaudit candidate but requires further study.
#line 5
allow init heapprofd:process { siginh rlimitinh };
#line 5
#line 5
# Make the transition occur by default.
#line 5
type_transition init heapprofd_exec:process heapprofd;
#line 5
#line 5
#line 6
type_transition heapprofd tmpfs:file heapprofd_tmpfs;
#line 6
allow heapprofd heapprofd_tmpfs:file { read write getattr map };
#line 6
# Allow apps in other MLS contexts (for multi-user) to access
# shared memory buffers created by heapprofd.
typeattribute heapprofd_tmpfs mlstrustedobject;
#line 12
#line 12
allow heapprofd property_socket:sock_file write;
#line 12
allow heapprofd init:unix_stream_socket connectto;
#line 12
#line 12
allow heapprofd heapprofd_prop:property_service set;
#line 12
#line 12
allow heapprofd heapprofd_prop:file { getattr open read map };
#line 12
#line 12
;
# Necessary for /proc/[pid]/cmdline access & sending signals.
typeattribute heapprofd mlstrustedsubject;
# Allow sending signals to processes. This excludes SIGKILL, SIGSTOP and
# SIGCHLD, which are controlled by separate permissions.
allow heapprofd self:capability kill;
# When scanning /proc/[pid]/cmdline to find matching processes for by-name
# profiling, only allowlisted domains will be allowed by SELinux. Avoid
# spamming logs with denials for entries that we can not access.
dontaudit heapprofd domain:dir { search open };
# Write trace data to the Perfetto traced daemon. This requires connecting to
# its producer socket and obtaining a (per-process) tmpfs fd.
#line 28
allow heapprofd traced:fd use;
#line 28
allow heapprofd traced_tmpfs:file { read write getattr map };
#line 28
#line 28
allow heapprofd traced_producer_socket:sock_file write;
#line 28
allow heapprofd traced:unix_stream_socket connectto;
#line 28
#line 28
#line 28
# Also allow the service to use the producer file descriptors. This is
#line 28
# necessary when the producer is creating the shared memory, as it will be
#line 28
# passed to the service as a file descriptor (obtained from memfd_create).
#line 28
allow traced heapprofd:fd use;
#line 28
# When handling profiling for all processes, heapprofd needs to read
# executables/libraries/etc to do stack unwinding.
#line 32
allow heapprofd nativetest_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 32
allow heapprofd nativetest_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 32
#line 33
allow heapprofd system_file_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 33
allow heapprofd system_file_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 33
#line 34
allow heapprofd apk_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 34
allow heapprofd apk_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 34
#line 35
allow heapprofd dalvikcache_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 35
allow heapprofd dalvikcache_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 35
#line 36
allow heapprofd vendor_file_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 36
allow heapprofd vendor_file_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 36
#line 37
allow heapprofd shell_test_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 37
allow heapprofd shell_test_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 37
# ART apex files and directory access to the containing /data/misc/apexdata.
#line 39
allow heapprofd apex_art_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 39
allow heapprofd apex_art_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 39
allow heapprofd apex_module_data_file:dir { getattr search };
# Some dex files are not world-readable.
# We are still constrained by the SELinux rules above.
allow heapprofd self:{ capability cap_userns } dac_read_search;
# For checking profileability.
allow heapprofd packages_list_file:file { getattr open read ioctl lock map watch watch_reads };
# Never allow profiling privileged or otherwise incompatible domains.
# Corresponding allow-rule is in private/domain.te.
#line 51
neverallow heapprofd {
#line 51
apexd
#line 51
app_zygote
#line 51
bpfloader
#line 51
hal_configstore_server
#line 51
init
#line 51
kernel
#line 51
keystore
#line 51
llkd
#line 51
logd
#line 51
logpersist
#line 51
recovery
#line 51
recovery_persist
#line 51
recovery_refresh
#line 51
ueventd
#line 51
vendor_init
#line 51
vold
#line 51
webview_zygote
#line 51
zygote
#line 51
}:file read;
#line 51
neverallow heapprofd {
#line 51
apexd
#line 51
app_zygote
#line 51
bpfloader
#line 51
hal_configstore_server
#line 51
init
#line 51
kernel
#line 51
keystore
#line 51
llkd
#line 51
logd
#line 51
logpersist
#line 51
recovery
#line 51
recovery_persist
#line 51
recovery_refresh
#line 51
ueventd
#line 51
vendor_init
#line 51
vold
#line 51
webview_zygote
#line 51
zygote
#line 51
}:process signal;
#line 70
# BEGIN_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 72
#line 72
neverallow heapprofd vendor_file_type:file { append create link unlink relabelfrom rename setattr write };
#line 72
neverallow heapprofd { vendor_file_type -vndk_sp_file }:file { execute execute_no_trans };
#line 72
#line 72
# END_TREBLE_ONLY -- this marker is used by CTS -- do not modify
#line 75
#line 1 "system/sepolicy/private/hidl_lazy_test_server.te"
type hidl_lazy_test_server, domain;
type hidl_lazy_test_server_exec, exec_type, file_type, system_file_type;
#line 8
#line 1 "system/sepolicy/private/hwservice.te"
type hal_lazy_test_hwservice, hwservice_manager_type, protected_hwservice;
#line 1 "system/sepolicy/private/hwservicemanager.te"
typeattribute hwservicemanager coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init hwservicemanager_exec:file { getattr open read execute map };
#line 3
allow init hwservicemanager:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow hwservicemanager hwservicemanager_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init hwservicemanager:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init hwservicemanager:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init hwservicemanager_exec:process hwservicemanager;
#line 3
#line 3
#line 5
allow hwservicemanager hidl_manager_hwservice:hwservice_manager { add find };
#line 5
allow hwservicemanager hidl_base_hwservice:hwservice_manager add;
#line 5
neverallow { domain -hwservicemanager } hidl_manager_hwservice:hwservice_manager add;
#line 5
#line 6
allow hwservicemanager hidl_token_hwservice:hwservice_manager { add find };
#line 6
allow hwservicemanager hidl_base_hwservice:hwservice_manager add;
#line 6
neverallow { domain -hwservicemanager } hidl_token_hwservice:hwservice_manager add;
#line 6
#line 8
#line 8
allow hwservicemanager property_socket:sock_file write;
#line 8
allow hwservicemanager init:unix_stream_socket connectto;
#line 8
#line 8
allow hwservicemanager ctl_interface_start_prop:property_service set;
#line 8
#line 8
allow hwservicemanager ctl_interface_start_prop:file { getattr open read map };
#line 8
#line 8
#line 9
#line 9
allow hwservicemanager property_socket:sock_file write;
#line 9
allow hwservicemanager init:unix_stream_socket connectto;
#line 9
#line 9
allow hwservicemanager hwservicemanager_prop:property_service set;
#line 9
#line 9
allow hwservicemanager hwservicemanager_prop:file { getattr open read map };
#line 9
#line 9
# hwservicemanager is using bootstrap bionic
#line 12
allow hwservicemanager system_bootstrap_lib_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 12
allow hwservicemanager system_bootstrap_lib_file:file { execute read open getattr map };
#line 12
# hwservicemanager is using apex_info via libvintf
#line 15
allow hwservicemanager apex_mnt_dir:dir { open getattr read search ioctl lock watch watch_reads };
#line 15
allow hwservicemanager apex_info_file:file { getattr open read ioctl lock map watch watch_reads };
#line 15
#line 15
allow hwservicemanager vendor_apex_metadata_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 15
allow hwservicemanager vendor_apex_metadata_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 15
#line 15
#line 1 "system/sepolicy/private/idmap.te"
typeattribute idmap coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init idmap_exec:file { getattr open read execute map };
#line 3
allow init idmap:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow idmap idmap_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init idmap:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init idmap:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init idmap_exec:process idmap;
#line 3
#line 3
#line 1 "system/sepolicy/private/incident.te"
typeattribute incident coredomain;
type incident_exec, system_file_type, exec_type, file_type;
# switch to incident domain for incident command
#line 6
# Allow the necessary permissions.
#line 6
#line 6
# Old domain may exec the file and transition to the new domain.
#line 6
allow shell incident_exec:file { getattr open read execute map };
#line 6
allow shell incident:process transition;
#line 6
# New domain is entered by executing the file.
#line 6
allow incident incident_exec:file { entrypoint open read execute getattr map };
#line 6
# New domain can send SIGCHLD to its caller.
#line 6
allow incident shell:process sigchld;
#line 6
# Enable AT_SECURE, i.e. libc secure mode.
#line 6
dontaudit shell incident:process noatsecure;
#line 6
# XXX dontaudit candidate but requires further study.
#line 6
allow shell incident:process { siginh rlimitinh };
#line 6
#line 6
# Make the transition occur by default.
#line 6
type_transition shell incident_exec:process incident;
#line 6
#line 7
# Allow the necessary permissions.
#line 7
#line 7
# Old domain may exec the file and transition to the new domain.
#line 7
allow dumpstate incident_exec:file { getattr open read execute map };
#line 7
allow dumpstate incident:process transition;
#line 7
# New domain is entered by executing the file.
#line 7
allow incident incident_exec:file { entrypoint open read execute getattr map };
#line 7
# New domain can send SIGCHLD to its caller.
#line 7
allow incident dumpstate:process sigchld;
#line 7
# Enable AT_SECURE, i.e. libc secure mode.
#line 7
dontaudit dumpstate incident:process noatsecure;
#line 7
# XXX dontaudit candidate but requires further study.
#line 7
allow dumpstate incident:process { siginh rlimitinh };
#line 7
#line 7
# Make the transition occur by default.
#line 7
type_transition dumpstate incident_exec:process incident;
#line 7
# allow incident access to stdout from its parent shell.
allow incident shell:fd use;
# allow incident to communicate with dumpstate, and write incident report to
# /data/data/com.android.shell/files/bugreports/tmp_incident_report
allow incident dumpstate:fd use;
allow incident dumpstate:unix_stream_socket { read write };
allow incident shell_data_file:file write;
# allow incident be able to output data for CTS to fetch.
allow incident devpts:chr_file { read write };
# allow incident to communicate use, read and write over the adb
# connection.
allow incident adbd:fd use;
allow incident adbd:unix_stream_socket { read write };
# allow adbd to reap incident
allow incident adbd:process { sigchld };
# Allow the incident command to talk to the incidentd over the binder, and get
# back the incident report data from a ParcelFileDescriptor.
#line 31
# Call the servicemanager and transfer references to it.
#line 31
allow incident servicemanager:binder { call transfer };
#line 31
# Allow servicemanager to send out callbacks
#line 31
allow servicemanager incident:binder { call transfer };
#line 31
# servicemanager performs getpidcon on clients.
#line 31
allow servicemanager incident:dir search;
#line 31
allow servicemanager incident:file { read open };
#line 31
allow servicemanager incident:process getattr;
#line 31
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 31
# all domains in domain.te.
#line 31
allow incident incident_service:service_manager find;
#line 33
# Call the server domain and optionally transfer references to it.
#line 33
allow incident incidentd:binder { call transfer };
#line 33
# Allow the serverdomain to transfer references to the client on the reply.
#line 33
allow incidentd incident:binder transfer;
#line 33
# Receive and use open files from the server.
#line 33
allow incident incidentd:fd use;
#line 33
allow incident incidentd:fifo_file write;
# only allow incident being called by shell or dumpstate
neverallow { domain -su -shell -incident -dumpstate} incident_exec:file { execute execute_no_trans };
#line 1 "system/sepolicy/private/incident_helper.te"
typeattribute incident_helper coredomain;
type incident_helper_exec, system_file_type, exec_type, file_type;
# switch to incident_helper domain for incident_helper command
#line 6
# Allow the necessary permissions.
#line 6
#line 6
# Old domain may exec the file and transition to the new domain.
#line 6
allow incidentd incident_helper_exec:file { getattr open read execute map };
#line 6
allow incidentd incident_helper:process transition;
#line 6
# New domain is entered by executing the file.
#line 6
allow incident_helper incident_helper_exec:file { entrypoint open read execute getattr map };
#line 6
# New domain can send SIGCHLD to its caller.
#line 6
allow incident_helper incidentd:process sigchld;
#line 6
# Enable AT_SECURE, i.e. libc secure mode.
#line 6
dontaudit incidentd incident_helper:process noatsecure;
#line 6
# XXX dontaudit candidate but requires further study.
#line 6
allow incidentd incident_helper:process { siginh rlimitinh };
#line 6
#line 6
# Make the transition occur by default.
#line 6
type_transition incidentd incident_helper_exec:process incident_helper;
#line 6
# use pipe to transmit data from/to incidentd/incident_helper for parsing
allow incident_helper { shell incident incidentd dumpstate }:fd use;
allow incident_helper { shell incident incidentd dumpstate }:fifo_file { getattr read write };
allow incident_helper incidentd:unix_stream_socket { read write };
# only allow incidentd and shell to call incident_helper
neverallow { domain -incidentd -incident_helper -shell } incident_helper_exec:file { execute execute_no_trans };
#line 1 "system/sepolicy/private/incidentd.te"
typeattribute incidentd coredomain;
typeattribute incidentd mlstrustedsubject;
#line 4
#line 4
# Allow the necessary permissions.
#line 4
#line 4
# Old domain may exec the file and transition to the new domain.
#line 4
allow init incidentd_exec:file { getattr open read execute map };
#line 4
allow init incidentd:process transition;
#line 4
# New domain is entered by executing the file.
#line 4
allow incidentd incidentd_exec:file { entrypoint open read execute getattr map };
#line 4
# New domain can send SIGCHLD to its caller.
#line 4
#line 4
# Enable AT_SECURE, i.e. libc secure mode.
#line 4
dontaudit init incidentd:process noatsecure;
#line 4
# XXX dontaudit candidate but requires further study.
#line 4
allow init incidentd:process { siginh rlimitinh };
#line 4
#line 4
# Make the transition occur by default.
#line 4
type_transition init incidentd_exec:process incidentd;
#line 4
#line 4
type incidentd_exec, system_file_type, exec_type, file_type;
#line 6
# Call the servicemanager and transfer references to it.
#line 6
allow incidentd servicemanager:binder { call transfer };
#line 6
# Allow servicemanager to send out callbacks
#line 6
allow servicemanager incidentd:binder { call transfer };
#line 6
# servicemanager performs getpidcon on clients.
#line 6
allow servicemanager incidentd:dir search;
#line 6
allow servicemanager incidentd:file { read open };
#line 6
allow servicemanager incidentd:process getattr;
#line 6
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 6
# all domains in domain.te.
#line 6
#line 7
# TODO(b/115946999): Remove /sys/power/* permissions once CONFIG_PM_WAKELOCKS is
#line 7
# deprecated.
#line 7
# Access /sys/power/wake_lock and /sys/power/wake_unlock
#line 7
allow incidentd sysfs_wake_lock:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 7
# Accessing these files requires CAP_BLOCK_SUSPEND
#line 7
allow incidentd self:{ capability2 cap2_userns } block_suspend;
#line 7
# system_suspend permissions
#line 7
#line 7
# Call the server domain and optionally transfer references to it.
#line 7
allow incidentd system_suspend_server:binder { call transfer };
#line 7
# Allow the serverdomain to transfer references to the client on the reply.
#line 7
allow system_suspend_server incidentd:binder transfer;
#line 7
# Receive and use open files from the server.
#line 7
allow incidentd system_suspend_server:fd use;
#line 7
#line 7
allow incidentd system_suspend_hwservice:hwservice_manager find;
#line 7
# halclientdomain permissions
#line 7
#line 7
# Call the hwservicemanager and transfer references to it.
#line 7
allow incidentd hwservicemanager:binder { call transfer };
#line 7
# Allow hwservicemanager to send out callbacks
#line 7
allow hwservicemanager incidentd:binder { call transfer };
#line 7
# hwservicemanager performs getpidcon on clients.
#line 7
allow hwservicemanager incidentd:dir search;
#line 7
allow hwservicemanager incidentd:file { read open map };
#line 7
allow hwservicemanager incidentd:process getattr;
#line 7
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 7
# all domains in domain.te.
#line 7
#line 7
#line 7
allow incidentd hwservicemanager_prop:file { getattr open read map };
#line 7
#line 7
allow incidentd hidl_manager_hwservice:hwservice_manager find;
#line 7
# AIDL suspend hal permissions
#line 7
allow incidentd hal_system_suspend_service:service_manager find;
#line 7
#line 7
# Call the servicemanager and transfer references to it.
#line 7
allow incidentd servicemanager:binder { call transfer };
#line 7
# Allow servicemanager to send out callbacks
#line 7
allow servicemanager incidentd:binder { call transfer };
#line 7
# servicemanager performs getpidcon on clients.
#line 7
allow servicemanager incidentd:dir search;
#line 7
allow servicemanager incidentd:file { read open };
#line 7
allow servicemanager incidentd:process getattr;
#line 7
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 7
# all domains in domain.te.
#line 7
#line 7
# Allow incidentd to scan through /proc/pid for all processes
#line 10
allow incidentd domain:dir { open getattr read search ioctl lock watch watch_reads };
#line 10
allow incidentd domain:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 10
# Allow incidentd to kill incident_helper when timeout
allow incidentd incident_helper:process sigkill;
# Allow executing files on system, such as:
# /system/bin/toolbox
# /system/bin/logcat
# /system/bin/dumpsys
allow incidentd system_file:file execute_no_trans;
allow incidentd toolbox_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# section id 1002, allow reading kernel version /proc/version
allow incidentd proc_version:file { getattr open read ioctl lock map watch watch_reads };
# section id 1116, allow accessing statsd socket
#line 26
allow incidentd statsdw_socket:sock_file write;
#line 26
allow incidentd statsd:unix_dgram_socket sendto;
#line 26
# section id 2001, allow reading /proc/pagetypeinfo
allow incidentd proc_pagetypeinfo:file { getattr open read ioctl lock map watch watch_reads };
# section id 2002, allow reading /d/wakeup_sources
;
# section id 2003, allow executing top
allow incidentd proc_meminfo:file { open read };
# section id 2004, allow reading /sys/devices/system/cpu/cpufreq/all_time_in_state
allow incidentd sysfs_devices_system_cpu:file { getattr open read ioctl lock map watch watch_reads };
# section id 2005, allow reading ps dump in full
allow incidentd domain:process getattr;
# section id 2006, allow reading /sys/class/power_supply/bms/battery_type
allow incidentd sysfs_batteryinfo:dir { search };
allow incidentd sysfs_batteryinfo:file { getattr open read ioctl lock map watch watch_reads };
# section id 2007, allow reading LAST_KMSG /sys/fs/pstore/console-ramoops
;
;
# section id 3023, allow obtaining stats report
allow incidentd stats_service:service_manager find;
#line 53
# Call the server domain and optionally transfer references to it.
#line 53
allow incidentd statsd:binder { call transfer };
#line 53
# Allow the serverdomain to transfer references to the client on the reply.
#line 53
allow statsd incidentd:binder transfer;
#line 53
# Receive and use open files from the server.
#line 53
allow incidentd statsd:fd use;
#line 53
# section id 3026, allow reading /data/misc/perfetto-traces.
allow incidentd perfetto_traces_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow incidentd perfetto_traces_data_file:file { getattr open read ioctl lock map watch watch_reads };
# section id 3052, allow accessing nfc_service
allow incidentd nfc_service:service_manager find;
# Create and write into /data/misc/incidents
allow incidentd incident_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow incidentd incident_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Enable incidentd to get stack traces.
#line 67
# Call the servicemanager and transfer references to it.
#line 67
allow incidentd servicemanager:binder { call transfer };
#line 67
# Allow servicemanager to send out callbacks
#line 67
allow servicemanager incidentd:binder { call transfer };
#line 67
# servicemanager performs getpidcon on clients.
#line 67
allow servicemanager incidentd:dir search;
#line 67
allow servicemanager incidentd:file { read open };
#line 67
allow servicemanager incidentd:process getattr;
#line 67
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 67
# all domains in domain.te.
#line 67
#line 68
# Call the hwservicemanager and transfer references to it.
#line 68
allow incidentd hwservicemanager:binder { call transfer };
#line 68
# Allow hwservicemanager to send out callbacks
#line 68
allow hwservicemanager incidentd:binder { call transfer };
#line 68
# hwservicemanager performs getpidcon on clients.
#line 68
allow hwservicemanager incidentd:dir search;
#line 68
allow hwservicemanager incidentd:file { read open map };
#line 68
allow hwservicemanager incidentd:process getattr;
#line 68
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 68
# all domains in domain.te.
#line 68
allow incidentd hwservicemanager:hwservice_manager { list };
#line 70
allow incidentd hwservicemanager_prop:file { getattr open read map };
#line 70
allow incidentd hidl_manager_hwservice:hwservice_manager { find };
# Read files in /proc
allow incidentd {
proc_cmdline
proc_pid_max
proc_pipe_conf
proc_stat
}:file { getattr open read ioctl lock map watch watch_reads };
# Signal java processes to dump their stack and get the results
allow incidentd { appdomain ephemeral_app system_server }:process signal;
# Signal native processes to dump their stack.
# This list comes from native_processes_to_dump in incidentd/utils.c
allow incidentd {
# This list comes from native_processes_to_dump in dumputils/dump_utils.cpp
audioserver
cameraserver
drmserver
inputflinger
mediadrmserver
mediaextractor
mediametrics
mediaserver
sdcardd
statsd
surfaceflinger
# This list comes from hal_interfaces_to_dump in dumputils/dump_utils.cpp
hal_audio_server
hal_bluetooth_server
hal_camera_server
hal_codec2_server
hal_face_server
hal_graphics_allocator_server
hal_graphics_composer_server
hal_health_server
hal_omx_server
hal_sensors_server
hal_vr_server
}:process signal;
# Allow incidentd to make binder calls to any binder service
#line 115
# Call the server domain and optionally transfer references to it.
#line 115
allow incidentd system_server:binder { call transfer };
#line 115
# Allow the serverdomain to transfer references to the client on the reply.
#line 115
allow system_server incidentd:binder transfer;
#line 115
# Receive and use open files from the server.
#line 115
allow incidentd system_server:fd use;
#line 115
#line 116
# Call the server domain and optionally transfer references to it.
#line 116
allow incidentd appdomain:binder { call transfer };
#line 116
# Allow the serverdomain to transfer references to the client on the reply.
#line 116
allow appdomain incidentd:binder transfer;
#line 116
# Receive and use open files from the server.
#line 116
allow incidentd appdomain:fd use;
#line 116
# Reading /proc/PID/maps of other processes
;
# incidentd has capability sys_ptrace, but should only use that capability for
# accessing sensitive /proc/PID files, never for using ptrace attach.
neverallow incidentd *:process ptrace;
allow incidentd self:{ capability cap_userns } {
# Send signals to processes
kill
};
# Connect to tombstoned to intercept dumps.
#line 130
allow incidentd tombstoned_intercept_socket:sock_file write;
#line 130
allow incidentd tombstoned:unix_stream_socket connectto;
#line 130
# Run a shell.
allow incidentd shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# For running am, incident-helper-cmd and similar framework commands.
# Run /system/bin/app_process.
allow incidentd zygote_exec:file { { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } } };
# Access the runtime feature flag properties.
#line 139
allow incidentd device_config_runtime_native_prop:file { getattr open read map };
#line 139
#line 140
allow incidentd device_config_runtime_native_boot_prop:file { getattr open read map };
#line 140
# Access odsign verification status.
#line 142
allow incidentd odsign_prop:file { getattr open read map };
#line 142
# ART locks profile files.
allow incidentd system_file:file lock;
# Incidentd should never exec from the memory (e.g. JIT cache). These denials are expected.
dontaudit incidentd dalvikcache_data_file:dir { open getattr read search ioctl lock watch watch_reads };
dontaudit incidentd apex_module_data_file:dir { open getattr read search ioctl lock watch watch_reads };
dontaudit incidentd apex_art_data_file:dir { open getattr read search ioctl lock watch watch_reads };
dontaudit incidentd tmpfs:file { { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } { getattr execute execute_no_trans map } };
# Allow incidentd to read /apex/apex-info-list.xml
allow incidentd apex_info_file:file { getattr open read ioctl lock map watch watch_reads };
# logd access - work to be done is a PII safe log (possibly an event log?)
# TODO control_logd(incidentd)
# Access /data/misc/logd
#line 159
allow incidentd misc_logd_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 159
allow incidentd misc_logd_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 159
# Allow incidentd to find these standard groups of services.
# Others can be allowlisted individually.
allow incidentd {
system_server_service
app_api_service
system_api_service
-tracingproxy_service
}:service_manager find;
# Only incidentd can publish the binder service
#line 171
allow incidentd incident_service:service_manager { add find };
#line 171
neverallow { domain -incidentd } incident_service:service_manager add;
#line 171
#line 171
# On debug builds with root, allow binder services to use binder over TCP.
#line 171
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 171
#line 171
# Allow pipes only from dumpstate and incident
allow incidentd { dumpstate incident }:fd use;
allow incidentd { dumpstate incident }:fifo_file write;
# Allow incident to call back to incident with status updates.
#line 178
# Call the server domain and optionally transfer references to it.
#line 178
allow incidentd incident:binder { call transfer };
#line 178
# Allow the serverdomain to transfer references to the client on the reply.
#line 178
allow incident incidentd:binder transfer;
#line 178
# Receive and use open files from the server.
#line 178
allow incidentd incident:fd use;
#line 178
# Read device serial number from system properties
# This is used to track reports from lab testing devices
#line 184
# Read ro.boot.bootreason, persist.sys.boot.bootreason
# This is used to track reports from lab testing devices
#line 192
# Allow incident to read the build properties for attestation feature
#line 195
allow incidentd build_attestation_prop:file { getattr open read map };
#line 195
;
###
### neverallow rules
###
# only incidentd and the other root services in limited circumstances
# can get to the files in /data/misc/incidents
#
# write, execute, append are forbidden almost everywhere
neverallow { domain -incidentd -init -vold } incident_data_file:file {
{ open append write lock map }
{ getattr execute execute_no_trans map }
create
rename
setattr
unlink
append
};
# read is also allowed by system_server, for when the file is handed to dropbox
neverallow { domain -incidentd -init -vold -system_server } incident_data_file:file { getattr open read ioctl lock map watch watch_reads };
# limited access to the directory itself
neverallow { domain -incidentd -init -vold } incident_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
#line 1 "system/sepolicy/private/init.te"
typeattribute init coredomain;
#line 3
type_transition init tmpfs:file init_tmpfs;
#line 3
allow init init_tmpfs:file { read write getattr map };
#line 3
# Transitions to seclabel processes in init.rc
#line 6
# Old domain may exec the file and transition to the new domain.
#line 6
allow init rootfs:file { getattr open read execute map };
#line 6
allow init slideshow:process transition;
#line 6
# New domain is entered by executing the file.
#line 6
allow slideshow rootfs:file { entrypoint open read execute getattr map };
#line 6
# New domain can send SIGCHLD to its caller.
#line 6
#line 6
# Enable AT_SECURE, i.e. libc secure mode.
#line 6
dontaudit init slideshow:process noatsecure;
#line 6
# XXX dontaudit candidate but requires further study.
#line 6
allow init slideshow:process { siginh rlimitinh };
#line 6
#line 7
# Allow the necessary permissions.
#line 7
#line 7
# Old domain may exec the file and transition to the new domain.
#line 7
allow init charger_exec:file { getattr open read execute map };
#line 7
allow init charger:process transition;
#line 7
# New domain is entered by executing the file.
#line 7
allow charger charger_exec:file { entrypoint open read execute getattr map };
#line 7
# New domain can send SIGCHLD to its caller.
#line 7
#line 7
# Enable AT_SECURE, i.e. libc secure mode.
#line 7
dontaudit init charger:process noatsecure;
#line 7
# XXX dontaudit candidate but requires further study.
#line 7
allow init charger:process { siginh rlimitinh };
#line 7
#line 7
# Make the transition occur by default.
#line 7
type_transition init charger_exec:process charger;
#line 7
#line 8
# Allow the necessary permissions.
#line 8
#line 8
# Old domain may exec the file and transition to the new domain.
#line 8
allow init e2fs_exec:file { getattr open read execute map };
#line 8
allow init e2fs:process transition;
#line 8
# New domain is entered by executing the file.
#line 8
allow e2fs e2fs_exec:file { entrypoint open read execute getattr map };
#line 8
# New domain can send SIGCHLD to its caller.
#line 8
#line 8
# Enable AT_SECURE, i.e. libc secure mode.
#line 8
dontaudit init e2fs:process noatsecure;
#line 8
# XXX dontaudit candidate but requires further study.
#line 8
allow init e2fs:process { siginh rlimitinh };
#line 8
#line 8
# Make the transition occur by default.
#line 8
type_transition init e2fs_exec:process e2fs;
#line 8
#line 9
# Allow the necessary permissions.
#line 9
#line 9
# Old domain may exec the file and transition to the new domain.
#line 9
allow init bpfloader_exec:file { getattr open read execute map };
#line 9
allow init bpfloader:process transition;
#line 9
# New domain is entered by executing the file.
#line 9
allow bpfloader bpfloader_exec:file { entrypoint open read execute getattr map };
#line 9
# New domain can send SIGCHLD to its caller.
#line 9
#line 9
# Enable AT_SECURE, i.e. libc secure mode.
#line 9
dontaudit init bpfloader:process noatsecure;
#line 9
# XXX dontaudit candidate but requires further study.
#line 9
allow init bpfloader:process { siginh rlimitinh };
#line 9
#line 9
# Make the transition occur by default.
#line 9
type_transition init bpfloader_exec:process bpfloader;
#line 9
#line 23
#line 24
# Old domain may exec the file and transition to the new domain.
#line 24
allow init shell_exec:file { getattr open read execute map };
#line 24
allow init shell:process transition;
#line 24
# New domain is entered by executing the file.
#line 24
allow shell shell_exec:file { entrypoint open read execute getattr map };
#line 24
# New domain can send SIGCHLD to its caller.
#line 24
#line 24
# Enable AT_SECURE, i.e. libc secure mode.
#line 24
dontaudit init shell:process noatsecure;
#line 24
# XXX dontaudit candidate but requires further study.
#line 24
allow init shell:process { siginh rlimitinh };
#line 24
#line 25
# Old domain may exec the file and transition to the new domain.
#line 25
allow init init_exec:file { getattr open read execute map };
#line 25
allow init ueventd:process transition;
#line 25
# New domain is entered by executing the file.
#line 25
allow ueventd init_exec:file { entrypoint open read execute getattr map };
#line 25
# New domain can send SIGCHLD to its caller.
#line 25
#line 25
# Enable AT_SECURE, i.e. libc secure mode.
#line 25
dontaudit init ueventd:process noatsecure;
#line 25
# XXX dontaudit candidate but requires further study.
#line 25
allow init ueventd:process { siginh rlimitinh };
#line 25
#line 26
# Old domain may exec the file and transition to the new domain.
#line 26
allow init init_exec:file { getattr open read execute map };
#line 26
allow init vendor_init:process transition;
#line 26
# New domain is entered by executing the file.
#line 26
allow vendor_init init_exec:file { entrypoint open read execute getattr map };
#line 26
# New domain can send SIGCHLD to its caller.
#line 26
#line 26
# Enable AT_SECURE, i.e. libc secure mode.
#line 26
dontaudit init vendor_init:process noatsecure;
#line 26
# XXX dontaudit candidate but requires further study.
#line 26
allow init vendor_init:process { siginh rlimitinh };
#line 26
#line 27
# Old domain may exec the file and transition to the new domain.
#line 27
allow init { rootfs toolbox_exec }:file { getattr open read execute map };
#line 27
allow init modprobe:process transition;
#line 27
# New domain is entered by executing the file.
#line 27
allow modprobe { rootfs toolbox_exec }:file { entrypoint open read execute getattr map };
#line 27
# New domain can send SIGCHLD to its caller.
#line 27
#line 27
# Enable AT_SECURE, i.e. libc secure mode.
#line 27
dontaudit init modprobe:process noatsecure;
#line 27
# XXX dontaudit candidate but requires further study.
#line 27
allow init modprobe:process { siginh rlimitinh };
#line 27
#line 36
# Allow init to figure out name of dm-device from it's /dev/block/dm-XX path.
# This is useful in case of remounting ext4 userdata into checkpointing mode,
# since it potentially requires tearing down dm-devices (e.g. dm-bow, dm-crypto)
# that userdata is mounted onto.
allow init sysfs_dm:file read;
# Allow init to modify the properties of loop devices.
allow init sysfs_loop:dir { open getattr read search ioctl lock watch watch_reads };
allow init sysfs_loop:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Allow init to examine the properties of block devices.
allow init sysfs_type:file { getattr read };
# Allow init get the attributes of block devices in /dev/block.
allow init dev_type:dir { open getattr read search ioctl lock watch watch_reads };
allow init dev_type:blk_file getattr;
# Allow init to write to the drop_caches file.
allow init proc_drop_caches:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Allow the BoringSSL self test to request a reboot upon failure
#line 58
#line 58
allow init property_socket:sock_file write;
#line 58
allow init init:unix_stream_socket connectto;
#line 58
#line 58
allow init powerctl_prop:property_service set;
#line 58
#line 58
allow init powerctl_prop:file { getattr open read map };
#line 58
#line 58
# Only init is allowed to set userspace reboot related properties.
#line 61
#line 61
allow init property_socket:sock_file write;
#line 61
allow init init:unix_stream_socket connectto;
#line 61
#line 61
allow init userspace_reboot_exported_prop:property_service set;
#line 61
#line 61
allow init userspace_reboot_exported_prop:file { getattr open read map };
#line 61
#line 61
neverallow { domain -init } userspace_reboot_exported_prop:property_service set;
# Second-stage init performs a test for whether the kernel has SELinux hooks
# for the perf_event_open() syscall. This is done by testing for the syscall
# outcomes corresponding to this policy.
# TODO(b/137092007): this can be removed once the platform stops supporting
# kernels that precede the perf_event_open hooks (Android common kernels 4.4
# and 4.9).
allow init self:perf_event { open cpu };
allow init self:{ capability2 cap2_userns } perfmon;
neverallow init self:perf_event { kernel tracepoint read write };
dontaudit init self:perf_event { kernel tracepoint read write };
# Allow init to communicate with snapuserd to transition Virtual A/B devices
# from the first-stage daemon to the second-stage.
allow init snapuserd_socket:sock_file write;
allow init snapuserd:unix_stream_socket connectto;
# Allow for libsnapshot's use of flock() on /metadata/ota.
allow init ota_metadata_file:dir lock;
# Allow init to restore contexts of vd_device(/dev/block/vd[..]) when labeling
# /dev/block.
allow init vd_device:blk_file relabelto;
# Only init is allowed to set the sysprop indicating whether perf_event_open()
# SELinux hooks were detected.
#line 88
#line 88
allow init property_socket:sock_file write;
#line 88
allow init init:unix_stream_socket connectto;
#line 88
#line 88
allow init init_perf_lsm_hooks_prop:property_service set;
#line 88
#line 88
allow init init_perf_lsm_hooks_prop:file { getattr open read map };
#line 88
#line 88
neverallow { domain -init } init_perf_lsm_hooks_prop:property_service set;
# Only init can write vts.native_server.on
#line 92
#line 92
allow init property_socket:sock_file write;
#line 92
allow init init:unix_stream_socket connectto;
#line 92
#line 92
allow init vts_status_prop:property_service set;
#line 92
#line 92
allow init vts_status_prop:file { getattr open read map };
#line 92
#line 92
neverallow { domain -init } vts_status_prop:property_service set;
# Only init can write normal ro.boot. properties
neverallow { domain -init } bootloader_prop:property_service set;
# Only init can write hal.instrumentation.enable
neverallow { domain -init } hal_instrumentation_prop:property_service set;
# Only init can write ro.property_service.version
neverallow { domain -init } property_service_version_prop:property_service set;
# Only init can set keystore.boot_level
neverallow { domain -init } keystore_listen_prop:property_service set;
# Allow accessing /sys/kernel/tracing/instances/bootreceiver to set up tracing.
allow init debugfs_bootreceiver_tracing:file { open append write lock map };
# PRNG seeder daemon socket is created and listened on by init before forking.
allow init prng_seeder:unix_stream_socket { create bind listen };
# Devices with kernels where CONFIG_HIST_TRIGGERS isn't enabled will
# attempt to write a non exisiting 'synthetic_events' file, when setting
# up synthetic events. This is a no-op in tracefs.
dontaudit init debugfs_tracing_debug:dir { write add_name };
# chown/chmod on devices.
allow init {
dev_type
-hw_random_device
-keychord_device
-vm_manager_device_type
-port_device
}:chr_file setattr;
#line 1 "system/sepolicy/private/inputflinger.te"
typeattribute inputflinger coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init inputflinger_exec:file { getattr open read execute map };
#line 3
allow init inputflinger:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow inputflinger inputflinger_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init inputflinger:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init inputflinger:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init inputflinger_exec:process inputflinger;
#line 3
#line 3
#line 1 "system/sepolicy/private/installd.te"
typeattribute installd coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init installd_exec:file { getattr open read execute map };
#line 3
allow init installd:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow installd installd_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init installd:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init installd:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init installd_exec:process installd;
#line 3
#line 3
# Run migrate_legacy_obb_data.sh in its own sandbox.
#line 6
# Allow the necessary permissions.
#line 6
#line 6
# Old domain may exec the file and transition to the new domain.
#line 6
allow installd migrate_legacy_obb_data_exec:file { getattr open read execute map };
#line 6
allow installd migrate_legacy_obb_data:process transition;
#line 6
# New domain is entered by executing the file.
#line 6
allow migrate_legacy_obb_data migrate_legacy_obb_data_exec:file { entrypoint open read execute getattr map };
#line 6
# New domain can send SIGCHLD to its caller.
#line 6
allow migrate_legacy_obb_data installd:process sigchld;
#line 6
# Enable AT_SECURE, i.e. libc secure mode.
#line 6
dontaudit installd migrate_legacy_obb_data:process noatsecure;
#line 6
# XXX dontaudit candidate but requires further study.
#line 6
allow installd migrate_legacy_obb_data:process { siginh rlimitinh };
#line 6
#line 6
# Make the transition occur by default.
#line 6
type_transition installd migrate_legacy_obb_data_exec:process migrate_legacy_obb_data;
#line 6
allow installd shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Run dex2oat in its own sandbox.
#line 10
# Allow the necessary permissions.
#line 10
#line 10
# Old domain may exec the file and transition to the new domain.
#line 10
allow installd dex2oat_exec:file { getattr open read execute map };
#line 10
allow installd dex2oat:process transition;
#line 10
# New domain is entered by executing the file.
#line 10
allow dex2oat dex2oat_exec:file { entrypoint open read execute getattr map };
#line 10
# New domain can send SIGCHLD to its caller.
#line 10
allow dex2oat installd:process sigchld;
#line 10
# Enable AT_SECURE, i.e. libc secure mode.
#line 10
dontaudit installd dex2oat:process noatsecure;
#line 10
# XXX dontaudit candidate but requires further study.
#line 10
allow installd dex2oat:process { siginh rlimitinh };
#line 10
#line 10
# Make the transition occur by default.
#line 10
type_transition installd dex2oat_exec:process dex2oat;
#line 10
# Run dexoptanalyzer in its own sandbox.
#line 13
# Allow the necessary permissions.
#line 13
#line 13
# Old domain may exec the file and transition to the new domain.
#line 13
allow installd dexoptanalyzer_exec:file { getattr open read execute map };
#line 13
allow installd dexoptanalyzer:process transition;
#line 13
# New domain is entered by executing the file.
#line 13
allow dexoptanalyzer dexoptanalyzer_exec:file { entrypoint open read execute getattr map };
#line 13
# New domain can send SIGCHLD to its caller.
#line 13
allow dexoptanalyzer installd:process sigchld;
#line 13
# Enable AT_SECURE, i.e. libc secure mode.
#line 13
dontaudit installd dexoptanalyzer:process noatsecure;
#line 13
# XXX dontaudit candidate but requires further study.
#line 13
allow installd dexoptanalyzer:process { siginh rlimitinh };
#line 13
#line 13
# Make the transition occur by default.
#line 13
type_transition installd dexoptanalyzer_exec:process dexoptanalyzer;
#line 13
# Run viewcompiler in its own sandbox.
#line 16
# Allow the necessary permissions.
#line 16
#line 16
# Old domain may exec the file and transition to the new domain.
#line 16
allow installd viewcompiler_exec:file { getattr open read execute map };
#line 16
allow installd viewcompiler:process transition;
#line 16
# New domain is entered by executing the file.
#line 16
allow viewcompiler viewcompiler_exec:file { entrypoint open read execute getattr map };
#line 16
# New domain can send SIGCHLD to its caller.
#line 16
allow viewcompiler installd:process sigchld;
#line 16
# Enable AT_SECURE, i.e. libc secure mode.
#line 16
dontaudit installd viewcompiler:process noatsecure;
#line 16
# XXX dontaudit candidate but requires further study.
#line 16
allow installd viewcompiler:process { siginh rlimitinh };
#line 16
#line 16
# Make the transition occur by default.
#line 16
type_transition installd viewcompiler_exec:process viewcompiler;
#line 16
# Run profman in its own sandbox.
#line 19
# Allow the necessary permissions.
#line 19
#line 19
# Old domain may exec the file and transition to the new domain.
#line 19
allow installd profman_exec:file { getattr open read execute map };
#line 19
allow installd profman:process transition;
#line 19
# New domain is entered by executing the file.
#line 19
allow profman profman_exec:file { entrypoint open read execute getattr map };
#line 19
# New domain can send SIGCHLD to its caller.
#line 19
allow profman installd:process sigchld;
#line 19
# Enable AT_SECURE, i.e. libc secure mode.
#line 19
dontaudit installd profman:process noatsecure;
#line 19
# XXX dontaudit candidate but requires further study.
#line 19
allow installd profman:process { siginh rlimitinh };
#line 19
#line 19
# Make the transition occur by default.
#line 19
type_transition installd profman_exec:process profman;
#line 19
# Run idmap in its own sandbox.
#line 22
# Allow the necessary permissions.
#line 22
#line 22
# Old domain may exec the file and transition to the new domain.
#line 22
allow installd idmap_exec:file { getattr open read execute map };
#line 22
allow installd idmap:process transition;
#line 22
# New domain is entered by executing the file.
#line 22
allow idmap idmap_exec:file { entrypoint open read execute getattr map };
#line 22
# New domain can send SIGCHLD to its caller.
#line 22
allow idmap installd:process sigchld;
#line 22
# Enable AT_SECURE, i.e. libc secure mode.
#line 22
dontaudit installd idmap:process noatsecure;
#line 22
# XXX dontaudit candidate but requires further study.
#line 22
allow installd idmap:process { siginh rlimitinh };
#line 22
#line 22
# Make the transition occur by default.
#line 22
type_transition installd idmap_exec:process idmap;
#line 22
# For collecting bugreports.
allow installd dumpstate:fd use;
allow installd dumpstate:fifo_file { getattr open read ioctl lock map watch watch_reads };
# Delete /system/bin/bcc generated artifacts
allow installd app_exec_data_file:file unlink;
# Capture userdata snapshots to /data/misc_[ce|de]/rollback and
# subsequently restore them.
allow installd rollback_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow installd rollback_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow installd to access the runtime feature flag properties.
#line 37
allow installd device_config_runtime_native_prop:file { getattr open read map };
#line 37
#line 38
allow installd device_config_runtime_native_boot_prop:file { getattr open read map };
#line 38
# Allow installd to access apk verity feature flag (for legacy case).
#line 41
allow installd apk_verity_prop:file { getattr open read map };
#line 41
# Allow installd to access odsign verification status
#line 44
allow installd odsign_prop:file { getattr open read map };
#line 44
# Allow installd to delete files in /data/staging
allow installd staging_data_file:file unlink;
allow installd staging_data_file:dir { open read remove_name rmdir search write getattr };
allow installd { dex2oat dexoptanalyzer }:process signal;
# installd kills subprocesses if they time out.
allow installd { dex2oat dexoptanalyzer profman }:process sigkill;
# Allow installd manage dirs in /data/misc_ce/0/sdksandbox
allow installd sdk_sandbox_system_data_file:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } relabelfrom };
# Allow installd to enable fs-verity for app file passed as FD;
allow installd { untrusted_app_all priv_app gmscore_app }:fd use;
allowxperm installd app_data_file_type:file ioctl 0x6685;
#line 1 "system/sepolicy/private/isolated_app.te"
###
### isolated_apps.
###
### This file defines the rules for isolated apps that does not wish to use
### service managers and does not require extra computational resources.
###
typeattribute isolated_app coredomain;
#line 10
typeattribute isolated_app appdomain;
#line 10
# Label tmpfs objects for all apps.
#line 10
type_transition isolated_app tmpfs:file appdomain_tmpfs;
#line 10
#line 10
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 10
type isolated_app_userfaultfd;
#line 10
type_transition isolated_app isolated_app:anon_inode isolated_app_userfaultfd "[userfaultfd]";
#line 10
# Allow domain to create/use userfaultfd anon_inode.
#line 10
allow isolated_app isolated_app_userfaultfd:anon_inode { create ioctl read };
#line 10
# Suppress errors generate during bugreport
#line 10
dontaudit su isolated_app_userfaultfd:anon_inode *;
#line 10
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 10
neverallow { domain -isolated_app } isolated_app_userfaultfd:anon_inode *;
#line 10
#line 10
allow isolated_app appdomain_tmpfs:file { execute getattr map read write };
#line 10
neverallow { isolated_app -runas_app -shell -simpleperf } { domain -isolated_app }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 10
neverallow { appdomain -runas_app -shell -simpleperf -isolated_app } isolated_app:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 10
# The Android security model guarantees the confidentiality and integrity
#line 10
# of application data and execution state. Ptrace bypasses those
#line 10
# confidentiality guarantees. Disallow ptrace access from system components to
#line 10
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 10
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 10
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 10
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 10
# live lock conditions.
#line 10
neverallow { domain -isolated_app -crash_dump -runas_app -simpleperf } isolated_app:process ptrace;
#line 10
#line 11
typeattribute isolated_app isolated_app_all;
#line 11
allow isolated_app webviewupdate_service:service_manager find;
# Allow access to network sockets received over IPC. New socket creation is not
# permitted.
allow isolated_app { ephemeral_app priv_app untrusted_app_all }:{ tcp_socket udp_socket } { { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# b/32896414: Allow accessing sdcard file descriptors passed to isolated_apps
# by other processes. Open should never be allowed, and is blocked by
# neverallow rules in isolated_app_all attribute.
# media_rw_data_file is included for sdcardfs, and can be removed if sdcardfs
# is modified to change the secontext when accessing the lower filesystem.
allow isolated_app { sdcard_type fuse media_rw_data_file }:file { read write append getattr lock map };
# For webviews, isolated_app processes can be forked from the webview_zygote
# in addition to the zygote. Allow access to resources inherited from the
# webview_zygote process. These rules are specialized copies of the ones in app.te.
# Inherit FDs from the webview_zygote.
allow isolated_app webview_zygote:fd use;
# Notify webview_zygote of child death.
allow isolated_app webview_zygote:process sigchld;
# Inherit logd write socket.
allow isolated_app webview_zygote:unix_dgram_socket write;
# Read system properties managed by webview_zygote.
allow isolated_app webview_zygote_tmpfs:file read;
#line 1 "system/sepolicy/private/isolated_app_all.te"
###
### isolated_app_all.
###
### Services with isolatedProcess=true in their manifest.
###
### This file defines the rules shared by all isolated apps. An "isolated
### app" is an APP with UID between AID_ISOLATED_START (99000)
### and AID_ISOLATED_END (99999).
###
# Access already open app data files received over Binder or local socket IPC.
allow isolated_app_all { app_data_file privapp_data_file sdk_sandbox_data_file}:file { append read write getattr lock map };
allow isolated_app_all activity_service:service_manager find;
allow isolated_app_all display_service:service_manager find;
# Google Breakpad (crash reporter for Chrome) relies on ptrace
# functionality. Without the ability to ptrace, the crash reporter
# tool is broken.
# b/20150694
# https://code.google.com/p/chromium/issues/detail?id=475270
allow isolated_app_all self:process ptrace;
# Inherit FDs from the app_zygote.
allow isolated_app_all app_zygote:fd use;
# Notify app_zygote of child death.
allow isolated_app_all app_zygote:process sigchld;
# Inherit logd write socket.
allow isolated_app_all app_zygote:unix_dgram_socket write;
# TODO (b/63631799) fix this access
# suppress denials to /data/local/tmp
dontaudit isolated_app_all shell_data_file:dir search;
# Allow to read (but not open) staged apks.
allow isolated_app_all { apk_tmp_file apk_private_tmp_file }:file { read getattr };
#####
##### Neverallow
#####
# Isolated apps should not directly open app data files themselves.
neverallow isolated_app_all app_data_file_type:file open;
# Only allow appending to /data/anr/traces.txt (b/27853304, b/18340553)
# TODO: are there situations where isolated_apps write to this file?
# TODO: should we tighten these restrictions further?
neverallow isolated_app_all anr_data_file:file ~{ open append };
neverallow isolated_app_all anr_data_file:dir ~search;
# Isolated apps must not be permitted to use HwBinder
neverallow { isolated_app_all -isolated_compute_app } hwbinder_device:chr_file *;
neverallow { isolated_app_all -isolated_compute_app } *:hwservice_manager *;
# Isolated apps must not be permitted to use VndBinder
neverallow isolated_app_all vndbinder_device:chr_file *;
# Isolated apps must not be permitted to perform actions on Binder and VndBinder service_manager
# except the find actions for services allowlisted below.
neverallow { isolated_app_all -isolated_compute_app } *:service_manager ~find;
# b/17487348
# Isolated apps can only access three services,
# activity_service, display_service, webviewupdate_service.
neverallow { isolated_app_all -isolated_compute_app } {
service_manager_type
-activity_service
-display_service
-webviewupdate_service
}:service_manager find;
# Isolated apps shouldn't be able to access the driver directly.
neverallow isolated_app_all gpu_device:chr_file { { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } execute };
# Do not allow isolated_apps access to /cache
neverallow isolated_app_all cache_file:dir ~{ { open getattr read search ioctl lock watch watch_reads } };
neverallow isolated_app_all cache_file:file ~{ read getattr };
# Do not allow isolated_app_all to access external storage, except for files passed
# via file descriptors (b/32896414).
neverallow isolated_app_all { storage_file mnt_user_file sdcard_type fuse }:dir ~getattr;
neverallow isolated_app_all { storage_file mnt_user_file }:{ { chr_file blk_file } { file lnk_file sock_file fifo_file } } *;
neverallow isolated_app_all { sdcard_type fuse }:{ { chr_file blk_file } lnk_file sock_file fifo_file } *;
neverallow isolated_app_all { sdcard_type fuse }:file ~{ read write append getattr lock map };
# Do not allow USB access
neverallow isolated_app_all { usb_device usbaccessory_device }:chr_file *;
# Restrict the webview_zygote control socket.
neverallow isolated_app_all webview_zygote:sock_file write;
# Limit the /sys files which isolated_app_all can access. This is important
# for controlling isolated_app_all attack surface.
# TODO (b/266555480): The permission should be guarded by compliance test.
# Remove the negation for member domains when refactorization is done.
neverallow { isolated_app_all -isolated_compute_app } {
sysfs_type
-sysfs_devices_system_cpu
-sysfs_transparent_hugepage
-sysfs_usb # TODO: check with audio team if needed for isolated_apps (b/28417852)
-sysfs_fs_fuse_features
-sysfs_fs_incfs_features
}:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# No creation of sockets families other than AF_UNIX sockets.
# List taken from system/sepolicy/public/global_macros - socket_class_set
# excluding unix_stream_socket and unix_dgram_socket.
# Many of these are socket families which have never and will never
# be compiled into the Android kernel.
neverallow isolated_app_all { self ephemeral_app priv_app sdk_sandbox_all untrusted_app_all }:{
socket tcp_socket udp_socket rawip_socket netlink_socket packet_socket
key_socket appletalk_socket netlink_route_socket
netlink_tcpdiag_socket netlink_nflog_socket netlink_xfrm_socket
netlink_selinux_socket netlink_audit_socket netlink_dnrt_socket
netlink_kobject_uevent_socket tun_socket netlink_iscsi_socket
netlink_fib_lookup_socket netlink_connector_socket netlink_netfilter_socket
netlink_generic_socket netlink_scsitransport_socket netlink_rdma_socket
netlink_crypto_socket sctp_socket icmp_socket ax25_socket ipx_socket
netrom_socket atmpvc_socket x25_socket rose_socket decnet_socket atmsvc_socket
rds_socket irda_socket pppox_socket llc_socket can_socket tipc_socket
bluetooth_socket iucv_socket rxrpc_socket isdn_socket phonet_socket
ieee802154_socket caif_socket alg_socket nfc_socket vsock_socket kcm_socket
qipcrtr_socket smc_socket xdp_socket
} create;
#line 1 "system/sepolicy/private/isolated_compute_app.te"
###
### isolated_compute_apps.
###
### This file defines the rules for isolated apps that requires the permission
### to gather data with service manager and require computational resources to
### improve the performance to process data under a sandbox. This
### isolated_compute_app restricts data egress to protect the privacy.
###
### TODO(b/266923392): Clean rules for isolated_compute_app characteristics
###
typeattribute isolated_compute_app coredomain;
#line 14
typeattribute isolated_compute_app appdomain;
#line 14
# Label tmpfs objects for all apps.
#line 14
type_transition isolated_compute_app tmpfs:file appdomain_tmpfs;
#line 14
#line 14
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 14
type isolated_compute_app_userfaultfd;
#line 14
type_transition isolated_compute_app isolated_compute_app:anon_inode isolated_compute_app_userfaultfd "[userfaultfd]";
#line 14
# Allow domain to create/use userfaultfd anon_inode.
#line 14
allow isolated_compute_app isolated_compute_app_userfaultfd:anon_inode { create ioctl read };
#line 14
# Suppress errors generate during bugreport
#line 14
dontaudit su isolated_compute_app_userfaultfd:anon_inode *;
#line 14
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 14
neverallow { domain -isolated_compute_app } isolated_compute_app_userfaultfd:anon_inode *;
#line 14
#line 14
allow isolated_compute_app appdomain_tmpfs:file { execute getattr map read write };
#line 14
neverallow { isolated_compute_app -runas_app -shell -simpleperf } { domain -isolated_compute_app }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 14
neverallow { appdomain -runas_app -shell -simpleperf -isolated_compute_app } isolated_compute_app:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 14
# The Android security model guarantees the confidentiality and integrity
#line 14
# of application data and execution state. Ptrace bypasses those
#line 14
# confidentiality guarantees. Disallow ptrace access from system components to
#line 14
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 14
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 14
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 14
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 14
# live lock conditions.
#line 14
neverallow { domain -isolated_compute_app -crash_dump -runas_app -simpleperf } isolated_compute_app:process ptrace;
#line 14
#line 15
typeattribute isolated_compute_app isolated_app_all;
#line 15
allow isolated_compute_app isolated_compute_allowed_service:service_manager find;
allow isolated_compute_app isolated_compute_allowed_device:chr_file { read write ioctl map };
# Enable access to hardware services for camera functionalilites
#line 21
typeattribute isolated_compute_app halclientdomain;
#line 21
typeattribute isolated_compute_app hal_allocator_client;
#line 21
#line 21
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 21
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 21
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 21
#line 21
typeattribute isolated_compute_app hal_allocator;
#line 21
# Find passthrough HAL implementations
#line 21
allow hal_allocator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 21
allow hal_allocator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 21
allow hal_allocator vendor_file:file { read open getattr execute map };
#line 21
#line 21
#line 22
# Call the hwservicemanager and transfer references to it.
#line 22
allow isolated_compute_app hwservicemanager:binder { call transfer };
#line 22
# Allow hwservicemanager to send out callbacks
#line 22
allow hwservicemanager isolated_compute_app:binder { call transfer };
#line 22
# hwservicemanager performs getpidcon on clients.
#line 22
allow hwservicemanager isolated_compute_app:dir search;
#line 22
allow hwservicemanager isolated_compute_app:file { read open map };
#line 22
allow hwservicemanager isolated_compute_app:process getattr;
#line 22
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 22
# all domains in domain.te.
#line 22
#line 24
typeattribute isolated_compute_app halclientdomain;
#line 24
typeattribute isolated_compute_app hal_codec2_client;
#line 24
#line 24
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 24
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 24
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 24
#line 24
typeattribute isolated_compute_app hal_codec2;
#line 24
# Find passthrough HAL implementations
#line 24
allow hal_codec2 system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 24
allow hal_codec2 vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 24
allow hal_codec2 vendor_file:file { read open getattr execute map };
#line 24
#line 24
allow isolated_compute_app dmabuf_system_heap_device:chr_file { getattr open read ioctl lock map watch watch_reads };
# Allow access to network sockets received over IPC. New socket creation is not
# permitted.
allow isolated_compute_app { ephemeral_app priv_app untrusted_app_all }:{ tcp_socket udp_socket } { { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# Allow access to the toybox: b/275024392
allow isolated_compute_app toolbox_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
#####
##### Neverallow
#####
# Do not allow isolated_compute_app to access hardware service except for the
# ones necessary for camera service.
# TODO (b/266555480): The permission should be guarded by compliance test.
# Remove the negation for member domains when refactorization is done.
# neverallow isolated_compute_app {
# hwservice_manager_type
# -hal_graphics_allocator_hwservice
# -hal_graphics_mapper_hwservice
# -hidl_allocator_hwservice
# -hidl_manager_hwservice
# -hidl_memory_hwservice
# }:hwservice_manager *;
#line 1 "system/sepolicy/private/iw.te"
type iw, domain, coredomain;
type iw_exec, system_file_type, exec_type, file_type;
#line 4
#line 4
# Allow the necessary permissions.
#line 4
#line 4
# Old domain may exec the file and transition to the new domain.
#line 4
allow init iw_exec:file { getattr open read execute map };
#line 4
allow init iw:process transition;
#line 4
# New domain is entered by executing the file.
#line 4
allow iw iw_exec:file { entrypoint open read execute getattr map };
#line 4
# New domain can send SIGCHLD to its caller.
#line 4
#line 4
# Enable AT_SECURE, i.e. libc secure mode.
#line 4
dontaudit init iw:process noatsecure;
#line 4
# XXX dontaudit candidate but requires further study.
#line 4
allow init iw:process { siginh rlimitinh };
#line 4
#line 4
# Make the transition occur by default.
#line 4
type_transition init iw_exec:process iw;
#line 4
#line 4
#line 1 "system/sepolicy/private/kernel.te"
typeattribute kernel coredomain;
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow kernel init_exec:file { getattr open read execute map };
#line 3
allow kernel init:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow init init_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
allow init kernel:process sigchld;
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit kernel init:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow kernel init:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition kernel init_exec:process init;
#line 3
#line 4
# Allow the necessary permissions.
#line 4
#line 4
# Old domain may exec the file and transition to the new domain.
#line 4
allow kernel snapuserd_exec:file { getattr open read execute map };
#line 4
allow kernel snapuserd:process transition;
#line 4
# New domain is entered by executing the file.
#line 4
allow snapuserd snapuserd_exec:file { entrypoint open read execute getattr map };
#line 4
# New domain can send SIGCHLD to its caller.
#line 4
allow snapuserd kernel:process sigchld;
#line 4
# Enable AT_SECURE, i.e. libc secure mode.
#line 4
dontaudit kernel snapuserd:process noatsecure;
#line 4
# XXX dontaudit candidate but requires further study.
#line 4
allow kernel snapuserd:process { siginh rlimitinh };
#line 4
#line 4
# Make the transition occur by default.
#line 4
type_transition kernel snapuserd_exec:process snapuserd;
#line 4
# Allow the kernel to read otapreopt_chroot's file descriptors and files under
# /postinstall, as it uses apexd logic to mount APEX packages in /postinstall/apex.
allow kernel otapreopt_chroot:fd use;
allow kernel postinstall_file:file read;
# The following sections are for the transition period during a Virtual A/B
# OTA. Once sepolicy is loaded, snapuserd must be re-launched in the correct
# context, and with properly labelled devices. This must be done before
# enabling enforcement, eg, in permissive mode while still in the kernel
# context.
allow kernel tmpfs:blk_file { getattr relabelfrom };
allow kernel tmpfs:chr_file { getattr relabelfrom };
allow kernel tmpfs:lnk_file { getattr relabelfrom };
allow kernel tmpfs:dir { open read relabelfrom };
allow kernel block_device:blk_file relabelto;
allow kernel block_device:lnk_file relabelto;
allow kernel dm_device:chr_file relabelto;
allow kernel dm_device:blk_file relabelto;
allow kernel dm_user_device:dir { read open search relabelto };
allow kernel dm_user_device:chr_file relabelto;
allow kernel kmsg_device:chr_file relabelto;
allow kernel null_device:chr_file relabelto;
allow kernel random_device:chr_file relabelto;
allow kernel snapuserd_exec:file relabelto;
allow kernel kmsg_device:chr_file write;
allow kernel gsid:fd use;
dontaudit kernel metadata_file:dir search;
dontaudit kernel ota_metadata_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
dontaudit kernel sysfs:dir { open getattr read search ioctl lock watch watch_reads };
dontaudit kernel sysfs:file { open read write };
dontaudit kernel sysfs:chr_file { open read write };
dontaudit kernel dm_device:chr_file ioctl;
dontaudit kernel self:capability { sys_admin setgid mknod };
dontaudit kernel dm_user_device:dir { write add_name };
dontaudit kernel dm_user_device:chr_file { create setattr };
dontaudit kernel tmpfs:lnk_file read;
dontaudit kernel tmpfs:blk_file { open read };
#line 1 "system/sepolicy/private/keystore.te"
typeattribute keystore coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init keystore_exec:file { getattr open read execute map };
#line 3
allow init keystore:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow keystore keystore_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init keystore:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init keystore:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init keystore_exec:process keystore;
#line 3
#line 3
# talk to keymaster
#line 6
typeattribute keystore halclientdomain;
#line 6
typeattribute keystore hal_keymaster_client;
#line 6
#line 6
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 6
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 6
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 6
#line 6
typeattribute keystore hal_keymaster;
#line 6
# Find passthrough HAL implementations
#line 6
allow hal_keymaster system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 6
allow hal_keymaster vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 6
allow hal_keymaster vendor_file:file { read open getattr execute map };
#line 6
#line 6
# talk to confirmationui
#line 9
typeattribute keystore halclientdomain;
#line 9
typeattribute keystore hal_confirmationui_client;
#line 9
#line 9
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 9
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 9
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 9
#line 9
typeattribute keystore hal_confirmationui;
#line 9
# Find passthrough HAL implementations
#line 9
allow hal_confirmationui system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 9
allow hal_confirmationui vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 9
allow hal_confirmationui vendor_file:file { read open getattr execute map };
#line 9
#line 9
# talk to keymint
#line 12
typeattribute keystore halclientdomain;
#line 12
typeattribute keystore hal_keymint_client;
#line 12
#line 12
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 12
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 12
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 12
#line 12
typeattribute keystore hal_keymint;
#line 12
# Find passthrough HAL implementations
#line 12
allow hal_keymint system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 12
allow hal_keymint vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 12
allow hal_keymint vendor_file:file { read open getattr execute map };
#line 12
#line 12
# Ignore keystore attempts to access the AVF RKP Hal but keystore is not suppose to
# access it.
# TODO(b/312427637): Investigate the reason and fix the denial.
dontaudit keystore hal_remotelyprovisionedcomponent_avf_service:service_manager { find };
# This is used for the ConfirmationUI async callback.
allow keystore platform_app:binder call;
# Allow to check whether security logging is enabled.
#line 23
allow keystore device_logging_prop:file { getattr open read map };
#line 23
# Allow keystore to check if the system is rkp only.
#line 26
allow keystore remote_prov_prop:file { getattr open read map };
#line 26
# Allow keystore to check rkpd feature flags
#line 29
allow keystore device_config_remote_key_provisioning_native_prop:file { getattr open read map };
#line 29
# Allow keystore to write to statsd.
#line 32
allow keystore statsdw_socket:sock_file write;
#line 32
allow keystore statsd:unix_dgram_socket sendto;
#line 32
# Keystore need access to the keystore2_key_contexts file to load the keystore key backend.
allow keystore keystore2_key_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow keystore to listen to changing boot levels
#line 38
allow keystore keystore_listen_prop:file { getattr open read map };
#line 38
# Keystore needs to transfer binder references to vold so that it
# can call keystore methods on those references.
allow keystore vold:binder transfer;
# Only keystore can set keystore.crash_count system property. Since init is allowed to set any
# system property, an exception is added for init as well.
#line 46
#line 46
allow keystore property_socket:sock_file write;
#line 46
allow keystore init:unix_stream_socket connectto;
#line 46
#line 46
allow keystore keystore_crash_prop:property_service set;
#line 46
#line 46
allow keystore keystore_crash_prop:file { getattr open read map };
#line 46
#line 46
neverallow { domain -keystore -init } keystore_crash_prop:property_service set;
# keystore is using apex_info via libvintf
#line 50
allow keystore apex_mnt_dir:dir { open getattr read search ioctl lock watch watch_reads };
#line 50
allow keystore apex_info_file:file { getattr open read ioctl lock map watch watch_reads };
#line 50
#line 50
allow keystore vendor_apex_metadata_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 50
allow keystore vendor_apex_metadata_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 50
#line 50
#line 1 "system/sepolicy/private/keystore_keys.te"
# Specify keystore2_key namespaces in this file.
# Please keep the names in alphabetical order and comment each new entry.
# A keystore2_key namespace for the shell domain. Mainly used for native tests.
type shell_key, keystore2_key_type;
# A keystore2 namespace for the su domain. Mainly used for native tests.
type su_key, keystore2_key_type;
# A keystore2 namespace for vold. Vold need special permission to handle
# its own Keymint blobs.
type vold_key, keystore2_key_type;
# A keystore2 namespace for the on-device signing daemon.
type odsign_key, keystore2_key_type;
# A keystore2 namespace for LockSettingsService.
type locksettings_key, keystore2_key_type;
# A keystore2 namespace for resume on reboot.
type resume_on_reboot_key, keystore2_key_type;
#line 1 "system/sepolicy/private/linkerconfig.te"
type linkerconfig, domain, coredomain;
type linkerconfig_exec, exec_type, file_type, system_file_type;
#line 4
#line 4
# Allow the necessary permissions.
#line 4
#line 4
# Old domain may exec the file and transition to the new domain.
#line 4
allow init linkerconfig_exec:file { getattr open read execute map };
#line 4
allow init linkerconfig:process transition;
#line 4
# New domain is entered by executing the file.
#line 4
allow linkerconfig linkerconfig_exec:file { entrypoint open read execute getattr map };
#line 4
# New domain can send SIGCHLD to its caller.
#line 4
#line 4
# Enable AT_SECURE, i.e. libc secure mode.
#line 4
dontaudit init linkerconfig:process noatsecure;
#line 4
# XXX dontaudit candidate but requires further study.
#line 4
allow init linkerconfig:process { siginh rlimitinh };
#line 4
#line 4
# Make the transition occur by default.
#line 4
type_transition init linkerconfig_exec:process linkerconfig;
#line 4
#line 4
## Read and write linkerconfig subdirectory.
allow linkerconfig linkerconfig_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow linkerconfig linkerconfig_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow linkerconfig to log to the kernel.
allow linkerconfig kmsg_device:chr_file { open append write lock map };
# Allow linkerconfig to be invoked with logwrapper from init.
allow linkerconfig devpts:chr_file { getattr ioctl read write };
# Allow linkerconfig to scan for apex modules
allow linkerconfig apex_mnt_dir:dir { open getattr read search ioctl lock watch watch_reads };
# Allow linkerconfig to read apex-info-list.xml
allow linkerconfig apex_info_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow linkerconfig to read apex_manifest.pb file from vendor apex
#line 23
allow linkerconfig vendor_apex_metadata_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 23
allow linkerconfig vendor_apex_metadata_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 23
# Allow linkerconfig to be called in the otapreopt_chroot
allow linkerconfig otapreopt_chroot:fd use;
allow linkerconfig postinstall_apex_mnt_dir:dir { open getattr read search ioctl lock watch watch_reads };
allow linkerconfig postinstall_apex_mnt_dir:file { getattr open read ioctl lock map watch watch_reads };
neverallow { domain -init -linkerconfig -otapreopt_chroot } linkerconfig_exec:file { execute execute_no_trans };
#line 1 "system/sepolicy/private/llkd.te"
# llkd Live LocK Daemon
typeattribute llkd coredomain;
#line 4
#line 4
# Allow the necessary permissions.
#line 4
#line 4
# Old domain may exec the file and transition to the new domain.
#line 4
allow init llkd_exec:file { getattr open read execute map };
#line 4
allow init llkd:process transition;
#line 4
# New domain is entered by executing the file.
#line 4
allow llkd llkd_exec:file { entrypoint open read execute getattr map };
#line 4
# New domain can send SIGCHLD to its caller.
#line 4
#line 4
# Enable AT_SECURE, i.e. libc secure mode.
#line 4
dontaudit init llkd:process noatsecure;
#line 4
# XXX dontaudit candidate but requires further study.
#line 4
allow init llkd:process { siginh rlimitinh };
#line 4
#line 4
# Make the transition occur by default.
#line 4
type_transition init llkd_exec:process llkd;
#line 4
#line 4
#line 6
allow llkd llkd_prop:file { getattr open read map };
#line 6
allow llkd self:{ capability cap_userns } kill;
#line 12
# llkd optionally locks itself in memory, to prevent it from being
# swapped out and unable to discover a kernel in live-lock state.
allow llkd self:{ capability cap_userns } ipc_lock;
# Send kill signals to _anyone_ suffering from Live Lock
allow llkd domain:process sigkill;
# read stack to check for Live Lock
#line 33
# live lock watchdog process allowed to look through /proc/
allow llkd domain:dir { open getattr read search ioctl lock watch watch_reads };
allow llkd domain:file { getattr open read ioctl lock map watch watch_reads };
allow llkd domain:lnk_file read;
# Set /proc/sys/kernel/hung_task_*
allow llkd proc_hung_task:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# live lock watchdog process allowed to dump process trace and
# reboot because orderly shutdown may not be possible.
allow llkd proc_sysrq:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow llkd kmsg_device:chr_file { open append write lock map };
### neverallow rules
neverallow { domain -init } llkd:process { dyntransition transition };
neverallow { domain } llkd:process ptrace;
# never honor LD_PRELOAD
neverallow * llkd:process noatsecure;
#line 1 "system/sepolicy/private/lmkd.te"
typeattribute lmkd coredomain;
typeattribute lmkd bpfdomain;
#line 4
#line 4
# Allow the necessary permissions.
#line 4
#line 4
# Old domain may exec the file and transition to the new domain.
#line 4
allow init lmkd_exec:file { getattr open read execute map };
#line 4
allow init lmkd:process transition;
#line 4
# New domain is entered by executing the file.
#line 4
allow lmkd lmkd_exec:file { entrypoint open read execute getattr map };
#line 4
# New domain can send SIGCHLD to its caller.
#line 4
#line 4
# Enable AT_SECURE, i.e. libc secure mode.
#line 4
dontaudit init lmkd:process noatsecure;
#line 4
# XXX dontaudit candidate but requires further study.
#line 4
allow init lmkd:process { siginh rlimitinh };
#line 4
#line 4
# Make the transition occur by default.
#line 4
type_transition init lmkd_exec:process lmkd;
#line 4
#line 4
# Set sys.lmk.* properties.
#line 7
#line 7
allow lmkd property_socket:sock_file write;
#line 7
allow lmkd init:unix_stream_socket connectto;
#line 7
#line 7
allow lmkd system_lmk_prop:property_service set;
#line 7
#line 7
allow lmkd system_lmk_prop:file { getattr open read map };
#line 7
#line 7
# Set lmkd.* properties.
#line 10
#line 10
allow lmkd property_socket:sock_file write;
#line 10
allow lmkd init:unix_stream_socket connectto;
#line 10
#line 10
allow lmkd lmkd_prop:property_service set;
#line 10
#line 10
allow lmkd lmkd_prop:file { getattr open read map };
#line 10
#line 10
# Get persist.device_config.lmk_native.* properties.
#line 13
allow lmkd device_config_lmkd_native_prop:file { getattr open read map };
#line 13
allow lmkd fs_bpf:file read;
allow lmkd bpfloader:bpf map_read;
neverallow { domain -init -lmkd -vendor_init } lmkd_prop:property_service set;
#line 1 "system/sepolicy/private/logd.te"
typeattribute logd coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init logd_exec:file { getattr open read execute map };
#line 3
allow init logd:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow logd logd_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init logd:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init logd:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init logd_exec:process logd;
#line 3
#line 3
# Access device logging gating property
#line 6
allow logd device_logging_prop:file { getattr open read map };
#line 6
# logd is not allowed to write anywhere other than /data/misc/logd, and then
# only on userdebug or eng builds
neverallow logd {
file_type
-runtime_event_log_tags_file
# shell_data_file access is needed to dump bugreports
-shell_data_file
}:file { create write append };
# protect the event-log-tags file
neverallow {
domain
-appdomain # covered below
-bootstat
-dumpstate
-init
-logd
-servicemanager
-system_server
-surfaceflinger
-zygote
} runtime_event_log_tags_file:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow {
appdomain
-bluetooth
-platform_app
-priv_app
-radio
-shell
-system_app
} runtime_event_log_tags_file:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Only binder communication between logd and system_server is allowed
#line 46
# Call the servicemanager and transfer references to it.
#line 46
allow logd servicemanager:binder { call transfer };
#line 46
# Allow servicemanager to send out callbacks
#line 46
allow servicemanager logd:binder { call transfer };
#line 46
# servicemanager performs getpidcon on clients.
#line 46
allow servicemanager logd:dir search;
#line 46
allow servicemanager logd:file { read open };
#line 46
allow servicemanager logd:process getattr;
#line 46
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 46
# all domains in domain.te.
#line 46
#line 47
typeattribute logd binderservicedomain;
#line 47
#line 48
# Call the server domain and optionally transfer references to it.
#line 48
allow logd system_server:binder { call transfer };
#line 48
# Allow the serverdomain to transfer references to the client on the reply.
#line 48
allow system_server logd:binder transfer;
#line 48
# Receive and use open files from the server.
#line 48
allow logd system_server:fd use;
#line 48
#line 50
allow logd logd_service:service_manager { add find };
#line 50
neverallow { domain -logd } logd_service:service_manager add;
#line 50
#line 50
# On debug builds with root, allow binder services to use binder over TCP.
#line 50
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 50
#line 50
allow logd logcat_service:service_manager find;
#line 1 "system/sepolicy/private/logpersist.te"
typeattribute logpersist coredomain;
# android debug log storage in logpersist domains (eng and userdebug only)
#line 21
# logpersist is allowed to write to /data/misc/log for userdebug and eng builds
neverallow logpersist {
file_type
}:file { create write append };
neverallow { domain -init -dumpstate -incidentd } misc_logd_file:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow { domain -init } misc_logd_file:file { append create link unlink relabelfrom rename setattr write };
neverallow { domain -init } misc_logd_file:dir { add_name link relabelfrom remove_name rename reparent rmdir write };
#line 1 "system/sepolicy/private/lpdumpd.te"
type lpdumpd, domain, coredomain;
type lpdumpd_exec, system_file_type, exec_type, file_type;
#line 4
#line 4
# Allow the necessary permissions.
#line 4
#line 4
# Old domain may exec the file and transition to the new domain.
#line 4
allow init lpdumpd_exec:file { getattr open read execute map };
#line 4
allow init lpdumpd:process transition;
#line 4
# New domain is entered by executing the file.
#line 4
allow lpdumpd lpdumpd_exec:file { entrypoint open read execute getattr map };
#line 4
# New domain can send SIGCHLD to its caller.
#line 4
#line 4
# Enable AT_SECURE, i.e. libc secure mode.
#line 4
dontaudit init lpdumpd:process noatsecure;
#line 4
# XXX dontaudit candidate but requires further study.
#line 4
allow init lpdumpd:process { siginh rlimitinh };
#line 4
#line 4
# Make the transition occur by default.
#line 4
type_transition init lpdumpd_exec:process lpdumpd;
#line 4
#line 4
# Allow lpdumpd to register itself as a service.
#line 7
# Call the servicemanager and transfer references to it.
#line 7
allow lpdumpd servicemanager:binder { call transfer };
#line 7
# Allow servicemanager to send out callbacks
#line 7
allow servicemanager lpdumpd:binder { call transfer };
#line 7
# servicemanager performs getpidcon on clients.
#line 7
allow servicemanager lpdumpd:dir search;
#line 7
allow servicemanager lpdumpd:file { read open };
#line 7
allow servicemanager lpdumpd:process getattr;
#line 7
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 7
# all domains in domain.te.
#line 7
#line 8
allow lpdumpd lpdump_service:service_manager { add find };
#line 8
neverallow { domain -lpdumpd } lpdump_service:service_manager add;
#line 8
#line 8
# On debug builds with root, allow binder services to use binder over TCP.
#line 8
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 8
#line 8
# Allow lpdumpd to find the super partition block device.
allow lpdumpd block_device:dir { open getattr read search ioctl lock watch watch_reads };
# Allow lpdumpd to read super partition metadata.
allow lpdumpd super_block_device_type:blk_file { getattr open read ioctl lock map watch watch_reads };
# Allow lpdumpd to read fstab.
allow lpdumpd sysfs_dt_firmware_android:dir { open getattr read search ioctl lock watch watch_reads };
allow lpdumpd sysfs_dt_firmware_android:file { getattr open read ioctl lock map watch watch_reads };
#line 19
allow lpdumpd { metadata_file gsi_metadata_file_type }:dir search;
#line 19
allow lpdumpd gsi_public_metadata_file:file { getattr open read ioctl lock map watch watch_reads };
#line 19
allow lpdumpd { proc_bootconfig proc_cmdline }:file { getattr open read ioctl lock map watch watch_reads };
#line 19
# Allow to get A/B slot suffix from device tree or kernel cmdline.
#line 22
allow lpdumpd sysfs_dt_firmware_android:dir { open getattr read search ioctl lock watch watch_reads };
#line 22
allow lpdumpd sysfs_dt_firmware_android:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 22
;
allow lpdumpd proc_cmdline:file { getattr open read ioctl lock map watch watch_reads };
# Allow reading Virtual A/B status information.
#line 26
allow lpdumpd virtual_ab_prop:file { getattr open read map };
#line 26
allow lpdumpd metadata_file:dir search;
allow lpdumpd ota_metadata_file:dir { { open getattr read search ioctl lock watch watch_reads } lock };
allow lpdumpd ota_metadata_file:file { getattr open read ioctl lock map watch watch_reads };
### Neverallow rules
# Disallow other domains to get lpdump_service and call lpdumpd.
neverallow {
domain
-dumpstate
-lpdumpd
-shell
} lpdump_service:service_manager find;
neverallow {
domain
-dumpstate
-lpdumpd
-shell
-servicemanager
} lpdumpd:binder call;
#line 1 "system/sepolicy/private/mdnsd.te"
# mdns daemon
typeattribute mdnsd coredomain;
typeattribute mdnsd mlstrustedsubject;
type mdnsd_exec, system_file_type, exec_type, file_type;
#line 7
#line 7
# Allow the necessary permissions.
#line 7
#line 7
# Old domain may exec the file and transition to the new domain.
#line 7
allow init mdnsd_exec:file { getattr open read execute map };
#line 7
allow init mdnsd:process transition;
#line 7
# New domain is entered by executing the file.
#line 7
allow mdnsd mdnsd_exec:file { entrypoint open read execute getattr map };
#line 7
# New domain can send SIGCHLD to its caller.
#line 7
#line 7
# Enable AT_SECURE, i.e. libc secure mode.
#line 7
dontaudit init mdnsd:process noatsecure;
#line 7
# XXX dontaudit candidate but requires further study.
#line 7
allow init mdnsd:process { siginh rlimitinh };
#line 7
#line 7
# Make the transition occur by default.
#line 7
type_transition init mdnsd_exec:process mdnsd;
#line 7
#line 7
#line 9
typeattribute mdnsd netdomain;
#line 9
# Read from /proc/net
#line 12
allow mdnsd proc_net_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 12
allow mdnsd proc_net_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 12
#line 1 "system/sepolicy/private/mediadrmserver.te"
typeattribute mediadrmserver coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init mediadrmserver_exec:file { getattr open read execute map };
#line 3
allow init mediadrmserver:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow mediadrmserver mediadrmserver_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init mediadrmserver:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init mediadrmserver:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init mediadrmserver_exec:process mediadrmserver;
#line 3
#line 3
# allocate and use graphic buffers
#line 6
typeattribute mediadrmserver halclientdomain;
#line 6
typeattribute mediadrmserver hal_graphics_allocator_client;
#line 6
#line 6
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 6
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 6
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 6
#line 6
typeattribute mediadrmserver hal_graphics_allocator;
#line 6
# Find passthrough HAL implementations
#line 6
allow hal_graphics_allocator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 6
allow hal_graphics_allocator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 6
allow hal_graphics_allocator vendor_file:file { read open getattr execute map };
#line 6
#line 6
auditallow mediadrmserver hal_graphics_allocator_server:binder call;
#line 1 "system/sepolicy/private/mediaextractor.te"
typeattribute mediaextractor coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init mediaextractor_exec:file { getattr open read execute map };
#line 3
allow init mediaextractor:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow mediaextractor mediaextractor_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init mediaextractor:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init mediaextractor:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init mediaextractor_exec:process mediaextractor;
#line 3
#line 3
#line 4
type_transition mediaextractor tmpfs:file mediaextractor_tmpfs;
#line 4
allow mediaextractor mediaextractor_tmpfs:file { read write getattr map };
#line 4
allow mediaextractor appdomain_tmpfs:file { getattr map read write };
allow mediaextractor mediaserver_tmpfs:file { getattr map read write };
allow mediaextractor system_server_tmpfs:file { getattr map read write };
#line 9
allow mediaextractor device_config_media_native_prop:file { getattr open read map };
#line 9
#line 10
allow mediaextractor device_config_swcodec_native_prop:file { getattr open read map };
#line 10
#line 1 "system/sepolicy/private/mediametrics.te"
typeattribute mediametrics coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init mediametrics_exec:file { getattr open read execute map };
#line 3
allow init mediametrics:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow mediametrics mediametrics_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init mediametrics:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init mediametrics:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init mediametrics_exec:process mediametrics;
#line 3
#line 3
# Needed for stats callback registration to statsd.
allow mediametrics stats_service:service_manager find;
allow mediametrics statsmanager_service:service_manager find;
#line 8
# Call the server domain and optionally transfer references to it.
#line 8
allow mediametrics statsd:binder { call transfer };
#line 8
# Allow the serverdomain to transfer references to the client on the reply.
#line 8
allow statsd mediametrics:binder transfer;
#line 8
# Receive and use open files from the server.
#line 8
allow mediametrics statsd:fd use;
#line 8
#line 1 "system/sepolicy/private/mediaprovider.te"
###
### A domain for android.process.media, which contains both
### MediaProvider and DownloadProvider and associated services.
###
typeattribute mediaprovider coredomain;
#line 7
typeattribute mediaprovider appdomain;
#line 7
# Label tmpfs objects for all apps.
#line 7
type_transition mediaprovider tmpfs:file appdomain_tmpfs;
#line 7
#line 7
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 7
type mediaprovider_userfaultfd;
#line 7
type_transition mediaprovider mediaprovider:anon_inode mediaprovider_userfaultfd "[userfaultfd]";
#line 7
# Allow domain to create/use userfaultfd anon_inode.
#line 7
allow mediaprovider mediaprovider_userfaultfd:anon_inode { create ioctl read };
#line 7
# Suppress errors generate during bugreport
#line 7
dontaudit su mediaprovider_userfaultfd:anon_inode *;
#line 7
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 7
neverallow { domain -mediaprovider } mediaprovider_userfaultfd:anon_inode *;
#line 7
#line 7
allow mediaprovider appdomain_tmpfs:file { execute getattr map read write };
#line 7
neverallow { mediaprovider -runas_app -shell -simpleperf } { domain -mediaprovider }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 7
neverallow { appdomain -runas_app -shell -simpleperf -mediaprovider } mediaprovider:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 7
# The Android security model guarantees the confidentiality and integrity
#line 7
# of application data and execution state. Ptrace bypasses those
#line 7
# confidentiality guarantees. Disallow ptrace access from system components to
#line 7
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 7
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 7
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 7
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 7
# live lock conditions.
#line 7
neverallow { domain -mediaprovider -crash_dump -runas_app -simpleperf } mediaprovider:process ptrace;
#line 7
# DownloadProvider accesses the network.
#line 10
typeattribute mediaprovider netdomain;
#line 10
# DownloadProvider uses /cache.
allow mediaprovider cache_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow mediaprovider cache_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# /cache is a symlink to /data/cache on some devices. Allow reading the link.
allow mediaprovider cache_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
# mediaprovider searches through /cache looking for orphans
# Ignore denials to /cache/recovery and /cache/backup.
dontaudit mediaprovider cache_private_backup_file:dir getattr;
dontaudit mediaprovider cache_recovery_file:dir getattr;
# Access external sdcards through /mnt/media_rw
allow mediaprovider { mnt_media_rw_file }:dir search;
allow mediaprovider app_api_service:service_manager find;
allow mediaprovider audioserver_service:service_manager find;
allow mediaprovider cameraserver_service:service_manager find;
allow mediaprovider drmserver_service:service_manager find;
allow mediaprovider mediaextractor_service:service_manager find;
allow mediaprovider mediaserver_service:service_manager find;
# Allow MediaProvider to read/write cached ringtones (opened by system).
allow mediaprovider ringtone_file:file { getattr read write };
# MtpServer uses /dev/mtp_usb
allow mediaprovider mtp_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# MtpServer uses /dev/usb-ffs/mtp
allow mediaprovider functionfs:dir search;
allow mediaprovider functionfs:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allowxperm mediaprovider functionfs:file ioctl 0x80096782;
allowxperm mediaprovider functionfs:file ioctl 0x000067e7;
# MtpServer sets sys.usb.ffs.mtp.ready
#line 45
allow mediaprovider ffs_config_prop:file { getattr open read map };
#line 45
#line 46
#line 46
allow mediaprovider property_socket:sock_file write;
#line 46
allow mediaprovider init:unix_stream_socket connectto;
#line 46
#line 46
allow mediaprovider ffs_control_prop:property_service set;
#line 46
#line 46
allow mediaprovider ffs_control_prop:file { getattr open read map };
#line 46
#line 46
# DownloadManager may retrieve DRM status
#line 49
allow mediaprovider drm_service_config_prop:file { getattr open read map };
#line 49
#line 1 "system/sepolicy/private/mediaprovider_app.te"
###
### A domain for further sandboxing the MediaProvider mainline module.
###
type mediaprovider_app, domain, coredomain, bpfdomain;
#line 6
typeattribute mediaprovider_app appdomain;
#line 6
# Label tmpfs objects for all apps.
#line 6
type_transition mediaprovider_app tmpfs:file appdomain_tmpfs;
#line 6
#line 6
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 6
type mediaprovider_app_userfaultfd;
#line 6
type_transition mediaprovider_app mediaprovider_app:anon_inode mediaprovider_app_userfaultfd "[userfaultfd]";
#line 6
# Allow domain to create/use userfaultfd anon_inode.
#line 6
allow mediaprovider_app mediaprovider_app_userfaultfd:anon_inode { create ioctl read };
#line 6
# Suppress errors generate during bugreport
#line 6
dontaudit su mediaprovider_app_userfaultfd:anon_inode *;
#line 6
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 6
neverallow { domain -mediaprovider_app } mediaprovider_app_userfaultfd:anon_inode *;
#line 6
#line 6
allow mediaprovider_app appdomain_tmpfs:file { execute getattr map read write };
#line 6
neverallow { mediaprovider_app -runas_app -shell -simpleperf } { domain -mediaprovider_app }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 6
neverallow { appdomain -runas_app -shell -simpleperf -mediaprovider_app } mediaprovider_app:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 6
# The Android security model guarantees the confidentiality and integrity
#line 6
# of application data and execution state. Ptrace bypasses those
#line 6
# confidentiality guarantees. Disallow ptrace access from system components to
#line 6
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 6
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 6
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 6
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 6
# live lock conditions.
#line 6
neverallow { domain -mediaprovider_app -crash_dump -runas_app -simpleperf } mediaprovider_app:process ptrace;
#line 6
# Access to /mnt/pass_through.
#line 9
allow mediaprovider_app mnt_pass_through_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 9
allow mediaprovider_app mnt_pass_through_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 9
# Allow MediaProvider to host a FUSE daemon for external storage
allow mediaprovider_app fuse_device:chr_file { read write ioctl getattr };
# Allow MediaProvider to access fuseblk devices for external storage.
allow mediaprovider_app fuseblk:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow mediaprovider_app fuseblk:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow MediaProvider to read/write media_rw_data_file files and dirs
allow mediaprovider_app media_userdir_file:dir { open getattr read search ioctl lock watch watch_reads };
allow mediaprovider_app media_rw_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow mediaprovider_app media_rw_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
# Talk to the DRM service
allow mediaprovider_app drmserver_service:service_manager find;
# Talk to the MediaServer service
allow mediaprovider_app mediaserver_service:service_manager find;
# Talk to the AudioServer service
allow mediaprovider_app audioserver_service:service_manager find;
# Talk to the MediaCodec APIs that log media metrics
allow mediaprovider_app mediametrics_service:service_manager find;
# Talk to regular app services
allow mediaprovider_app app_api_service:service_manager find;
# Talk to the GPU service
#line 39
# Call the server domain and optionally transfer references to it.
#line 39
allow mediaprovider_app gpuservice:binder { call transfer };
#line 39
# Allow the serverdomain to transfer references to the client on the reply.
#line 39
allow gpuservice mediaprovider_app:binder transfer;
#line 39
# Receive and use open files from the server.
#line 39
allow mediaprovider_app gpuservice:fd use;
#line 39
# Talk to statsd
allow mediaprovider_app statsmanager_service:service_manager find;
#line 43
# Call the server domain and optionally transfer references to it.
#line 43
allow mediaprovider_app statsd:binder { call transfer };
#line 43
# Allow the serverdomain to transfer references to the client on the reply.
#line 43
allow statsd mediaprovider_app:binder transfer;
#line 43
# Receive and use open files from the server.
#line 43
allow mediaprovider_app statsd:fd use;
#line 43
# read pipe-max-size configuration
allow mediaprovider_app proc_pipe_conf:file { getattr open read ioctl lock map watch watch_reads };
# Allow MediaProvider to set extended attributes (such as quota project ID)
# on media files.
allowxperm mediaprovider_app media_rw_data_file:{ dir file } ioctl {
0x801c581f
0x401c5820
0x80086601
0x40086602
};
# Access external sdcards through /mnt/media_rw
allow mediaprovider_app { mnt_media_rw_file }:dir search;
allow mediaprovider_app proc_filesystems:file { getattr open read ioctl lock map watch watch_reads };
#Allow MediaProvider to see if sdcardfs is in use
#line 63
allow mediaprovider_app storage_config_prop:file { getattr open read map };
#line 63
#line 65
allow mediaprovider_app drm_service_config_prop:file { getattr open read map };
#line 65
allow mediaprovider_app gpu_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow mediaprovider_app gpu_device:dir { open getattr read search ioctl lock watch watch_reads };
dontaudit mediaprovider_app sysfs_vendor_sched:dir search;
dontaudit mediaprovider_app sysfs_vendor_sched:file { open append write lock map };
# bpfprog access for FUSE BPF
allow mediaprovider_app fs_bpf:file read;
allow mediaprovider_app bpfloader:bpf { map_read map_write prog_run };
# boot animations on oem are stored with specific label
allow mediaprovider_app bootanim_oem_file:file { getattr open read ioctl lock map watch watch_reads };
#line 1 "system/sepolicy/private/mediaserver.te"
typeattribute mediaserver coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init mediaserver_exec:file { getattr open read execute map };
#line 3
allow init mediaserver:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow mediaserver mediaserver_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init mediaserver:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init mediaserver:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init mediaserver_exec:process mediaserver;
#line 3
#line 3
#line 4
type_transition mediaserver tmpfs:file mediaserver_tmpfs;
#line 4
allow mediaserver mediaserver_tmpfs:file { read write getattr map };
#line 4
allow mediaserver appdomain_tmpfs:file { getattr map read write };
# allocate and use graphic buffers
#line 8
typeattribute mediaserver halclientdomain;
#line 8
typeattribute mediaserver hal_graphics_allocator_client;
#line 8
#line 8
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 8
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 8
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 8
#line 8
typeattribute mediaserver hal_graphics_allocator;
#line 8
# Find passthrough HAL implementations
#line 8
allow hal_graphics_allocator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 8
allow hal_graphics_allocator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 8
allow hal_graphics_allocator vendor_file:file { read open getattr execute map };
#line 8
#line 8
#line 9
typeattribute mediaserver halclientdomain;
#line 9
typeattribute mediaserver hal_configstore_client;
#line 9
#line 9
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 9
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 9
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 9
#line 9
typeattribute mediaserver hal_configstore;
#line 9
# Find passthrough HAL implementations
#line 9
allow hal_configstore system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 9
allow hal_configstore vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 9
allow hal_configstore vendor_file:file { read open getattr execute map };
#line 9
#line 9
#line 10
typeattribute mediaserver halclientdomain;
#line 10
typeattribute mediaserver hal_drm_client;
#line 10
#line 10
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 10
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 10
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 10
#line 10
typeattribute mediaserver hal_drm;
#line 10
# Find passthrough HAL implementations
#line 10
allow hal_drm system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 10
allow hal_drm vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 10
allow hal_drm vendor_file:file { read open getattr execute map };
#line 10
#line 10
#line 11
typeattribute mediaserver halclientdomain;
#line 11
typeattribute mediaserver hal_omx_client;
#line 11
#line 11
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 11
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 11
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 11
#line 11
typeattribute mediaserver hal_omx;
#line 11
# Find passthrough HAL implementations
#line 11
allow hal_omx system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 11
allow hal_omx vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 11
allow hal_omx vendor_file:file { read open getattr execute map };
#line 11
#line 11
#line 12
typeattribute mediaserver halclientdomain;
#line 12
typeattribute mediaserver hal_codec2_client;
#line 12
#line 12
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 12
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 12
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 12
#line 12
typeattribute mediaserver hal_codec2;
#line 12
# Find passthrough HAL implementations
#line 12
allow hal_codec2 system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 12
allow hal_codec2 vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 12
allow hal_codec2 vendor_file:file { read open getattr execute map };
#line 12
#line 12
#line 14
#line 14
allow mediaserver property_socket:sock_file write;
#line 14
allow mediaserver init:unix_stream_socket connectto;
#line 14
#line 14
allow mediaserver audio_prop:property_service set;
#line 14
#line 14
allow mediaserver audio_prop:file { getattr open read map };
#line 14
#line 14
#line 16
allow mediaserver drm_service_config_prop:file { getattr open read map };
#line 16
#line 17
allow mediaserver media_config_prop:file { getattr open read map };
#line 17
# Allow MediaCodec running on mediaserver to read media_native flags
#line 20
allow mediaserver device_config_media_native_prop:file { getattr open read map };
#line 20
# Allow mediaserver to start media.transcoding service via ctl.start.
#line 23
#line 23
allow mediaserver property_socket:sock_file write;
#line 23
allow mediaserver init:unix_stream_socket connectto;
#line 23
#line 23
allow mediaserver ctl_mediatranscoding_prop:property_service set;
#line 23
#line 23
allow mediaserver ctl_mediatranscoding_prop:file { getattr open read map };
#line 23
#line 23
;
# Allow mediaserver to read SDK sandbox data files
allow mediaserver sdk_sandbox_data_file:file { getattr read };
# Needed for stats callback registration to statsd.
allow mediaserver stats_service:service_manager find;
allow mediaserver statsmanager_service:service_manager find;
#line 31
# Call the server domain and optionally transfer references to it.
#line 31
allow mediaserver statsd:binder { call transfer };
#line 31
# Allow the serverdomain to transfer references to the client on the reply.
#line 31
allow statsd mediaserver:binder transfer;
#line 31
# Receive and use open files from the server.
#line 31
allow mediaserver statsd:fd use;
#line 31
# Allow mediaserver to communicate with Surface provided
# by virtual camera.
#line 35
# Call the server domain and optionally transfer references to it.
#line 35
allow mediaserver virtual_camera:binder { call transfer };
#line 35
# Allow the serverdomain to transfer references to the client on the reply.
#line 35
allow virtual_camera mediaserver:binder transfer;
#line 35
# Receive and use open files from the server.
#line 35
allow mediaserver virtual_camera:fd use;
#line 35
#line 1 "system/sepolicy/private/mediaswcodec.te"
typeattribute mediaswcodec coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init mediaswcodec_exec:file { getattr open read execute map };
#line 3
allow init mediaswcodec:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow mediaswcodec mediaswcodec_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init mediaswcodec:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init mediaswcodec:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init mediaswcodec_exec:process mediaswcodec;
#line 3
#line 3
#line 5
allow mediaswcodec device_config_media_native_prop:file { getattr open read map };
#line 5
#line 6
allow mediaswcodec device_config_swcodec_native_prop:file { getattr open read map };
#line 6
#line 1 "system/sepolicy/private/mediatranscoding.te"
# mediatranscoding - daemon for transcoding video and image.
type mediatranscoding_exec, system_file_type, exec_type, file_type;
type mediatranscoding_tmpfs, file_type;
typeattribute mediatranscoding coredomain;
#line 6
#line 6
# Allow the necessary permissions.
#line 6
#line 6
# Old domain may exec the file and transition to the new domain.
#line 6
allow init mediatranscoding_exec:file { getattr open read execute map };
#line 6
allow init mediatranscoding:process transition;
#line 6
# New domain is entered by executing the file.
#line 6
allow mediatranscoding mediatranscoding_exec:file { entrypoint open read execute getattr map };
#line 6
# New domain can send SIGCHLD to its caller.
#line 6
#line 6
# Enable AT_SECURE, i.e. libc secure mode.
#line 6
dontaudit init mediatranscoding:process noatsecure;
#line 6
# XXX dontaudit candidate but requires further study.
#line 6
allow init mediatranscoding:process { siginh rlimitinh };
#line 6
#line 6
# Make the transition occur by default.
#line 6
type_transition init mediatranscoding_exec:process mediatranscoding;
#line 6
#line 6
#line 7
type_transition mediatranscoding tmpfs:file mediatranscoding_tmpfs;
#line 7
allow mediatranscoding mediatranscoding_tmpfs:file { read write getattr map };
#line 7
allow mediatranscoding appdomain_tmpfs:file { getattr map read write };
#line 10
# Call the servicemanager and transfer references to it.
#line 10
allow mediatranscoding servicemanager:binder { call transfer };
#line 10
# Allow servicemanager to send out callbacks
#line 10
allow servicemanager mediatranscoding:binder { call transfer };
#line 10
# servicemanager performs getpidcon on clients.
#line 10
allow servicemanager mediatranscoding:dir search;
#line 10
allow servicemanager mediatranscoding:file { read open };
#line 10
allow servicemanager mediatranscoding:process getattr;
#line 10
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 10
# all domains in domain.te.
#line 10
#line 11
# Call the server domain and optionally transfer references to it.
#line 11
allow mediatranscoding binderservicedomain:binder { call transfer };
#line 11
# Allow the serverdomain to transfer references to the client on the reply.
#line 11
allow binderservicedomain mediatranscoding:binder transfer;
#line 11
# Receive and use open files from the server.
#line 11
allow mediatranscoding binderservicedomain:fd use;
#line 11
#line 12
# Call the server domain and optionally transfer references to it.
#line 12
allow mediatranscoding appdomain:binder { call transfer };
#line 12
# Allow the serverdomain to transfer references to the client on the reply.
#line 12
allow appdomain mediatranscoding:binder transfer;
#line 12
# Receive and use open files from the server.
#line 12
allow mediatranscoding appdomain:fd use;
#line 12
#line 13
typeattribute mediatranscoding binderservicedomain;
#line 13
#line 15
allow mediatranscoding mediatranscoding_service:service_manager { add find };
#line 15
neverallow { domain -mediatranscoding } mediatranscoding_service:service_manager add;
#line 15
#line 15
# On debug builds with root, allow binder services to use binder over TCP.
#line 15
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 15
#line 15
#line 17
typeattribute mediatranscoding halclientdomain;
#line 17
typeattribute mediatranscoding hal_graphics_allocator_client;
#line 17
#line 17
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 17
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 17
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 17
#line 17
typeattribute mediatranscoding hal_graphics_allocator;
#line 17
# Find passthrough HAL implementations
#line 17
allow hal_graphics_allocator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 17
allow hal_graphics_allocator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 17
allow hal_graphics_allocator vendor_file:file { read open getattr execute map };
#line 17
#line 17
#line 18
typeattribute mediatranscoding halclientdomain;
#line 18
typeattribute mediatranscoding hal_configstore_client;
#line 18
#line 18
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 18
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 18
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 18
#line 18
typeattribute mediatranscoding hal_configstore;
#line 18
# Find passthrough HAL implementations
#line 18
allow hal_configstore system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 18
allow hal_configstore vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 18
allow hal_configstore vendor_file:file { read open getattr execute map };
#line 18
#line 18
#line 19
typeattribute mediatranscoding halclientdomain;
#line 19
typeattribute mediatranscoding hal_omx_client;
#line 19
#line 19
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 19
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 19
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 19
#line 19
typeattribute mediatranscoding hal_omx;
#line 19
# Find passthrough HAL implementations
#line 19
allow hal_omx system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 19
allow hal_omx vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 19
allow hal_omx vendor_file:file { read open getattr execute map };
#line 19
#line 19
#line 20
typeattribute mediatranscoding halclientdomain;
#line 20
typeattribute mediatranscoding hal_codec2_client;
#line 20
#line 20
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 20
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 20
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 20
#line 20
typeattribute mediatranscoding hal_codec2;
#line 20
# Find passthrough HAL implementations
#line 20
allow hal_codec2 system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 20
allow hal_codec2 vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 20
allow hal_codec2 vendor_file:file { read open getattr execute map };
#line 20
#line 20
#line 21
typeattribute mediatranscoding halclientdomain;
#line 21
typeattribute mediatranscoding hal_allocator_client;
#line 21
#line 21
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 21
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 21
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 21
#line 21
typeattribute mediatranscoding hal_allocator;
#line 21
# Find passthrough HAL implementations
#line 21
allow hal_allocator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 21
allow hal_allocator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 21
allow hal_allocator vendor_file:file { read open getattr execute map };
#line 21
#line 21
allow mediatranscoding mediaserver_service:service_manager find;
allow mediatranscoding mediametrics_service:service_manager find;
allow mediatranscoding mediaextractor_service:service_manager find;
allow mediatranscoding package_native_service:service_manager find;
allow mediatranscoding thermal_service:service_manager find;
allow mediatranscoding system_server:fd use;
allow mediatranscoding activity_service:service_manager find;
# allow mediatranscoding service read/write permissions for file sources
allow mediatranscoding sdcardfs:file { getattr read write };
allow mediatranscoding media_rw_data_file:file { getattr read write };
allow mediatranscoding apk_data_file:file { getattr read };
allow mediatranscoding app_data_file:file { getattr read write };
allow mediatranscoding shell_data_file:file { getattr read write };
# allow mediatranscoding service write permission to statsd socket
#line 40
allow mediatranscoding statsdw_socket:sock_file write;
#line 40
allow mediatranscoding statsd:unix_dgram_socket sendto;
#line 40
# Allow mediatranscoding to access the DMA-BUF system heap
allow mediatranscoding dmabuf_system_heap_device:chr_file { getattr open read ioctl lock map watch watch_reads };
allow mediatranscoding gpu_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow mediatranscoding gpu_device:dir { open getattr read search ioctl lock watch watch_reads };
# Allow mediatranscoding service to access media-related system properties
#line 49
allow mediatranscoding media_config_prop:file { getattr open read map };
#line 49
# mediatranscoding should never execute any executable without a
# domain transition
neverallow mediatranscoding { file_type fs_type }:file execute_no_trans;
# The goal of the mediaserver split is to place media processing code into
# restrictive sandboxes with limited responsibilities and thus limited
# permissions. Example: Audioserver is only responsible for controlling audio
# hardware and processing audio content. Cameraserver does the same for camera
# hardware/content. Etc.
#
# Media processing code is inherently risky and thus should have limited
# permissions and be isolated from the rest of the system and network.
# Lengthier explanation here:
# https://android-developers.googleblog.com/2016/05/hardening-media-stack.html
neverallow mediatranscoding domain:{ udp_socket rawip_socket } *;
neverallow mediatranscoding { domain }:tcp_socket *;
#line 1 "system/sepolicy/private/mediatuner.te"
# mediatuner - mediatuner daemon
type mediatuner, domain;
type mediatuner_exec, system_file_type, exec_type, file_type;
typeattribute mediatuner coredomain;
#line 7
#line 7
# Allow the necessary permissions.
#line 7
#line 7
# Old domain may exec the file and transition to the new domain.
#line 7
allow init mediatuner_exec:file { getattr open read execute map };
#line 7
allow init mediatuner:process transition;
#line 7
# New domain is entered by executing the file.
#line 7
allow mediatuner mediatuner_exec:file { entrypoint open read execute getattr map };
#line 7
# New domain can send SIGCHLD to its caller.
#line 7
#line 7
# Enable AT_SECURE, i.e. libc secure mode.
#line 7
dontaudit init mediatuner:process noatsecure;
#line 7
# XXX dontaudit candidate but requires further study.
#line 7
allow init mediatuner:process { siginh rlimitinh };
#line 7
#line 7
# Make the transition occur by default.
#line 7
type_transition init mediatuner_exec:process mediatuner;
#line 7
#line 7
#line 8
typeattribute mediatuner halclientdomain;
#line 8
typeattribute mediatuner hal_tv_tuner_client;
#line 8
#line 8
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 8
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 8
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 8
#line 8
typeattribute mediatuner hal_tv_tuner;
#line 8
# Find passthrough HAL implementations
#line 8
allow hal_tv_tuner system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 8
allow hal_tv_tuner vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 8
allow hal_tv_tuner vendor_file:file { read open getattr execute map };
#line 8
#line 8
#line 10
# Call the servicemanager and transfer references to it.
#line 10
allow mediatuner servicemanager:binder { call transfer };
#line 10
# Allow servicemanager to send out callbacks
#line 10
allow servicemanager mediatuner:binder { call transfer };
#line 10
# servicemanager performs getpidcon on clients.
#line 10
allow servicemanager mediatuner:dir search;
#line 10
allow servicemanager mediatuner:file { read open };
#line 10
allow servicemanager mediatuner:process getattr;
#line 10
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 10
# all domains in domain.te.
#line 10
#line 11
# Call the server domain and optionally transfer references to it.
#line 11
allow mediatuner appdomain:binder { call transfer };
#line 11
# Allow the serverdomain to transfer references to the client on the reply.
#line 11
allow appdomain mediatuner:binder transfer;
#line 11
# Receive and use open files from the server.
#line 11
allow mediatuner appdomain:fd use;
#line 11
#line 12
typeattribute mediatuner binderservicedomain;
#line 12
#line 14
allow mediatuner mediatuner_service:service_manager { add find };
#line 14
neverallow { domain -mediatuner } mediatuner_service:service_manager add;
#line 14
#line 14
# On debug builds with root, allow binder services to use binder over TCP.
#line 14
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 14
#line 14
allow mediatuner system_server:fd use;
allow mediatuner tv_tuner_resource_mgr_service:service_manager find;
allow mediatuner package_native_service:service_manager find;
#line 18
# Call the server domain and optionally transfer references to it.
#line 18
allow mediatuner system_server:binder { call transfer };
#line 18
# Allow the serverdomain to transfer references to the client on the reply.
#line 18
allow system_server mediatuner:binder transfer;
#line 18
# Receive and use open files from the server.
#line 18
allow mediatuner system_server:fd use;
#line 18
# Read ro.tuner.lazyhal
#line 21
allow mediatuner tuner_config_prop:file { getattr open read map };
#line 21
# Read tuner.server.enable
#line 24
allow mediatuner tuner_server_ctl_prop:file { getattr open read map };
#line 24
###
### neverallow rules
###
# mediatuner should never execute any executable without a
# domain transition
neverallow mediatuner { file_type fs_type }:file execute_no_trans;
# do not allow privileged socket ioctl commands
neverallowxperm mediatuner domain:{ rawip_socket tcp_socket udp_socket } ioctl
#line 35
{
#line 35
# qualcomm rmnet ioctls
#line 35
0x00006900 0x00006902
#line 35
# socket ioctls
#line 35
0x0000890b 0x0000890c 0x0000890d 0x00008911 0x00008914 0x00008916
#line 35
0x00008918 0x0000891a 0x0000891c 0x0000891d 0x0000891e 0x0000891f
#line 35
0x00008920 0x00008922 0x00008923 0x00008924 0x00008925 0x00008926
#line 35
0x00008927 0x00008929 0x00008930 0x00008931 0x00008932
#line 35
0x00008934 0x00008935 0x00008936 0x00008937 0x00008939 0x00008940 0x00008941
#line 35
0x00008943 0x00008946 0x00008947 0x00008948 0x00008949 0x0000894a
#line 35
0x0000894b 0x00008953 0x00008954 0x00008955 0x00008960 0x00008961 0x00008962 0x00008970
#line 35
0x00008971 0x00008980 0x00008981 0x00008982 0x00008983 0x00008990
#line 35
0x00008991 0x00008992 0x00008993 0x00008994
#line 35
0x00008995 0x000089a0 0x000089a1 0x000089a2 0x000089a3 0x000089b0
#line 35
# device and protocol specific ioctls
#line 35
0x000089f0-0x000089ff
#line 35
0x000089e0-0x000089ef
#line 35
# Wireless extension ioctls
#line 35
0x00008b00 0x00008b02 0x00008b04 0x00008b06 0x00008b08 0x00008b0a
#line 35
0x00008b0c 0x00008b0e 0x00008b10 0x00008b14 0x00008b15 0x00008b16 0x00008b17
#line 35
0x00008b18 0x00008b19 0x00008b1a 0x00008b1b 0x00008b1c 0x00008b1d
#line 35
0x00008b20 0x00008b22 0x00008b24 0x00008b26 0x00008b28 0x00008b2a
#line 35
0x00008b2b 0x00008b2c 0x00008b30 0x00008b31 0x00008b32 0x00008b33
#line 35
0x00008b34 0x00008b35 0x00008b36
#line 35
# Dev private ioctl i.e. hardware specific ioctls
#line 35
0x00008be0-0x00008bff
#line 35
};
#line 1 "system/sepolicy/private/migrate_legacy_obb_data.te"
type migrate_legacy_obb_data, domain, coredomain;
type migrate_legacy_obb_data_exec, system_file_type, exec_type, file_type;
allow migrate_legacy_obb_data media_rw_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow migrate_legacy_obb_data media_rw_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow migrate_legacy_obb_data shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow migrate_legacy_obb_data toolbox_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow migrate_legacy_obb_data self:capability { chown dac_override dac_read_search fowner fsetid };
allow migrate_legacy_obb_data mnt_user_file:dir search;
allow migrate_legacy_obb_data mnt_user_file:lnk_file read;
allow migrate_legacy_obb_data storage_file:dir search;
allow migrate_legacy_obb_data storage_file:lnk_file read;
allow migrate_legacy_obb_data sdcard_type:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow migrate_legacy_obb_data sdcard_type:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# TODO: This should not be necessary. We don't deliberately hand over
# any open file descriptors to this domain, so anything that triggers this
# should be a candidate for O_CLOEXEC.
allow migrate_legacy_obb_data installd:fd use;
# This rule is required to let this process read /proc/{parent_pid}/mount.
# TODO: Why is this required ?
allow migrate_legacy_obb_data installd:file read;
#line 1 "system/sepolicy/private/misctrl.te"
# binary for generic misc partition management
type misctrl, domain, coredomain;
type misctrl_exec, system_file_type, exec_type, file_type;
#line 5
#line 5
# Allow the necessary permissions.
#line 5
#line 5
# Old domain may exec the file and transition to the new domain.
#line 5
allow init misctrl_exec:file { getattr open read execute map };
#line 5
allow init misctrl:process transition;
#line 5
# New domain is entered by executing the file.
#line 5
allow misctrl misctrl_exec:file { entrypoint open read execute getattr map };
#line 5
# New domain can send SIGCHLD to its caller.
#line 5
#line 5
# Enable AT_SECURE, i.e. libc secure mode.
#line 5
dontaudit init misctrl:process noatsecure;
#line 5
# XXX dontaudit candidate but requires further study.
#line 5
allow init misctrl:process { siginh rlimitinh };
#line 5
#line 5
# Make the transition occur by default.
#line 5
type_transition init misctrl_exec:process misctrl;
#line 5
#line 5
allow misctrl misc_block_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow misctrl block_device:dir { open getattr read search ioctl lock watch watch_reads };
#line 9
allow misctrl { metadata_file gsi_metadata_file_type }:dir search;
#line 9
allow misctrl gsi_public_metadata_file:file { getattr open read ioctl lock map watch watch_reads };
#line 9
allow misctrl { proc_bootconfig proc_cmdline }:file { getattr open read ioctl lock map watch watch_reads };
#line 9
#line 11
#line 11
allow misctrl property_socket:sock_file write;
#line 11
allow misctrl init:unix_stream_socket connectto;
#line 11
#line 11
allow misctrl misctrl_prop:property_service set;
#line 11
#line 11
allow misctrl misctrl_prop:file { getattr open read map };
#line 11
#line 11
# bootloader_message tries to find the fstab in the device config path first,
# but because we've already booted up we can use the ro.boot properties instead,
# so we can just ignore the SELinux denial.
dontaudit misctrl sysfs_dt_firmware_android:dir search;
dontaudit misctrl vendor_property_type:file read;
#line 1 "system/sepolicy/private/mlstrustedsubject.te"
# MLS override can't be used to access private app data.
# Apps should not normally be mlstrustedsubject, but if they must be
# they cannot use this to access app private data files; their own app
# data files must use a different label.
neverallow {
mlstrustedsubject
-artd # compile secondary dex files
-installd
} { app_data_file privapp_data_file }:file ~{ read write map getattr ioctl lock append };
neverallow {
mlstrustedsubject
-artd # compile secondary dex files
-installd
} { app_data_file privapp_data_file }:dir ~{ read getattr search };
neverallow {
mlstrustedsubject
-artd # compile secondary dex files
-installd
-system_server
-adbd
-runas
-zygote
} { app_data_file privapp_data_file }:dir { read getattr search };
#line 1 "system/sepolicy/private/mm_events.te"
type mm_events, domain, coredomain;
type mm_events_exec, system_file_type, exec_type, file_type;
#line 4
#line 4
# Allow the necessary permissions.
#line 4
#line 4
# Old domain may exec the file and transition to the new domain.
#line 4
allow init mm_events_exec:file { getattr open read execute map };
#line 4
allow init mm_events:process transition;
#line 4
# New domain is entered by executing the file.
#line 4
allow mm_events mm_events_exec:file { entrypoint open read execute getattr map };
#line 4
# New domain can send SIGCHLD to its caller.
#line 4
#line 4
# Enable AT_SECURE, i.e. libc secure mode.
#line 4
dontaudit init mm_events:process noatsecure;
#line 4
# XXX dontaudit candidate but requires further study.
#line 4
allow init mm_events:process { siginh rlimitinh };
#line 4
#line 4
# Make the transition occur by default.
#line 4
type_transition init mm_events_exec:process mm_events;
#line 4
#line 4
allow mm_events shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Allow running the sleep command to rate limit attempts
# to arm mm_events on failure.
allow mm_events toolbox_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow mm_events perfetto_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
#line 14
# Allow the necessary permissions.
#line 14
#line 14
# Old domain may exec the file and transition to the new domain.
#line 14
allow mm_events perfetto_exec:file { getattr open read execute map };
#line 14
allow mm_events perfetto:process transition;
#line 14
# New domain is entered by executing the file.
#line 14
allow perfetto perfetto_exec:file { entrypoint open read execute getattr map };
#line 14
# New domain can send SIGCHLD to its caller.
#line 14
allow perfetto mm_events:process sigchld;
#line 14
# Enable AT_SECURE, i.e. libc secure mode.
#line 14
dontaudit mm_events perfetto:process noatsecure;
#line 14
# XXX dontaudit candidate but requires further study.
#line 14
allow mm_events perfetto:process { siginh rlimitinh };
#line 14
#line 14
# Make the transition occur by default.
#line 14
type_transition mm_events perfetto_exec:process perfetto;
#line 14
#line 1 "system/sepolicy/private/modprobe.te"
typeattribute modprobe coredomain;
#line 1 "system/sepolicy/private/mtectrl.te"
# mtectrl is a tool to request MTE (Memory Tagging Extensions) from the bootloader.
type mtectrl, domain, coredomain;
type mtectrl_exec, system_file_type, exec_type, file_type;
#line 5
#line 5
# Allow the necessary permissions.
#line 5
#line 5
# Old domain may exec the file and transition to the new domain.
#line 5
allow init mtectrl_exec:file { getattr open read execute map };
#line 5
allow init mtectrl:process transition;
#line 5
# New domain is entered by executing the file.
#line 5
allow mtectrl mtectrl_exec:file { entrypoint open read execute getattr map };
#line 5
# New domain can send SIGCHLD to its caller.
#line 5
#line 5
# Enable AT_SECURE, i.e. libc secure mode.
#line 5
dontaudit init mtectrl:process noatsecure;
#line 5
# XXX dontaudit candidate but requires further study.
#line 5
allow init mtectrl:process { siginh rlimitinh };
#line 5
#line 5
# Make the transition occur by default.
#line 5
type_transition init mtectrl_exec:process mtectrl;
#line 5
#line 5
# to set the sys prop to match the bootloader message state.
#line 8
#line 8
allow mtectrl property_socket:sock_file write;
#line 8
allow mtectrl init:unix_stream_socket connectto;
#line 8
#line 8
allow mtectrl arm64_memtag_prop:property_service set;
#line 8
#line 8
allow mtectrl arm64_memtag_prop:file { getattr open read map };
#line 8
#line 8
# mtectrl communicates the request to the bootloader via the misc partition.
# needs to write to update the request in misc partition, and read to sync
# back to the property.
allow mtectrl misc_block_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow mtectrl block_device:dir { open getattr read search ioctl lock watch watch_reads };
#line 15
allow mtectrl { metadata_file gsi_metadata_file_type }:dir search;
#line 15
allow mtectrl gsi_public_metadata_file:file { getattr open read ioctl lock map watch watch_reads };
#line 15
allow mtectrl { proc_bootconfig proc_cmdline }:file { getattr open read ioctl lock map watch watch_reads };
#line 15
# bootloader_message tries to find the fstab in the device config path first,
# but because we've already booted up we can use the ro.boot properties instead,
# so we can just ignore the SELinux denial.
dontaudit mtectrl sysfs_dt_firmware_android:dir search;
dontaudit mtectrl vendor_property_type:file read;
#line 1 "system/sepolicy/private/net.te"
# Bind to ports.
allow {netdomain -ephemeral_app -sdk_sandbox_all} node_type:{ icmp_socket rawip_socket tcp_socket udp_socket } node_bind;
allow {netdomain -ephemeral_app -sdk_sandbox_all} port_type:udp_socket name_bind;
allow {netdomain -ephemeral_app -sdk_sandbox_all} port_type:tcp_socket name_bind;
# b/141455849 gate RTM_GETLINK with a new permission nlmsg_readpriv and block access from
# untrusted_apps.
# b/171572148 gate RTM_GETNEIGH{TBL} with a new permission nlmsg_getneigh and block access from
# untrusted_apps. Some untrusted apps (e.g. untrusted_app_25-30) are granted access elsewhere
# to avoid app-compat breakage.
allow {
netdomain
-ephemeral_app
-mediaprovider
-priv_app
-sdk_sandbox_all
-untrusted_app_all
} self:netlink_route_socket { bind nlmsg_readpriv nlmsg_getneigh };
#line 1 "system/sepolicy/private/netd.te"
typeattribute netd coredomain;
typeattribute netd bpfdomain;
#line 4
#line 4
# Allow the necessary permissions.
#line 4
#line 4
# Old domain may exec the file and transition to the new domain.
#line 4
allow init netd_exec:file { getattr open read execute map };
#line 4
allow init netd:process transition;
#line 4
# New domain is entered by executing the file.
#line 4
allow netd netd_exec:file { entrypoint open read execute getattr map };
#line 4
# New domain can send SIGCHLD to its caller.
#line 4
#line 4
# Enable AT_SECURE, i.e. libc secure mode.
#line 4
dontaudit init netd:process noatsecure;
#line 4
# XXX dontaudit candidate but requires further study.
#line 4
allow init netd:process { siginh rlimitinh };
#line 4
#line 4
# Make the transition occur by default.
#line 4
type_transition init netd_exec:process netd;
#line 4
#line 4
# Allow netd to spawn dnsmasq in it's own domain
#line 7
# Allow the necessary permissions.
#line 7
#line 7
# Old domain may exec the file and transition to the new domain.
#line 7
allow netd dnsmasq_exec:file { getattr open read execute map };
#line 7
allow netd dnsmasq:process transition;
#line 7
# New domain is entered by executing the file.
#line 7
allow dnsmasq dnsmasq_exec:file { entrypoint open read execute getattr map };
#line 7
# New domain can send SIGCHLD to its caller.
#line 7
allow dnsmasq netd:process sigchld;
#line 7
# Enable AT_SECURE, i.e. libc secure mode.
#line 7
dontaudit netd dnsmasq:process noatsecure;
#line 7
# XXX dontaudit candidate but requires further study.
#line 7
allow netd dnsmasq:process { siginh rlimitinh };
#line 7
#line 7
# Make the transition occur by default.
#line 7
type_transition netd dnsmasq_exec:process dnsmasq;
#line 7
allow netd { fs_bpf fs_bpf_netd_readonly fs_bpf_netd_shared fs_bpf_vendor }:dir search;
allow netd { fs_bpf fs_bpf_netd_readonly fs_bpf_netd_shared fs_bpf_vendor }:file { getattr read };
allow netd { fs_bpf fs_bpf_netd_shared }:file write;
# give netd permission to setup iptables rule with xt_bpf, attach program to cgroup, and read/write
# the map created by bpfloader
allow netd bpfloader:bpf { prog_run map_read map_write };
# in order to invoke side effect of close() on such a socket calling synchronize_rcu()
# TODO: Remove this permission when 4.9 kernel is deprecated.
# TODO: Remove this after we remove all bpf interactions from netd.
allow netd self:key_socket create;
#line 22
#line 22
allow netd property_socket:sock_file write;
#line 22
allow netd init:unix_stream_socket connectto;
#line 22
#line 22
allow netd ctl_mdnsd_prop:property_service set;
#line 22
#line 22
allow netd ctl_mdnsd_prop:file { getattr open read map };
#line 22
#line 22
#line 23
#line 23
allow netd property_socket:sock_file write;
#line 23
allow netd init:unix_stream_socket connectto;
#line 23
#line 23
allow netd netd_stable_secret_prop:property_service set;
#line 23
#line 23
allow netd netd_stable_secret_prop:file { getattr open read map };
#line 23
#line 23
#line 25
allow netd adbd_config_prop:file { getattr open read map };
#line 25
#line 26
allow netd hwservicemanager_prop:file { getattr open read map };
#line 26
#line 27
allow netd device_config_netd_native_prop:file { getattr open read map };
#line 27
# Allow netd to write to statsd.
#line 30
allow netd statsdw_socket:sock_file write;
#line 30
allow netd statsd:unix_dgram_socket sendto;
#line 30
# Allow netd to send callbacks to network_stack
#line 33
# Call the server domain and optionally transfer references to it.
#line 33
allow netd network_stack:binder { call transfer };
#line 33
# Allow the serverdomain to transfer references to the client on the reply.
#line 33
allow network_stack netd:binder transfer;
#line 33
# Receive and use open files from the server.
#line 33
allow netd network_stack:fd use;
#line 33
# Allow netd to send dump info to dumpstate
allow netd dumpstate:fd use;
allow netd dumpstate:fifo_file { getattr write };
# persist.netd.stable_secret contains RFC 7217 secret key which should never be
# leaked to other processes. Make sure it never leaks.
neverallow { domain -netd -init -dumpstate } netd_stable_secret_prop:file { getattr open read ioctl lock map watch watch_reads };
# We want to ensure that no other process ever tries tampering with persist.netd.stable_secret,
# the RFC 7217 secret key managed by netd. Doing so could compromise user privacy.
neverallow { domain -netd -init } netd_stable_secret_prop:property_service set;
#line 1 "system/sepolicy/private/netutils_wrapper.te"
typeattribute netutils_wrapper coredomain;
typeattribute netutils_wrapper bpfdomain;
#line 4
allow netutils_wrapper system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 4
allow netutils_wrapper system_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 4
;
# For netutils (ip, iptables, tc)
allow netutils_wrapper self:{ capability cap_userns } net_raw;
allow netutils_wrapper system_file:file { execute execute_no_trans };
allow netutils_wrapper proc_net_type:file { open read getattr };
allow netutils_wrapper self:rawip_socket { create { ioctl read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow netutils_wrapper self:udp_socket { create { ioctl read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow netutils_wrapper self:{ capability cap_userns } net_admin;
# ip utils need everything but ioctl
allow netutils_wrapper self:netlink_route_socket ~ioctl;
allow netutils_wrapper self:netlink_xfrm_socket ~ioctl;
# For netutils (ndc) to be able to talk to netd
allow netutils_wrapper netd_service:service_manager find;
allow netutils_wrapper dnsresolver_service:service_manager find;
allow netutils_wrapper mdns_service:service_manager find;
#line 22
# Call the servicemanager and transfer references to it.
#line 22
allow netutils_wrapper servicemanager:binder { call transfer };
#line 22
# Allow servicemanager to send out callbacks
#line 22
allow servicemanager netutils_wrapper:binder { call transfer };
#line 22
# servicemanager performs getpidcon on clients.
#line 22
allow servicemanager netutils_wrapper:dir search;
#line 22
allow servicemanager netutils_wrapper:file { read open };
#line 22
allow servicemanager netutils_wrapper:process getattr;
#line 22
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 22
# all domains in domain.te.
#line 22
;
#line 23
# Call the server domain and optionally transfer references to it.
#line 23
allow netutils_wrapper netd:binder { call transfer };
#line 23
# Allow the serverdomain to transfer references to the client on the reply.
#line 23
allow netd netutils_wrapper:binder transfer;
#line 23
# Receive and use open files from the server.
#line 23
allow netutils_wrapper netd:fd use;
#line 23
;
# For vendor code that update the iptables rules at runtime. They need to reload
# the whole chain including the xt_bpf rules. They need to access to the pinned
# program when reloading the rule.
allow netutils_wrapper { fs_bpf fs_bpf_netd_shared fs_bpf_vendor }:dir search;
allow netutils_wrapper { fs_bpf fs_bpf_netd_shared fs_bpf_vendor }:file { getattr read };
allow netutils_wrapper { fs_bpf }:file write;
allow netutils_wrapper bpfloader:bpf prog_run;
# For /data/misc/net access to ndc and ip
#line 34
allow netutils_wrapper net_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 34
allow netutils_wrapper net_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 34
#line 36
# Allow the necessary permissions.
#line 36
#line 36
# Old domain may exec the file and transition to the new domain.
#line 36
allow {
#line 36
domain
#line 36
-coredomain
#line 36
-appdomain
#line 36
} netutils_wrapper_exec:file { getattr open read execute map };
#line 36
allow {
#line 36
domain
#line 36
-coredomain
#line 36
-appdomain
#line 36
} netutils_wrapper:process transition;
#line 36
# New domain is entered by executing the file.
#line 36
allow netutils_wrapper netutils_wrapper_exec:file { entrypoint open read execute getattr map };
#line 36
# New domain can send SIGCHLD to its caller.
#line 36
allow netutils_wrapper {
#line 36
domain
#line 36
-coredomain
#line 36
-appdomain
#line 36
}:process sigchld;
#line 36
# Enable AT_SECURE, i.e. libc secure mode.
#line 36
dontaudit {
#line 36
domain
#line 36
-coredomain
#line 36
-appdomain
#line 36
} netutils_wrapper:process noatsecure;
#line 36
# XXX dontaudit candidate but requires further study.
#line 36
allow {
#line 36
domain
#line 36
-coredomain
#line 36
-appdomain
#line 36
} netutils_wrapper:process { siginh rlimitinh };
#line 36
#line 36
# Make the transition occur by default.
#line 36
type_transition {
#line 36
domain
#line 36
-coredomain
#line 36
-appdomain
#line 36
} netutils_wrapper_exec:process netutils_wrapper;
#line 40
# suppress spurious denials
dontaudit netutils_wrapper self:{ capability cap_userns } sys_resource;
dontaudit netutils_wrapper sysfs_type:file read;
# netutils wrapper may only use the following capabilities.
neverallow netutils_wrapper self:{ capability cap_userns } ~{ net_admin net_raw };
#line 1 "system/sepolicy/private/network_stack.te"
# Networking service app
typeattribute network_stack coredomain;
typeattribute network_stack mlstrustedsubject;
typeattribute network_stack bpfdomain;
#line 6
typeattribute network_stack appdomain;
#line 6
# Label tmpfs objects for all apps.
#line 6
type_transition network_stack tmpfs:file appdomain_tmpfs;
#line 6
#line 6
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 6
type network_stack_userfaultfd;
#line 6
type_transition network_stack network_stack:anon_inode network_stack_userfaultfd "[userfaultfd]";
#line 6
# Allow domain to create/use userfaultfd anon_inode.
#line 6
allow network_stack network_stack_userfaultfd:anon_inode { create ioctl read };
#line 6
# Suppress errors generate during bugreport
#line 6
dontaudit su network_stack_userfaultfd:anon_inode *;
#line 6
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 6
neverallow { domain -network_stack } network_stack_userfaultfd:anon_inode *;
#line 6
#line 6
allow network_stack appdomain_tmpfs:file { execute getattr map read write };
#line 6
neverallow { network_stack -runas_app -shell -simpleperf } { domain -network_stack }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 6
neverallow { appdomain -runas_app -shell -simpleperf -network_stack } network_stack:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 6
# The Android security model guarantees the confidentiality and integrity
#line 6
# of application data and execution state. Ptrace bypasses those
#line 6
# confidentiality guarantees. Disallow ptrace access from system components to
#line 6
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 6
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 6
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 6
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 6
# live lock conditions.
#line 6
neverallow { domain -network_stack -crash_dump -runas_app -simpleperf } network_stack:process ptrace;
#line 6
;
#line 7
typeattribute network_stack netdomain;
#line 7
;
allow network_stack self:{ capability cap_userns } {
net_admin
net_bind_service
net_broadcast
net_raw
};
allow network_stack self:{ capability2 cap2_userns } wake_alarm;
# Allow access to net_admin ioctl, DHCP server uses SIOCSARP
allowxperm network_stack self:udp_socket ioctl
#line 19
{
#line 19
# qualcomm rmnet ioctls
#line 19
0x00006900 0x00006902
#line 19
# socket ioctls
#line 19
0x0000890b 0x0000890c 0x0000890d 0x00008911 0x00008914 0x00008916
#line 19
0x00008918 0x0000891a 0x0000891c 0x0000891d 0x0000891e 0x0000891f
#line 19
0x00008920 0x00008922 0x00008923 0x00008924 0x00008925 0x00008926
#line 19
0x00008927 0x00008929 0x00008930 0x00008931 0x00008932
#line 19
0x00008934 0x00008935 0x00008936 0x00008937 0x00008939 0x00008940 0x00008941
#line 19
0x00008943 0x00008946 0x00008947 0x00008948 0x00008949 0x0000894a
#line 19
0x0000894b 0x00008953 0x00008954 0x00008955 0x00008960 0x00008961 0x00008962 0x00008970
#line 19
0x00008971 0x00008980 0x00008981 0x00008982 0x00008983 0x00008990
#line 19
0x00008991 0x00008992 0x00008993 0x00008994
#line 19
0x00008995 0x000089a0 0x000089a1 0x000089a2 0x000089a3 0x000089b0
#line 19
# device and protocol specific ioctls
#line 19
0x000089f0-0x000089ff
#line 19
0x000089e0-0x000089ef
#line 19
# Wireless extension ioctls
#line 19
0x00008b00 0x00008b02 0x00008b04 0x00008b06 0x00008b08 0x00008b0a
#line 19
0x00008b0c 0x00008b0e 0x00008b10 0x00008b14 0x00008b15 0x00008b16 0x00008b17
#line 19
0x00008b18 0x00008b19 0x00008b1a 0x00008b1b 0x00008b1c 0x00008b1d
#line 19
0x00008b20 0x00008b22 0x00008b24 0x00008b26 0x00008b28 0x00008b2a
#line 19
0x00008b2b 0x00008b2c 0x00008b30 0x00008b31 0x00008b32 0x00008b33
#line 19
0x00008b34 0x00008b35 0x00008b36
#line 19
# Dev private ioctl i.e. hardware specific ioctls
#line 19
0x00008be0-0x00008bff
#line 19
};
# The DhcpClient uses packet_sockets
allow network_stack self:packet_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# Monitor neighbors via netlink.
allow network_stack self:netlink_route_socket nlmsg_write;
# Use netlink uevent sockets.
allow network_stack self:netlink_kobject_uevent_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# give network_stack the same netlink permissions as netd
allow network_stack self:netlink_nflog_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow network_stack self:netlink_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow network_stack self:netlink_generic_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow network_stack app_api_service:service_manager find;
allow network_stack dnsresolver_service:service_manager find;
allow network_stack mdns_service:service_manager find;
allow network_stack netd_service:service_manager find;
allow network_stack network_watchlist_service:service_manager find;
allow network_stack radio_service:service_manager find;
allow network_stack system_config_service:service_manager find;
allow network_stack radio_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow network_stack radio_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
#line 45
# Call the server domain and optionally transfer references to it.
#line 45
allow network_stack netd:binder { call transfer };
#line 45
# Allow the serverdomain to transfer references to the client on the reply.
#line 45
allow netd network_stack:binder transfer;
#line 45
# Receive and use open files from the server.
#line 45
allow network_stack netd:fd use;
#line 45
;
# in order to invoke side effect of close() on such a socket calling synchronize_rcu()
allow network_stack self:key_socket create;
# Java's Os.close() in libcore/luni/src/main/java/libcore/io/BlockGuardOs.java;l=100
# calls if (fd.isSocket$()) if (isLingerSocket(fd)) ...
dontaudit network_stack self:key_socket getopt;
# Grant read permission of connectivity namespace system property prefix.
#line 54
allow network_stack device_config_connectivity_prop:file { getattr open read map };
#line 54
# Create/use netlink_tcpdiag_socket to get tcp info
allow network_stack self:netlink_tcpdiag_socket { { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } } nlmsg_read nlmsg_write };
############### Tethering Service app - Tethering.apk ##############
#line 59
typeattribute network_stack halclientdomain;
#line 59
typeattribute network_stack hal_tetheroffload_client;
#line 59
#line 59
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 59
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 59
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 59
#line 59
typeattribute network_stack hal_tetheroffload;
#line 59
# Find passthrough HAL implementations
#line 59
allow hal_tetheroffload system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 59
allow hal_tetheroffload vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 59
allow hal_tetheroffload vendor_file:file { read open getattr execute map };
#line 59
#line 59
# Create and share netlink_netfilter_sockets for tetheroffload.
allow network_stack self:netlink_netfilter_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow network_stack network_stack_service:service_manager find;
# allow Tethering(network_stack process) to run/update/read the eBPF maps to offload tethering traffic by eBPF.
allow network_stack { fs_bpf_net_private fs_bpf_net_shared fs_bpf_netd_readonly fs_bpf_netd_shared fs_bpf_tethering }:dir search;
allow network_stack { fs_bpf_net_private fs_bpf_net_shared fs_bpf_netd_readonly fs_bpf_netd_shared fs_bpf_tethering }:file { getattr read write };
allow network_stack bpfloader:bpf { map_read map_write prog_run };
# allow Tethering(network_stack process) to read flag value in tethering_u_or_later_native namespace
#line 68
allow network_stack device_config_tethering_u_or_later_native_prop:file { getattr open read map };
#line 68
# Use XFRM (IPsec) netlink sockets
allow network_stack self:netlink_xfrm_socket { { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } } nlmsg_write nlmsg_read };
# tun device used for 3rd party vpn apps and test network manager
allow network_stack tun_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allowxperm network_stack tun_device:chr_file ioctl { 0x800454d2 0x400454ca 0x400454cd 0x400454e2 };
############### NEVER ALLOW RULES
# This place is as good as any for these rules,
# and it is probably the most appropriate because
# network_stack itself is entirely mainline code.
# T+: Only the bpfloader and the network_stack should ever touch 'fs_bpf_net_private' programs/maps.
neverallow { domain -bpfloader -network_stack } fs_bpf_net_private:dir ~getattr;
neverallow { domain -bpfloader -network_stack } fs_bpf_net_private:file *;
# T+: Only the bpfloader, network_stack and system_server should ever touch 'fs_bpf_net_shared' programs/maps.
neverallow { domain -bpfloader -network_stack -system_server } fs_bpf_net_shared:dir ~getattr;
neverallow { domain -bpfloader -network_stack -system_server } fs_bpf_net_shared:file *;
# T+: Only the bpfloader, netd, network_stack and system_server should ever touch 'fs_bpf_netd_readonly' programs/maps.
# netd's access should be readonly
neverallow { domain -bpfloader -netd -network_stack -system_server } fs_bpf_netd_readonly:dir ~getattr;
neverallow { domain -bpfloader -netd -network_stack -system_server } fs_bpf_netd_readonly:file *;
neverallow netd fs_bpf_netd_readonly:file write;
# T+: Only the bpfloader, netd, netutils_wrapper, network_stack and system_server should ever touch 'fs_bpf_netd_shared' programs/maps.
# netutils_wrapper requires access to be able to run iptables and only needs readonly access
neverallow { domain -bpfloader -netd -netutils_wrapper -network_stack -system_server } fs_bpf_netd_shared:dir ~getattr;
neverallow { domain -bpfloader -netd -netutils_wrapper -network_stack -system_server } fs_bpf_netd_shared:file *;
neverallow netutils_wrapper fs_bpf_netd_shared:file write;
# S+: Only the bpfloader and the network_stack should ever touch 'fs_bpf_tethering' programs/maps.
neverallow { domain -bpfloader -network_stack } fs_bpf_tethering:dir ~getattr;
neverallow { domain -bpfloader -network_stack } fs_bpf_tethering:file *;
#line 1 "system/sepolicy/private/nfc.te"
# nfc subsystem
typeattribute nfc coredomain, mlstrustedsubject;
#line 3
typeattribute nfc appdomain;
#line 3
# Label tmpfs objects for all apps.
#line 3
type_transition nfc tmpfs:file appdomain_tmpfs;
#line 3
#line 3
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 3
type nfc_userfaultfd;
#line 3
type_transition nfc nfc:anon_inode nfc_userfaultfd "[userfaultfd]";
#line 3
# Allow domain to create/use userfaultfd anon_inode.
#line 3
allow nfc nfc_userfaultfd:anon_inode { create ioctl read };
#line 3
# Suppress errors generate during bugreport
#line 3
dontaudit su nfc_userfaultfd:anon_inode *;
#line 3
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 3
neverallow { domain -nfc } nfc_userfaultfd:anon_inode *;
#line 3
#line 3
allow nfc appdomain_tmpfs:file { execute getattr map read write };
#line 3
neverallow { nfc -runas_app -shell -simpleperf } { domain -nfc }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 3
neverallow { appdomain -runas_app -shell -simpleperf -nfc } nfc:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 3
# The Android security model guarantees the confidentiality and integrity
#line 3
# of application data and execution state. Ptrace bypasses those
#line 3
# confidentiality guarantees. Disallow ptrace access from system components to
#line 3
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 3
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 3
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 3
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 3
# live lock conditions.
#line 3
neverallow { domain -nfc -crash_dump -runas_app -simpleperf } nfc:process ptrace;
#line 3
#line 4
typeattribute nfc netdomain;
#line 4
#line 6
typeattribute nfc binderservicedomain;
#line 6
#line 7
allow nfc nfc_service:service_manager { add find };
#line 7
neverallow { domain -nfc } nfc_service:service_manager add;
#line 7
#line 7
# On debug builds with root, allow binder services to use binder over TCP.
#line 7
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 7
#line 7
#line 9
typeattribute nfc halclientdomain;
#line 9
typeattribute nfc hal_nfc_client;
#line 9
#line 9
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 9
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 9
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 9
#line 9
typeattribute nfc hal_nfc;
#line 9
# Find passthrough HAL implementations
#line 9
allow hal_nfc system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 9
allow hal_nfc vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 9
allow hal_nfc vendor_file:file { read open getattr execute map };
#line 9
#line 9
# Data file accesses.
allow nfc nfc_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow nfc nfc_data_file:{ file lnk_file sock_file fifo_file } { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow nfc nfc_logs_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow nfc nfc_logs_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# SoundPool loading and playback
allow nfc audioserver_service:service_manager find;
allow nfc drmserver_service:service_manager find;
allow nfc mediametrics_service:service_manager find;
allow nfc mediaextractor_service:service_manager find;
allow nfc mediaserver_service:service_manager find;
allow nfc radio_service:service_manager find;
allow nfc app_api_service:service_manager find;
allow nfc system_api_service:service_manager find;
allow nfc vr_manager_service:service_manager find;
allow nfc secure_element_service:service_manager find;
#line 30
#line 30
allow nfc property_socket:sock_file write;
#line 30
allow nfc init:unix_stream_socket connectto;
#line 30
#line 30
allow nfc nfc_prop:property_service set;
#line 30
#line 30
allow nfc nfc_prop:file { getattr open read map };
#line 30
#line 30
;
# already open bugreport file descriptors may be shared with
# the nfc process, from a file in
# /data/data/com.android.shell/files/bugreports/bugreport-*.
allow nfc shell_data_file:file read;
#line 1 "system/sepolicy/private/odrefresh.te"
# odrefresh
type odrefresh, domain, coredomain;
type odrefresh_exec, system_file_type, exec_type, file_type;
# Allow odrefresh to create files and directories for on device signing.
allow odrefresh apex_module_data_file:dir { getattr search };
allow odrefresh apex_art_data_file:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } relabelfrom };
allow odrefresh apex_art_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow odrefresh to create data files (typically for metrics before statsd starts).
allow odrefresh odrefresh_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow odrefresh odrefresh_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
#line 14
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 14
type odrefresh_userfaultfd;
#line 14
type_transition odrefresh odrefresh:anon_inode odrefresh_userfaultfd "[userfaultfd]";
#line 14
# Allow domain to create/use userfaultfd anon_inode.
#line 14
allow odrefresh odrefresh_userfaultfd:anon_inode { create ioctl read };
#line 14
# Suppress errors generate during bugreport
#line 14
dontaudit su odrefresh_userfaultfd:anon_inode *;
#line 14
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 14
neverallow { domain -odrefresh } odrefresh_userfaultfd:anon_inode *;
#line 14
# Staging area labels (/data/misc/apexdata/com.android.art/staging). odrefresh
# sets up files here and passes file descriptors for dex2oat to write to.
allow odrefresh apex_art_staging_data_file:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } relabelto };
allow odrefresh apex_art_staging_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Run dex2oat in its own sandbox.
#line 22
# Allow the necessary permissions.
#line 22
#line 22
# Old domain may exec the file and transition to the new domain.
#line 22
allow odrefresh dex2oat_exec:file { getattr open read execute map };
#line 22
allow odrefresh dex2oat:process transition;
#line 22
# New domain is entered by executing the file.
#line 22
allow dex2oat dex2oat_exec:file { entrypoint open read execute getattr map };
#line 22
# New domain can send SIGCHLD to its caller.
#line 22
allow dex2oat odrefresh:process sigchld;
#line 22
# Enable AT_SECURE, i.e. libc secure mode.
#line 22
dontaudit odrefresh dex2oat:process noatsecure;
#line 22
# XXX dontaudit candidate but requires further study.
#line 22
allow odrefresh dex2oat:process { siginh rlimitinh };
#line 22
#line 22
# Make the transition occur by default.
#line 22
type_transition odrefresh dex2oat_exec:process dex2oat;
#line 22
# Allow odrefresh to kill dex2oat if compilation times out.
allow odrefresh dex2oat:process sigkill;
# Run dexoptanalyzer in its own sandbox.
#line 28
# Allow the necessary permissions.
#line 28
#line 28
# Old domain may exec the file and transition to the new domain.
#line 28
allow odrefresh dexoptanalyzer_exec:file { getattr open read execute map };
#line 28
allow odrefresh dexoptanalyzer:process transition;
#line 28
# New domain is entered by executing the file.
#line 28
allow dexoptanalyzer dexoptanalyzer_exec:file { entrypoint open read execute getattr map };
#line 28
# New domain can send SIGCHLD to its caller.
#line 28
allow dexoptanalyzer odrefresh:process sigchld;
#line 28
# Enable AT_SECURE, i.e. libc secure mode.
#line 28
dontaudit odrefresh dexoptanalyzer:process noatsecure;
#line 28
# XXX dontaudit candidate but requires further study.
#line 28
allow odrefresh dexoptanalyzer:process { siginh rlimitinh };
#line 28
#line 28
# Make the transition occur by default.
#line 28
type_transition odrefresh dexoptanalyzer_exec:process dexoptanalyzer;
#line 28
# Allow odrefresh to kill dexoptanalyzer if analysis times out.
allow odrefresh dexoptanalyzer:process sigkill;
# Use devpts and fd from odsign (which exec()'s odrefresh)
allow odrefresh odsign_devpts:chr_file { read write };
allow odrefresh odsign:fd use;
# Allow odrefresh to read /apex/apex-info-list.xml to determine
# whether current apex is in /system or /data.
allow odrefresh apex_info_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow updating boot animation status.
#line 42
#line 42
allow odrefresh property_socket:sock_file write;
#line 42
allow odrefresh init:unix_stream_socket connectto;
#line 42
#line 42
allow odrefresh bootanim_system_prop:property_service set;
#line 42
#line 42
allow odrefresh bootanim_system_prop:file { getattr open read map };
#line 42
#line 42
# Allow query ART device config properties
#line 45
allow odrefresh device_config_runtime_native_prop:file { getattr open read map };
#line 45
#line 46
allow odrefresh device_config_runtime_native_boot_prop:file { getattr open read map };
#line 46
# Do not audit unused resources from parent processes (adb, shell, su).
# These appear to be unnecessary for odrefresh.
dontaudit odrefresh { adbd shell }:fd use;
dontaudit odrefresh devpts:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
dontaudit odrefresh adbd:unix_stream_socket { getattr read write };
# No other processes should be creating files in the staging area.
neverallow { domain -init -odrefresh -compos_fd_server } apex_art_staging_data_file:file open;
# No processes other than init, odrefresh and system_server access
# odrefresh_data_files.
neverallow { domain -init -odrefresh -system_server } odrefresh_data_file:dir *;
neverallow { domain -init -odrefresh -system_server } odrefresh_data_file:file *;
#line 1 "system/sepolicy/private/odsign.te"
# odsign - on-device signing.
type odsign, domain;
# odsign - Binary for signing ART artifacts.
typeattribute odsign coredomain;
type odsign_exec, exec_type, file_type, system_file_type;
# Allow init to start odsign
#line 10
#line 10
# Allow the necessary permissions.
#line 10
#line 10
# Old domain may exec the file and transition to the new domain.
#line 10
allow init odsign_exec:file { getattr open read execute map };
#line 10
allow init odsign:process transition;
#line 10
# New domain is entered by executing the file.
#line 10
allow odsign odsign_exec:file { entrypoint open read execute getattr map };
#line 10
# New domain can send SIGCHLD to its caller.
#line 10
#line 10
# Enable AT_SECURE, i.e. libc secure mode.
#line 10
dontaudit init odsign:process noatsecure;
#line 10
# XXX dontaudit candidate but requires further study.
#line 10
allow init odsign:process { siginh rlimitinh };
#line 10
#line 10
# Make the transition occur by default.
#line 10
type_transition init odsign_exec:process odsign;
#line 10
#line 10
# Allow using persistent storage in /data/odsign
allow odsign odsign_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow odsign odsign_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow using persistent storage in /data/odsign/metrics - to add metrics related files
allow odsign odsign_metrics_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow odsign odsign_metrics_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Create and use pty created by android_fork_execvp().
#line 21
# Each domain gets a unique devpts type.
#line 21
type odsign_devpts, fs_type;
#line 21
# Label the pty with the unique type when created.
#line 21
type_transition odsign devpts:chr_file odsign_devpts;
#line 21
# Allow use of the pty after creation.
#line 21
allow odsign odsign_devpts:chr_file { open getattr read write ioctl };
#line 21
allowxperm odsign odsign_devpts:chr_file ioctl {
#line 21
0x00005411 0x00005451 0x00005450 0x00005401 0x00005402 0x00005403 0x00005404 0x00005413 0x00005414
#line 21
0x0000540e 0x0000540b 0x00005410 0x0000540f
#line 21
};
#line 21
# TIOCSTI is only ever used for exploits. Block it.
#line 21
# b/33073072, b/7530569
#line 21
# http://www.openwall.com/lists/oss-security/2016/09/26/14
#line 21
neverallowxperm * odsign_devpts:chr_file ioctl 0x00005412;
#line 21
# Note: devpts:dir search and ptmx_device:chr_file rw_file_perms
#line 21
# allowed to everyone via domain.te.
#line 21
# FS_IOC_ENABLE_VERITY and FS_IOC_MEASURE_VERITY on ART data files
allowxperm odsign apex_art_data_file:file ioctl {
0x6685 0x6686 0x80086601
};
# talk to binder services (for keystore)
#line 29
# Call the servicemanager and transfer references to it.
#line 29
allow odsign servicemanager:binder { call transfer };
#line 29
# Allow servicemanager to send out callbacks
#line 29
allow servicemanager odsign:binder { call transfer };
#line 29
# servicemanager performs getpidcon on clients.
#line 29
allow servicemanager odsign:dir search;
#line 29
allow servicemanager odsign:file { read open };
#line 29
allow servicemanager odsign:process getattr;
#line 29
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 29
# all domains in domain.te.
#line 29
;
# talk to keystore specifically
#line 32
allow keystore odsign:dir search;
#line 32
allow keystore odsign:file { read open };
#line 32
allow keystore odsign:process getattr;
#line 32
allow odsign apc_service:service_manager find;
#line 32
allow odsign keystore_service:service_manager find;
#line 32
allow odsign legacykeystore_service:service_manager find;
#line 32
#line 32
# Call the server domain and optionally transfer references to it.
#line 32
allow odsign keystore:binder { call transfer };
#line 32
# Allow the serverdomain to transfer references to the client on the reply.
#line 32
allow keystore odsign:binder transfer;
#line 32
# Receive and use open files from the server.
#line 32
allow odsign keystore:fd use;
#line 32
#line 32
#line 32
# Call the server domain and optionally transfer references to it.
#line 32
allow keystore odsign:binder { call transfer };
#line 32
# Allow the serverdomain to transfer references to the client on the reply.
#line 32
allow odsign keystore:binder transfer;
#line 32
# Receive and use open files from the server.
#line 32
allow keystore odsign:fd use;
#line 32
#line 32
;
# Use our dedicated keystore key
allow odsign odsign_key:keystore2_key {
delete
get_info
rebind
use
};
# talk to keymaster
#line 43
typeattribute odsign halclientdomain;
#line 43
typeattribute odsign hal_keymaster_client;
#line 43
#line 43
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 43
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 43
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 43
#line 43
typeattribute odsign hal_keymaster;
#line 43
# Find passthrough HAL implementations
#line 43
allow hal_keymaster system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 43
allow hal_keymaster vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 43
allow hal_keymaster vendor_file:file { read open getattr execute map };
#line 43
#line 43
# For ART apex data dir access
allow odsign apex_module_data_file:dir { getattr search };
allow odsign apex_art_data_file:dir { { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } rmdir rename };
allow odsign apex_art_data_file:file { { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } unlink };
# Run odrefresh to refresh ART artifacts
#line 52
# Allow the necessary permissions.
#line 52
#line 52
# Old domain may exec the file and transition to the new domain.
#line 52
allow odsign odrefresh_exec:file { getattr open read execute map };
#line 52
allow odsign odrefresh:process transition;
#line 52
# New domain is entered by executing the file.
#line 52
allow odrefresh odrefresh_exec:file { entrypoint open read execute getattr map };
#line 52
# New domain can send SIGCHLD to its caller.
#line 52
allow odrefresh odsign:process sigchld;
#line 52
# Enable AT_SECURE, i.e. libc secure mode.
#line 52
dontaudit odsign odrefresh:process noatsecure;
#line 52
# XXX dontaudit candidate but requires further study.
#line 52
allow odsign odrefresh:process { siginh rlimitinh };
#line 52
#line 52
# Make the transition occur by default.
#line 52
type_transition odsign odrefresh_exec:process odrefresh;
#line 52
# Run fsverity_init to add key to fsverity keyring
#line 55
# Allow the necessary permissions.
#line 55
#line 55
# Old domain may exec the file and transition to the new domain.
#line 55
allow odsign fsverity_init_exec:file { getattr open read execute map };
#line 55
allow odsign fsverity_init:process transition;
#line 55
# New domain is entered by executing the file.
#line 55
allow fsverity_init fsverity_init_exec:file { entrypoint open read execute getattr map };
#line 55
# New domain can send SIGCHLD to its caller.
#line 55
allow fsverity_init odsign:process sigchld;
#line 55
# Enable AT_SECURE, i.e. libc secure mode.
#line 55
dontaudit odsign fsverity_init:process noatsecure;
#line 55
# XXX dontaudit candidate but requires further study.
#line 55
allow odsign fsverity_init:process { siginh rlimitinh };
#line 55
#line 55
# Make the transition occur by default.
#line 55
type_transition odsign fsverity_init_exec:process fsverity_init;
#line 55
# Run compos_verify to verify CompOs signatures
#line 58
# Allow the necessary permissions.
#line 58
#line 58
# Old domain may exec the file and transition to the new domain.
#line 58
allow odsign compos_verify_exec:file { getattr open read execute map };
#line 58
allow odsign compos_verify:process transition;
#line 58
# New domain is entered by executing the file.
#line 58
allow compos_verify compos_verify_exec:file { entrypoint open read execute getattr map };
#line 58
# New domain can send SIGCHLD to its caller.
#line 58
allow compos_verify odsign:process sigchld;
#line 58
# Enable AT_SECURE, i.e. libc secure mode.
#line 58
dontaudit odsign compos_verify:process noatsecure;
#line 58
# XXX dontaudit candidate but requires further study.
#line 58
allow odsign compos_verify:process { siginh rlimitinh };
#line 58
#line 58
# Make the transition occur by default.
#line 58
type_transition odsign compos_verify_exec:process compos_verify;
#line 58
# only odsign can set odsign sysprop
#line 61
#line 61
allow odsign property_socket:sock_file write;
#line 61
allow odsign init:unix_stream_socket connectto;
#line 61
#line 61
allow odsign odsign_prop:property_service set;
#line 61
#line 61
allow odsign odsign_prop:file { getattr open read map };
#line 61
#line 61
neverallow { domain -odsign -init } odsign_prop:property_service set;
# Allow odsign to stop itself
#line 65
#line 65
allow odsign property_socket:sock_file write;
#line 65
allow odsign init:unix_stream_socket connectto;
#line 65
#line 65
allow odsign ctl_odsign_prop:property_service set;
#line 65
#line 65
allow odsign ctl_odsign_prop:file { getattr open read map };
#line 65
#line 65
# Neverallows
neverallow { domain -odsign -init -fsverity_init} odsign_data_file:dir ~search;
neverallow { domain -odsign -init -fsverity_init} odsign_data_file:file *;
#line 1 "system/sepolicy/private/ot_daemon.te"
#
# ot_daemon is the native Thread network stack on the host (Android) side.
# Refer to https://www.threadgroup.org for Thread network knowledge.
#
# ot_daemon
type ot_daemon, domain, coredomain;
type ot_daemon_exec, exec_type, file_type, system_file_type;
# Allow init ot_daemon
#line 11
#line 11
# Allow the necessary permissions.
#line 11
#line 11
# Old domain may exec the file and transition to the new domain.
#line 11
allow init ot_daemon_exec:file { getattr open read execute map };
#line 11
allow init ot_daemon:process transition;
#line 11
# New domain is entered by executing the file.
#line 11
allow ot_daemon ot_daemon_exec:file { entrypoint open read execute getattr map };
#line 11
# New domain can send SIGCHLD to its caller.
#line 11
#line 11
# Enable AT_SECURE, i.e. libc secure mode.
#line 11
dontaudit init ot_daemon:process noatsecure;
#line 11
# XXX dontaudit candidate but requires further study.
#line 11
allow init ot_daemon:process { siginh rlimitinh };
#line 11
#line 11
# Make the transition occur by default.
#line 11
type_transition init ot_daemon_exec:process ot_daemon;
#line 11
#line 11
# Allow the ot_daemon to use the net domain.
#line 13
typeattribute ot_daemon netdomain;
#line 13
# Allow ot_daemon to find /data/misc/apexdata/com.android.tethering
allow ot_daemon apex_module_data_file:dir search;
# Allow the ot_daemon to access files and subdirectories under
# /data/misc/apexdata/com\.android\.tethering
allow ot_daemon apex_tethering_data_file:dir {create { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } }};
allow ot_daemon apex_tethering_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow OT daemon to read/write the Thread tunnel interface
allow ot_daemon tun_device:chr_file {read write};
# Allow OT daemon to read/write on the socket created by System Server
allow ot_daemon system_server:rawip_socket { read getattr write setattr lock append bind connect getopt setopt shutdown map };
#line 29
typeattribute ot_daemon halclientdomain;
#line 29
typeattribute ot_daemon hal_threadnetwork_client;
#line 29
#line 29
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 29
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 29
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 29
#line 29
typeattribute ot_daemon hal_threadnetwork;
#line 29
# Find passthrough HAL implementations
#line 29
allow hal_threadnetwork system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 29
allow hal_threadnetwork vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 29
allow hal_threadnetwork vendor_file:file { read open getattr execute map };
#line 29
#line 29
# Only ot_daemon can publish the binder service
#line 32
# Call the servicemanager and transfer references to it.
#line 32
allow ot_daemon servicemanager:binder { call transfer };
#line 32
# Allow servicemanager to send out callbacks
#line 32
allow servicemanager ot_daemon:binder { call transfer };
#line 32
# servicemanager performs getpidcon on clients.
#line 32
allow servicemanager ot_daemon:dir search;
#line 32
allow servicemanager ot_daemon:file { read open };
#line 32
allow servicemanager ot_daemon:process getattr;
#line 32
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 32
# all domains in domain.te.
#line 32
#line 33
allow ot_daemon ot_daemon_service:service_manager { add find };
#line 33
neverallow { domain -ot_daemon } ot_daemon_service:service_manager add;
#line 33
#line 33
# On debug builds with root, allow binder services to use binder over TCP.
#line 33
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 33
#line 33
#line 34
# Call the server domain and optionally transfer references to it.
#line 34
allow ot_daemon system_server:binder { call transfer };
#line 34
# Allow the serverdomain to transfer references to the client on the reply.
#line 34
allow system_server ot_daemon:binder transfer;
#line 34
# Receive and use open files from the server.
#line 34
allow ot_daemon system_server:fd use;
#line 34
# Allow OT daemon to write to statsd
#line 37
allow ot_daemon statsdw_socket:sock_file write;
#line 37
allow ot_daemon statsd:unix_dgram_socket sendto;
#line 37
# For collecting bugreports.
allow ot_daemon dumpstate:fd use;
allow ot_daemon dumpstate:fifo_file write;
#line 1 "system/sepolicy/private/otapreopt_chroot.te"
# otapreopt_chroot executable
typeattribute otapreopt_chroot coredomain;
type otapreopt_chroot_exec, exec_type, file_type, system_file_type;
# Chroot preparation and execution.
# We need to create an unshared mount namespace, and then mount /data.
allow otapreopt_chroot postinstall_file:dir { search mounton };
allow otapreopt_chroot apex_mnt_dir:dir mounton;
allow otapreopt_chroot device:dir mounton;
allow otapreopt_chroot linkerconfig_file:dir mounton;
allow otapreopt_chroot rootfs:dir mounton;
allow otapreopt_chroot sysfs:dir mounton;
allow otapreopt_chroot system_data_root_file:dir mounton;
allow otapreopt_chroot system_file:dir mounton;
allow otapreopt_chroot vendor_file:dir mounton;
allow otapreopt_chroot self:{ capability cap_userns } { sys_admin sys_chroot };
# This is required to mount /vendor and mount/unmount ext4 images from
# APEX packages in /postinstall/apex.
allow otapreopt_chroot block_device:dir search;
allow otapreopt_chroot labeledfs:filesystem { mount unmount };
# This is required for dynamic partitions.
allow otapreopt_chroot dm_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# This is required to unmount flattened APEX packages under
# /postinstall/system/apex (which are bind-mounted in /postinstall/apex).
allow otapreopt_chroot postinstall_file:filesystem unmount;
# Mounting /vendor can have this side-effect. Ignore denial.
dontaudit otapreopt_chroot kernel:process setsched;
# Allow otapreopt_chroot to read SELinux policy files.
allow otapreopt_chroot file_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow otapreopt_chroot to open and read the contents of /postinstall/system/apex.
allow otapreopt_chroot postinstall_file:dir { open getattr read search ioctl lock watch watch_reads };
# Allow otapreopt_chroot to read the persist.apexd.verity_on_system system property.
#line 37
allow otapreopt_chroot apexd_prop:file { getattr open read map };
#line 37
# Allow otapreopt to use file descriptors from update-engine and the postinstall
# script. It will read dexopt commands from stdin and write progress to stdout.
allow otapreopt_chroot postinstall:fd use;
allow otapreopt_chroot postinstall:fifo_file { read write getattr };
allow otapreopt_chroot update_engine:fd use;
allow otapreopt_chroot update_engine:fifo_file write;
# Allow to transition to postinstall_dexopt, to run otapreopt in its own sandbox.
#line 47
# Allow the necessary permissions.
#line 47
#line 47
# Old domain may exec the file and transition to the new domain.
#line 47
allow otapreopt_chroot postinstall_dexopt_exec:file { getattr open read execute map };
#line 47
allow otapreopt_chroot postinstall_dexopt:process transition;
#line 47
# New domain is entered by executing the file.
#line 47
allow postinstall_dexopt postinstall_dexopt_exec:file { entrypoint open read execute getattr map };
#line 47
# New domain can send SIGCHLD to its caller.
#line 47
allow postinstall_dexopt otapreopt_chroot:process sigchld;
#line 47
# Enable AT_SECURE, i.e. libc secure mode.
#line 47
dontaudit otapreopt_chroot postinstall_dexopt:process noatsecure;
#line 47
# XXX dontaudit candidate but requires further study.
#line 47
allow otapreopt_chroot postinstall_dexopt:process { siginh rlimitinh };
#line 47
#line 47
# Make the transition occur by default.
#line 47
type_transition otapreopt_chroot postinstall_dexopt_exec:process postinstall_dexopt;
#line 47
#line 48
# Allow the necessary permissions.
#line 48
#line 48
# Old domain may exec the file and transition to the new domain.
#line 48
allow otapreopt_chroot linkerconfig_exec:file { getattr open read execute map };
#line 48
allow otapreopt_chroot linkerconfig:process transition;
#line 48
# New domain is entered by executing the file.
#line 48
allow linkerconfig linkerconfig_exec:file { entrypoint open read execute getattr map };
#line 48
# New domain can send SIGCHLD to its caller.
#line 48
allow linkerconfig otapreopt_chroot:process sigchld;
#line 48
# Enable AT_SECURE, i.e. libc secure mode.
#line 48
dontaudit otapreopt_chroot linkerconfig:process noatsecure;
#line 48
# XXX dontaudit candidate but requires further study.
#line 48
allow otapreopt_chroot linkerconfig:process { siginh rlimitinh };
#line 48
#line 48
# Make the transition occur by default.
#line 48
type_transition otapreopt_chroot linkerconfig_exec:process linkerconfig;
#line 48
#line 49
# Allow the necessary permissions.
#line 49
#line 49
# Old domain may exec the file and transition to the new domain.
#line 49
allow otapreopt_chroot apexd_exec:file { getattr open read execute map };
#line 49
allow otapreopt_chroot apexd:process transition;
#line 49
# New domain is entered by executing the file.
#line 49
allow apexd apexd_exec:file { entrypoint open read execute getattr map };
#line 49
# New domain can send SIGCHLD to its caller.
#line 49
allow apexd otapreopt_chroot:process sigchld;
#line 49
# Enable AT_SECURE, i.e. libc secure mode.
#line 49
dontaudit otapreopt_chroot apexd:process noatsecure;
#line 49
# XXX dontaudit candidate but requires further study.
#line 49
allow otapreopt_chroot apexd:process { siginh rlimitinh };
#line 49
#line 49
# Make the transition occur by default.
#line 49
type_transition otapreopt_chroot apexd_exec:process apexd;
#line 49
# Allow otapreopt_chroot to control linkerconfig
allow otapreopt_chroot linkerconfig_file:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } relabelto };
allow otapreopt_chroot linkerconfig_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow otapreopt_chroot to create loop devices with /dev/loop-control.
allow otapreopt_chroot loop_control_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Allow otapreopt_chroot to access loop devices.
allow otapreopt_chroot loop_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allowxperm otapreopt_chroot loop_device:blk_file ioctl {
0x00004c0a
0x00004c05
0x00004c04
0x00004c00
0x00004c09
0x00004c08
0x00004c01
0x00001261
};
# Allow otapreopt_chroot to configure read-ahead of loop devices.
allow otapreopt_chroot sysfs_loop:dir { open getattr read search ioctl lock watch watch_reads };
allow otapreopt_chroot sysfs_loop:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Allow otapreopt_chroot to mount a tmpfs filesystem in /postinstall/apex.
allow otapreopt_chroot tmpfs:filesystem mount;
# Allow otapreopt_chroot to restore the security context of /postinstall/apex.
allow otapreopt_chroot tmpfs:dir relabelfrom;
allow otapreopt_chroot postinstall_apex_mnt_dir:dir relabelto;
# Allow otapreopt_chroot to manipulate directory /postinstall/apex.
allow otapreopt_chroot postinstall_apex_mnt_dir:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow otapreopt_chroot postinstall_apex_mnt_dir:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow otapreopt_chroot to mount APEX packages in /postinstall/apex.
allow otapreopt_chroot postinstall_apex_mnt_dir:dir mounton;
# Allow otapreopt_chroot to access /dev/block (needed to detach loop
# devices used by ext4 images from APEX packages).
allow otapreopt_chroot block_device:dir { open getattr read search ioctl lock watch watch_reads };
# Allow to access the linker through the symlink.
allow otapreopt_chroot postinstall_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
# Allow otapreopt_chroot to read ro.cold_boot_done prop.
# This is a temporary solution to make sure that otapreopt_chroot doesn't block indefinetelly.
# TODO(b/165948777): remove this once otapreopt_chroot is migrated to libapexmount.
#line 96
allow otapreopt_chroot cold_boot_done_prop:file { getattr open read map };
#line 96
# allow otapreopt_chroot to run the linkerconfig from the new image.
allow otapreopt_chroot linkerconfig_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
#line 1 "system/sepolicy/private/otapreopt_slot.te"
# This command set moves the artifact corresponding to the current slot
# from /data/ota to /data/dalvik-cache.
type otapreopt_slot, domain, mlstrustedsubject, coredomain;
type otapreopt_slot_exec, system_file_type, exec_type, file_type;
# Technically not a daemon but we do want the transition from init domain to
# cppreopts to occur.
#line 9
#line 9
# Allow the necessary permissions.
#line 9
#line 9
# Old domain may exec the file and transition to the new domain.
#line 9
allow init otapreopt_slot_exec:file { getattr open read execute map };
#line 9
allow init otapreopt_slot:process transition;
#line 9
# New domain is entered by executing the file.
#line 9
allow otapreopt_slot otapreopt_slot_exec:file { entrypoint open read execute getattr map };
#line 9
# New domain can send SIGCHLD to its caller.
#line 9
#line 9
# Enable AT_SECURE, i.e. libc secure mode.
#line 9
dontaudit init otapreopt_slot:process noatsecure;
#line 9
# XXX dontaudit candidate but requires further study.
#line 9
allow init otapreopt_slot:process { siginh rlimitinh };
#line 9
#line 9
# Make the transition occur by default.
#line 9
type_transition init otapreopt_slot_exec:process otapreopt_slot;
#line 9
#line 9
# The otapreopt_slot renames the OTA dalvik-cache to the regular dalvik-cache, and cleans up
# the directory afterwards. For logging of aggregate size, we need getattr.
allow otapreopt_slot ota_data_file:dir { { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } rename reparent rmdir };
allow otapreopt_slot ota_data_file:{ file lnk_file } getattr;
# (du follows symlinks)
allow otapreopt_slot ota_data_file:lnk_file read;
# Delete old content of the dalvik-cache.
allow otapreopt_slot dalvikcache_data_file:dir { add_name getattr open read remove_name rmdir search write };
allow otapreopt_slot dalvikcache_data_file:file { getattr unlink };
allow otapreopt_slot dalvikcache_data_file:lnk_file { getattr read unlink };
# Allow cppreopts to execute itself using #!/system/bin/sh
allow otapreopt_slot shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Allow running the mv and rm/rmdir commands using otapreopt_slot permissions.
# Needed so we can move artifacts into /data/dalvik-cache/dalvik-cache.
allow otapreopt_slot toolbox_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
#line 1 "system/sepolicy/private/perfetto.te"
# Perfetto command-line client. Can be used only from the domains that are
# explicitly allowlisted with a domain_auto_trans(X, perfetto_exec, perfetto).
# This command line client accesses the privileged socket of the traced
# daemon.
type perfetto_exec, system_file_type, exec_type, file_type;
type perfetto_tmpfs, file_type;
#line 9
type_transition perfetto tmpfs:file perfetto_tmpfs;
#line 9
allow perfetto perfetto_tmpfs:file { read write getattr map };
#line 9
;
# Allow init to start a trace (for perfetto_boottrace).
#line 12
#line 12
# Allow the necessary permissions.
#line 12
#line 12
# Old domain may exec the file and transition to the new domain.
#line 12
allow init perfetto_exec:file { getattr open read execute map };
#line 12
allow init perfetto:process transition;
#line 12
# New domain is entered by executing the file.
#line 12
allow perfetto perfetto_exec:file { entrypoint open read execute getattr map };
#line 12
# New domain can send SIGCHLD to its caller.
#line 12
#line 12
# Enable AT_SECURE, i.e. libc secure mode.
#line 12
dontaudit init perfetto:process noatsecure;
#line 12
# XXX dontaudit candidate but requires further study.
#line 12
allow init perfetto:process { siginh rlimitinh };
#line 12
#line 12
# Make the transition occur by default.
#line 12
type_transition init perfetto_exec:process perfetto;
#line 12
#line 12
# Allow to access traced's privileged consumer socket.
#line 15
allow perfetto traced_consumer_socket:sock_file write;
#line 15
allow perfetto traced:unix_stream_socket connectto;
#line 15
# Connect to the Perfetto traced daemon as a producer. This requires
# connecting to its producer socket and obtaining a (per-process) tmpfs fd.
#line 19
allow perfetto traced:fd use;
#line 19
allow perfetto traced_tmpfs:file { read write getattr map };
#line 19
#line 19
allow perfetto traced_producer_socket:sock_file write;
#line 19
allow perfetto traced:unix_stream_socket connectto;
#line 19
#line 19
#line 19
# Also allow the service to use the producer file descriptors. This is
#line 19
# necessary when the producer is creating the shared memory, as it will be
#line 19
# passed to the service as a file descriptor (obtained from memfd_create).
#line 19
allow traced perfetto:fd use;
#line 19
# Allow to write and unlink traces into /data/misc/perfetto-traces.
allow perfetto perfetto_traces_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow perfetto perfetto_traces_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow to write and unlink trace into /data/misc/perfetto-traces/bugreport*
allow perfetto perfetto_traces_bugreport_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow perfetto perfetto_traces_bugreport_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
# Allow to write and unlink traces into /data/misc/perfetto-traces/profiling.
allow perfetto perfetto_traces_profiling_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow perfetto perfetto_traces_profiling_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow perfetto to access the proxy service for reporting traces.
allow perfetto tracingproxy_service:service_manager find;
#line 35
# Call the servicemanager and transfer references to it.
#line 35
allow perfetto servicemanager:binder { call transfer };
#line 35
# Allow servicemanager to send out callbacks
#line 35
allow servicemanager perfetto:binder { call transfer };
#line 35
# servicemanager performs getpidcon on clients.
#line 35
allow servicemanager perfetto:dir search;
#line 35
allow servicemanager perfetto:file { read open };
#line 35
allow servicemanager perfetto:process getattr;
#line 35
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 35
# all domains in domain.te.
#line 35
#line 36
# Call the server domain and optionally transfer references to it.
#line 36
allow perfetto system_server:binder { call transfer };
#line 36
# Allow the serverdomain to transfer references to the client on the reply.
#line 36
allow system_server perfetto:binder transfer;
#line 36
# Receive and use open files from the server.
#line 36
allow perfetto system_server:fd use;
#line 36
# Allow perfetto to read the trace config from /data/misc/perfetto-configs.
# shell and adb can write files into that directory.
allow perfetto perfetto_configs_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow perfetto perfetto_configs_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow perfetto to read the trace config from statsd, mm_events and shell
# (both root and non-root) on stdin and also to write the resulting trace to
# stdout.
allow perfetto { statsd mm_events shell su }:fd use;
allow perfetto { statsd mm_events shell su system_server }:fifo_file { getattr read write ioctl };
# Allow to communicate use, read and write over the adb connection.
allow perfetto adbd:fd use;
allow perfetto adbd:unix_stream_socket { read write };
# Allow adbd to reap perfetto.
allow perfetto adbd:process { sigchld };
# Allow perfetto to write to statsd.
#line 57
allow perfetto statsdw_socket:sock_file write;
#line 57
allow perfetto statsd:unix_dgram_socket sendto;
#line 57
# Allow to access /dev/pts when launched in an adb shell.
allow perfetto devpts:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Allow perfetto to ask incidentd to start a report.
# TODO(lalitm): remove all incidentd rules when proxy service is stable.
allow perfetto incident_service:service_manager find;
#line 65
# Call the server domain and optionally transfer references to it.
#line 65
allow perfetto incidentd:binder { call transfer };
#line 65
# Allow the serverdomain to transfer references to the client on the reply.
#line 65
allow incidentd perfetto:binder transfer;
#line 65
# Receive and use open files from the server.
#line 65
allow perfetto incidentd:fd use;
#line 65
# perfetto log formatter calls isatty() on its stderr. Denial when running
# under adbd is harmless. Avoid generating denial logs.
dontaudit perfetto adbd:unix_stream_socket getattr;
dontauditxperm perfetto adbd:unix_stream_socket ioctl {
#line 70
0x00005411 0x00005451 0x00005450 0x00005401 0x00005402 0x00005403 0x00005404 0x00005413 0x00005414
#line 70
0x0000540e 0x0000540b 0x00005410 0x0000540f
#line 70
};
# As above, when adbd is running in "su" domain (only the ioctl is denied in
# practice).
dontauditxperm perfetto su:unix_stream_socket ioctl {
#line 73
0x00005411 0x00005451 0x00005450 0x00005401 0x00005402 0x00005403 0x00005404 0x00005413 0x00005414
#line 73
0x0000540e 0x0000540b 0x00005410 0x0000540f
#line 73
};
# Similarly, CTS tests end up hitting a denial on shell pipes.
dontauditxperm perfetto shell:fifo_file ioctl {
#line 75
0x00005411 0x00005451 0x00005450 0x00005401 0x00005402 0x00005403 0x00005404 0x00005413 0x00005414
#line 75
0x0000540e 0x0000540b 0x00005410 0x0000540f
#line 75
};
###
### Neverallow rules
###
# Disallow anyone else from being able to handle traces except selected system
# components.
neverallow {
domain
-init # The creator of the folder.
-perfetto # The owner of the folder.
-adbd # For pulling traces.
-shell # For devepment purposes.
-traced # For write_into_file traces.
-dumpstate # For attaching traces to bugreports.
-incidentd # For receiving reported traces. TODO(lalitm): remove this.
-priv_app # For stating traces for bug-report UI.
-system_server # For accessing traces started by profiling apis.
} perfetto_traces_data_file:dir *;
neverallow {
domain
-init # The creator of the folder.
-perfetto # The owner of the folder.
-adbd # For pulling traces.
-shell # For devepment purposes.
-traced # For write_into_file traces.
-incidentd # For receiving reported traces. TODO(lalitm): remove this.
} perfetto_traces_data_file:file ~{ getattr read };
### perfetto should NEVER do any of the following
# Disallow mapping executable memory (execstack and exec are already disallowed
# globally in domain.te).
neverallow perfetto self:process execmem;
# Block device access.
neverallow perfetto dev_type:blk_file { read write };
# ptrace any other process
neverallow perfetto domain:process ptrace;
# Disallows access to other /data files.
neverallow perfetto {
data_file_type
-system_data_file
-system_data_root_file
-media_userdir_file
-system_userdir_file
-vendor_userdir_file
# TODO(b/72998741) Remove exemption. Further restricted in a subsequent
# neverallow. Currently only getattr and search are allowed.
-vendor_data_file
-perfetto_traces_data_file
-perfetto_traces_bugreport_data_file
-perfetto_traces_profiling_data_file
-perfetto_configs_data_file
}:dir *;
neverallow perfetto {
system_data_file
-perfetto_traces_data_file
-perfetto_traces_profiling_data_file
}:dir ~{ getattr search };
neverallow perfetto {
data_file_type
-perfetto_traces_data_file
-perfetto_traces_bugreport_data_file
-perfetto_traces_profiling_data_file
-perfetto_configs_data_file
}:file ~write;
#line 1 "system/sepolicy/private/performanced.te"
typeattribute performanced coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init performanced_exec:file { getattr open read execute map };
#line 3
allow init performanced:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow performanced performanced_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init performanced:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init performanced:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init performanced_exec:process performanced;
#line 3
#line 3
#line 1 "system/sepolicy/private/permissioncontroller_app.te"
###
### A domain for further sandboxing the GooglePermissionController app.
###
type permissioncontroller_app, domain, coredomain;
#line 6
typeattribute permissioncontroller_app appdomain;
#line 6
# Label tmpfs objects for all apps.
#line 6
type_transition permissioncontroller_app tmpfs:file appdomain_tmpfs;
#line 6
#line 6
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 6
type permissioncontroller_app_userfaultfd;
#line 6
type_transition permissioncontroller_app permissioncontroller_app:anon_inode permissioncontroller_app_userfaultfd "[userfaultfd]";
#line 6
# Allow domain to create/use userfaultfd anon_inode.
#line 6
allow permissioncontroller_app permissioncontroller_app_userfaultfd:anon_inode { create ioctl read };
#line 6
# Suppress errors generate during bugreport
#line 6
dontaudit su permissioncontroller_app_userfaultfd:anon_inode *;
#line 6
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 6
neverallow { domain -permissioncontroller_app } permissioncontroller_app_userfaultfd:anon_inode *;
#line 6
#line 6
allow permissioncontroller_app appdomain_tmpfs:file { execute getattr map read write };
#line 6
neverallow { permissioncontroller_app -runas_app -shell -simpleperf } { domain -permissioncontroller_app }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 6
neverallow { appdomain -runas_app -shell -simpleperf -permissioncontroller_app } permissioncontroller_app:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 6
# The Android security model guarantees the confidentiality and integrity
#line 6
# of application data and execution state. Ptrace bypasses those
#line 6
# confidentiality guarantees. Disallow ptrace access from system components to
#line 6
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 6
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 6
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 6
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 6
# live lock conditions.
#line 6
neverallow { domain -permissioncontroller_app -crash_dump -runas_app -simpleperf } permissioncontroller_app:process ptrace;
#line 6
allow permissioncontroller_app app_api_service:service_manager find;
allow permissioncontroller_app system_api_service:service_manager find;
# Allow interaction with gpuservice
#line 12
# Call the server domain and optionally transfer references to it.
#line 12
allow permissioncontroller_app gpuservice:binder { call transfer };
#line 12
# Allow the serverdomain to transfer references to the client on the reply.
#line 12
allow gpuservice permissioncontroller_app:binder transfer;
#line 12
# Receive and use open files from the server.
#line 12
allow permissioncontroller_app gpuservice:fd use;
#line 12
allow permissioncontroller_app radio_service:service_manager find;
# Allow the app to request and collect incident reports.
# (Also requires DUMP and PACKAGE_USAGE_STATS permissions)
allow permissioncontroller_app incident_service:service_manager find;
#line 19
# Call the server domain and optionally transfer references to it.
#line 19
allow permissioncontroller_app incidentd:binder { call transfer };
#line 19
# Allow the serverdomain to transfer references to the client on the reply.
#line 19
allow incidentd permissioncontroller_app:binder transfer;
#line 19
# Receive and use open files from the server.
#line 19
allow permissioncontroller_app incidentd:fd use;
#line 19
allow permissioncontroller_app incidentd:fifo_file { read write };
allow permissioncontroller_app gpu_device:dir search;
#line 1 "system/sepolicy/private/platform_app.te"
###
### Apps signed with the platform key.
###
typeattribute platform_app coredomain;
#line 7
typeattribute platform_app appdomain;
#line 7
# Label tmpfs objects for all apps.
#line 7
type_transition platform_app tmpfs:file appdomain_tmpfs;
#line 7
#line 7
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 7
type platform_app_userfaultfd;
#line 7
type_transition platform_app platform_app:anon_inode platform_app_userfaultfd "[userfaultfd]";
#line 7
# Allow domain to create/use userfaultfd anon_inode.
#line 7
allow platform_app platform_app_userfaultfd:anon_inode { create ioctl read };
#line 7
# Suppress errors generate during bugreport
#line 7
dontaudit su platform_app_userfaultfd:anon_inode *;
#line 7
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 7
neverallow { domain -platform_app } platform_app_userfaultfd:anon_inode *;
#line 7
#line 7
allow platform_app appdomain_tmpfs:file { execute getattr map read write };
#line 7
neverallow { platform_app -runas_app -shell -simpleperf } { domain -platform_app }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 7
neverallow { appdomain -runas_app -shell -simpleperf -platform_app } platform_app:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 7
# The Android security model guarantees the confidentiality and integrity
#line 7
# of application data and execution state. Ptrace bypasses those
#line 7
# confidentiality guarantees. Disallow ptrace access from system components to
#line 7
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 7
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 7
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 7
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 7
# live lock conditions.
#line 7
neverallow { domain -platform_app -crash_dump -runas_app -simpleperf } platform_app:process ptrace;
#line 7
# Access the network.
#line 10
typeattribute platform_app netdomain;
#line 10
# Access bluetooth.
#line 12
typeattribute platform_app bluetoothdomain;
#line 12
# Read from /data/local/tmp or /data/data/com.android.shell.
allow platform_app shell_data_file:dir search;
allow platform_app shell_data_file:file { open getattr read };
allow platform_app icon_file:file { open getattr read };
# Populate /data/app/vmdl*.tmp, /data/app-private/vmdl*.tmp files
# created by system server.
allow platform_app { apk_tmp_file apk_private_tmp_file }:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow platform_app { apk_tmp_file apk_private_tmp_file }:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow platform_app apk_private_data_file:dir search;
# ASEC
allow platform_app asec_apk_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow platform_app asec_apk_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Access to /data/media.
allow platform_app media_rw_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow platform_app media_rw_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Write to /cache.
allow platform_app cache_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow platform_app cache_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Direct access to vold-mounted storage under /mnt/media_rw
# This is a performance optimization that allows platform apps to bypass the FUSE layer
allow platform_app mnt_media_rw_file:dir { open getattr read search ioctl lock watch watch_reads };
allow platform_app sdcard_type:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow platform_app sdcard_type:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# com.android.systemui
allow platform_app rootfs:dir getattr;
#line 42
allow platform_app radio_cdma_ecm_prop:file { getattr open read map };
#line 42
#line 45
neverallow { domain -init -dumpstate } persist_wm_debug_prop:property_service set;
#line 50
#line 53
# com.android.captiveportallogin reads /proc/vmstat
allow platform_app {
proc_vmstat
}:file { getattr open read ioctl lock map watch watch_reads };
# /proc/net access.
# TODO(b/9496886) Audit access for removal.
#line 62
allow platform_app proc_net_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 62
allow platform_app proc_net_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 62
#line 65
# Allow writing and removing wmshell protolog in /data/misc/wmtrace.
#line 71
allow platform_app audioserver_service:service_manager find;
allow platform_app cameraserver_service:service_manager find;
allow platform_app drmserver_service:service_manager find;
allow platform_app mediaserver_service:service_manager find;
allow platform_app mediametrics_service:service_manager find;
allow platform_app mediaextractor_service:service_manager find;
allow platform_app mediadrmserver_service:service_manager find;
allow platform_app persistent_data_block_service:service_manager find;
allow platform_app radio_service:service_manager find;
allow platform_app thermal_service:service_manager find;
allow platform_app app_api_service:service_manager find;
allow platform_app system_api_service:service_manager find;
allow platform_app vr_manager_service:service_manager find;
allow platform_app stats_service:service_manager find;
# Allow platform apps to log via statsd.
#line 89
# Call the server domain and optionally transfer references to it.
#line 89
allow platform_app statsd:binder { call transfer };
#line 89
# Allow the serverdomain to transfer references to the client on the reply.
#line 89
allow statsd platform_app:binder transfer;
#line 89
# Receive and use open files from the server.
#line 89
allow platform_app statsd:fd use;
#line 89
# Allow platform applications to find and call artd for testing
#line 95
# Access to /data/preloads
allow platform_app preloads_data_file:file { getattr open read ioctl lock map watch watch_reads };
allow platform_app preloads_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow platform_app preloads_media_file:file { getattr open read ioctl lock map watch watch_reads };
allow platform_app preloads_media_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 103
allow platform_app runtime_event_log_tags_file:file { getattr open read ioctl lock map watch watch_reads };
#line 103
# allow platform apps to use UDP sockets provided by the system server but not
# modify them other than to connect
allow platform_app system_server:udp_socket {
connect getattr read recvfrom sendto write getopt setopt };
# allow platform apps to connect to the property service
#line 111
#line 111
allow platform_app property_socket:sock_file write;
#line 111
allow platform_app init:unix_stream_socket connectto;
#line 111
#line 111
allow platform_app test_boot_reason_prop:property_service set;
#line 111
#line 111
allow platform_app test_boot_reason_prop:file { getattr open read map };
#line 111
#line 111
# allow platform apps to read keyguard.no_require_sim
#line 114
allow platform_app keyguard_config_prop:file { getattr open read map };
#line 114
# allow platform apps to read qemu.hw.mainkeys
#line 117
allow platform_app qemu_hw_prop:file { getattr open read map };
#line 117
# allow platform apps to read sys.boot.reason.last
#line 120
allow platform_app last_boot_reason_prop:file { getattr open read map };
#line 120
# allow platform apps to create symbolic link
allow platform_app app_data_file:lnk_file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# suppress denials caused by debugfs_tracing
dontaudit platform_app debugfs_tracing:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Allow platform apps to create VMs
#line 129
# Transition to virtualizationmanager when the client executes it.
#line 129
#line 129
# Allow the necessary permissions.
#line 129
#line 129
# Old domain may exec the file and transition to the new domain.
#line 129
allow platform_app virtualizationmanager_exec:file { getattr open read execute map };
#line 129
allow platform_app virtualizationmanager:process transition;
#line 129
# New domain is entered by executing the file.
#line 129
allow virtualizationmanager virtualizationmanager_exec:file { entrypoint open read execute getattr map };
#line 129
# New domain can send SIGCHLD to its caller.
#line 129
allow virtualizationmanager platform_app:process sigchld;
#line 129
# Enable AT_SECURE, i.e. libc secure mode.
#line 129
dontaudit platform_app virtualizationmanager:process noatsecure;
#line 129
# XXX dontaudit candidate but requires further study.
#line 129
allow platform_app virtualizationmanager:process { siginh rlimitinh };
#line 129
#line 129
# Make the transition occur by default.
#line 129
type_transition platform_app virtualizationmanager_exec:process virtualizationmanager;
#line 129
#line 129
# Allow virtualizationmanager to communicate over UDS with the client.
#line 129
allow { virtualizationmanager crosvm } platform_app:unix_stream_socket { ioctl getattr read write };
#line 129
# Let the client pass file descriptors to virtualizationmanager and on to crosvm.
#line 129
allow { virtualizationmanager crosvm } platform_app:fd use;
#line 129
# Let the client use file descriptors created by virtualizationmanager.
#line 129
allow platform_app virtualizationmanager:fd use;
#line 129
# Allow piping console log to the client
#line 129
allow { virtualizationmanager crosvm } platform_app:fifo_file { ioctl getattr read write };
#line 129
# Allow client to read/write vsock created by virtualizationmanager to communicate with the VM
#line 129
# that it created. Notice that we do not grant permission to create a vsock;
#line 129
# the client can only connect to VMs that it owns.
#line 129
allow platform_app virtualizationmanager:vsock_socket { getattr getopt read write };
#line 129
# Allow client to inspect hypervisor capabilities
#line 129
#line 129
allow platform_app hypervisor_prop:file { getattr open read map };
#line 129
#line 129
# Allow client to read (but not open) the crashdump provided by virtualizationmanager
#line 129
allow platform_app virtualizationservice_data_file:file { getattr read };
#line 129
###
### Neverallow rules
###
neverallow { domain -init } persist_sysui_builder_extras_prop:property_service set;
# app domains which access /dev/fuse should not run as platform_app
neverallow platform_app fuse_device:chr_file *;
#line 1 "system/sepolicy/private/postinstall.te"
typeattribute postinstall coredomain;
type postinstall_exec, system_file_type, exec_type, file_type;
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow postinstall otapreopt_chroot_exec:file { getattr open read execute map };
#line 3
allow postinstall otapreopt_chroot:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow otapreopt_chroot otapreopt_chroot_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
allow otapreopt_chroot postinstall:process sigchld;
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit postinstall otapreopt_chroot:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow postinstall otapreopt_chroot:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition postinstall otapreopt_chroot_exec:process otapreopt_chroot;
#line 3
allow postinstall rootfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 1 "system/sepolicy/private/postinstall_dexopt.te"
# Domain for the otapreopt executable, running under postinstall_dexopt
#
# Note: otapreopt is a driver for dex2oat, and reuses parts of installd. As such,
# this is derived and adapted from installd.te.
type postinstall_dexopt, domain, coredomain, mlstrustedsubject;
type postinstall_dexopt_exec, system_file_type, exec_type, file_type;
type postinstall_dexopt_tmpfs, file_type;
# Run dex2oat/patchoat in its own sandbox.
# We have to manually transition, as we don't have an entrypoint.
# - Case where dex2oat is in a non-flattened APEX, which has retained
# the correct type (`dex2oat_exec`).
#line 14
# Allow the necessary permissions.
#line 14
#line 14
# Old domain may exec the file and transition to the new domain.
#line 14
allow postinstall_dexopt dex2oat_exec:file { getattr open read execute map };
#line 14
allow postinstall_dexopt dex2oat:process transition;
#line 14
# New domain is entered by executing the file.
#line 14
allow dex2oat dex2oat_exec:file { entrypoint open read execute getattr map };
#line 14
# New domain can send SIGCHLD to its caller.
#line 14
allow dex2oat postinstall_dexopt:process sigchld;
#line 14
# Enable AT_SECURE, i.e. libc secure mode.
#line 14
dontaudit postinstall_dexopt dex2oat:process noatsecure;
#line 14
# XXX dontaudit candidate but requires further study.
#line 14
allow postinstall_dexopt dex2oat:process { siginh rlimitinh };
#line 14
#line 14
# Make the transition occur by default.
#line 14
type_transition postinstall_dexopt dex2oat_exec:process dex2oat;
#line 14
# - Case where dex2oat is in a flattened APEX, which has been tagged
# with the `postinstall_file` type by update_engine.
#line 17
# Allow the necessary permissions.
#line 17
#line 17
# Old domain may exec the file and transition to the new domain.
#line 17
allow postinstall_dexopt postinstall_file:file { getattr open read execute map };
#line 17
allow postinstall_dexopt dex2oat:process transition;
#line 17
# New domain is entered by executing the file.
#line 17
allow dex2oat postinstall_file:file { entrypoint open read execute getattr map };
#line 17
# New domain can send SIGCHLD to its caller.
#line 17
allow dex2oat postinstall_dexopt:process sigchld;
#line 17
# Enable AT_SECURE, i.e. libc secure mode.
#line 17
dontaudit postinstall_dexopt dex2oat:process noatsecure;
#line 17
# XXX dontaudit candidate but requires further study.
#line 17
allow postinstall_dexopt dex2oat:process { siginh rlimitinh };
#line 17
#line 17
# Make the transition occur by default.
#line 17
type_transition postinstall_dexopt postinstall_file:process dex2oat;
#line 17
# Run derive_classpath to get the current BCP.
#line 20
# Allow the necessary permissions.
#line 20
#line 20
# Old domain may exec the file and transition to the new domain.
#line 20
allow postinstall_dexopt derive_classpath_exec:file { getattr open read execute map };
#line 20
allow postinstall_dexopt derive_classpath:process transition;
#line 20
# New domain is entered by executing the file.
#line 20
allow derive_classpath derive_classpath_exec:file { entrypoint open read execute getattr map };
#line 20
# New domain can send SIGCHLD to its caller.
#line 20
allow derive_classpath postinstall_dexopt:process sigchld;
#line 20
# Enable AT_SECURE, i.e. libc secure mode.
#line 20
dontaudit postinstall_dexopt derive_classpath:process noatsecure;
#line 20
# XXX dontaudit candidate but requires further study.
#line 20
allow postinstall_dexopt derive_classpath:process { siginh rlimitinh };
#line 20
#line 20
# Make the transition occur by default.
#line 20
type_transition postinstall_dexopt derive_classpath_exec:process derive_classpath;
#line 20
# Allow postinstall_dexopt to make a tempfile for derive_classpath to write into
#line 22
type_transition postinstall_dexopt tmpfs:file postinstall_dexopt_tmpfs;
#line 22
allow postinstall_dexopt postinstall_dexopt_tmpfs:file { read write getattr map };
#line 22
;
allow postinstall_dexopt postinstall_dexopt_tmpfs:file open;
allow postinstall_dexopt self:{ capability cap_userns } { chown dac_override dac_read_search fowner fsetid setgid setuid };
allow postinstall_dexopt postinstall_file:filesystem getattr;
allow postinstall_dexopt postinstall_file:dir { getattr read search };
allow postinstall_dexopt postinstall_file:lnk_file { getattr read };
allow postinstall_dexopt proc_filesystems:file { getattr open read };
allow postinstall_dexopt rootfs:file { getattr open read ioctl lock map watch watch_reads };
allow postinstall_dexopt tmpfs:file read;
# Allow access odsign verification status
#line 36
allow postinstall_dexopt odsign_prop:file { getattr open read map };
#line 36
# Allow access to /postinstall/apex.
allow postinstall_dexopt postinstall_apex_mnt_dir:dir { getattr search };
# Note: /data/ota is created by init (see system/core/rootdir/init.rc) to avoid giving access
# here and having to relabel the directory.
# Read app data (APKs) as input to dex2oat.
#line 45
allow postinstall_dexopt apk_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 45
allow postinstall_dexopt apk_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 45
# Read vendor app data (APKs) as input to dex2oat.
#line 47
allow postinstall_dexopt vendor_app_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 47
allow postinstall_dexopt vendor_app_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 47
# Read vendor overlay files (APKs) as input to dex2oat.
#line 49
allow postinstall_dexopt vendor_overlay_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 49
allow postinstall_dexopt vendor_overlay_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 49
# Vendor overlay can be found in vendor apex
allow postinstall_dexopt vendor_apex_metadata_file:dir { getattr search };
# Access to app oat directory.
#line 53
allow postinstall_dexopt dalvikcache_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 53
allow postinstall_dexopt dalvikcache_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 53
# Read profile data.
allow postinstall_dexopt { user_profile_root_file user_profile_data_file }:dir { getattr search };
allow postinstall_dexopt user_profile_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Suppress deletion denial (we do not want to update the profile).
dontaudit postinstall_dexopt user_profile_data_file:file { write };
# Write to /data/ota(/*). Create symlinks in /data/ota(/*)
allow postinstall_dexopt ota_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow postinstall_dexopt ota_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow postinstall_dexopt ota_data_file:lnk_file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Need to write .b files, which are dalvikcache_data_file, not ota_data_file.
# TODO: See whether we can apply ota_data_file?
allow postinstall_dexopt dalvikcache_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow postinstall_dexopt dalvikcache_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow labeling of files under /data/app/com.example/oat/
# TODO: Restrict to .b suffix?
allow postinstall_dexopt dalvikcache_data_file:dir relabelto;
allow postinstall_dexopt dalvikcache_data_file:file { relabelto link };
# Check validity of SELinux context before use.
#line 77
#line 77
allow postinstall_dexopt selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 77
allow postinstall_dexopt selinuxfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 77
#line 77
allow postinstall_dexopt selinuxfs:file { open append write lock map };
#line 77
allow postinstall_dexopt kernel:security check_context;
#line 77
#line 78
#line 78
allow postinstall_dexopt selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 78
allow postinstall_dexopt selinuxfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 78
#line 78
allow postinstall_dexopt selinuxfs:file { open append write lock map };
#line 78
allow postinstall_dexopt kernel:security compute_av;
#line 78
allow postinstall_dexopt self:netlink_selinux_socket { read write create getattr setattr lock relabelfrom relabelto append bind connect listen accept getopt setopt shutdown recvfrom sendto name_bind };
#line 78
# Postinstall wants to know about our child.
allow postinstall_dexopt postinstall:process sigchld;
# Allow otapreopt to use file descriptors from otapreopt_chroot.
# TODO: Probably we can actually close file descriptors...
allow postinstall_dexopt otapreopt_chroot:fd use;
# Allow postinstall_dexopt to access the runtime feature flag properties.
#line 89
allow postinstall_dexopt device_config_runtime_native_prop:file { getattr open read map };
#line 89
#line 90
allow postinstall_dexopt device_config_runtime_native_boot_prop:file { getattr open read map };
#line 90
#line 1 "system/sepolicy/private/preloads_copy.te"
type preloads_copy, domain, coredomain;
type preloads_copy_exec, system_file_type, exec_type, file_type;
#line 4
#line 4
# Allow the necessary permissions.
#line 4
#line 4
# Old domain may exec the file and transition to the new domain.
#line 4
allow init preloads_copy_exec:file { getattr open read execute map };
#line 4
allow init preloads_copy:process transition;
#line 4
# New domain is entered by executing the file.
#line 4
allow preloads_copy preloads_copy_exec:file { entrypoint open read execute getattr map };
#line 4
# New domain can send SIGCHLD to its caller.
#line 4
#line 4
# Enable AT_SECURE, i.e. libc secure mode.
#line 4
dontaudit init preloads_copy:process noatsecure;
#line 4
# XXX dontaudit candidate but requires further study.
#line 4
allow init preloads_copy:process { siginh rlimitinh };
#line 4
#line 4
# Make the transition occur by default.
#line 4
type_transition init preloads_copy_exec:process preloads_copy;
#line 4
#line 4
allow preloads_copy shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow preloads_copy toolbox_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow preloads_copy preloads_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow preloads_copy preloads_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow preloads_copy preloads_media_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow preloads_copy preloads_media_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow to copy from /postinstall
allow preloads_copy system_file:dir { open getattr read search ioctl lock watch watch_reads };
# Silence the denial when /postinstall cannot be mounted, e.g., system_other
# is wiped, but preloads_copy.sh still runs.
dontaudit preloads_copy postinstall_mnt_dir:dir search;
#line 1 "system/sepolicy/private/preopt2cachename.te"
# preopt2cachename executable
#
# This executable translates names from the preopted versions the build system
# creates to the names the runtime expects in the data directory.
type preopt2cachename, domain, coredomain;
type preopt2cachename_exec, system_file_type, exec_type, file_type;
# Allow write to stdout.
allow preopt2cachename cppreopts:fd use;
allow preopt2cachename cppreopts:fifo_file { getattr read write };
# Allow write to logcat.
allow preopt2cachename proc_net_type:file { getattr open read ioctl lock map watch watch_reads };
#line 17
#line 1 "system/sepolicy/private/priv_app.te"
###
### A domain for further sandboxing privileged apps.
###
typeattribute priv_app coredomain;
#line 6
typeattribute priv_app appdomain;
#line 6
# Label tmpfs objects for all apps.
#line 6
type_transition priv_app tmpfs:file appdomain_tmpfs;
#line 6
#line 6
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 6
type priv_app_userfaultfd;
#line 6
type_transition priv_app priv_app:anon_inode priv_app_userfaultfd "[userfaultfd]";
#line 6
# Allow domain to create/use userfaultfd anon_inode.
#line 6
allow priv_app priv_app_userfaultfd:anon_inode { create ioctl read };
#line 6
# Suppress errors generate during bugreport
#line 6
dontaudit su priv_app_userfaultfd:anon_inode *;
#line 6
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 6
neverallow { domain -priv_app } priv_app_userfaultfd:anon_inode *;
#line 6
#line 6
allow priv_app appdomain_tmpfs:file { execute getattr map read write };
#line 6
neverallow { priv_app -runas_app -shell -simpleperf } { domain -priv_app }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 6
neverallow { appdomain -runas_app -shell -simpleperf -priv_app } priv_app:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 6
# The Android security model guarantees the confidentiality and integrity
#line 6
# of application data and execution state. Ptrace bypasses those
#line 6
# confidentiality guarantees. Disallow ptrace access from system components to
#line 6
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 6
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 6
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 6
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 6
# live lock conditions.
#line 6
neverallow { domain -priv_app -crash_dump -runas_app -simpleperf } priv_app:process ptrace;
#line 6
# Access the network.
#line 9
typeattribute priv_app netdomain;
#line 9
# Access bluetooth.
#line 11
typeattribute priv_app bluetoothdomain;
#line 11
# Allow the allocation and use of ptys
# Used by: https://play.privileged.com/store/apps/details?id=jackpal.androidterm
#line 15
# Each domain gets a unique devpts type.
#line 15
type priv_app_devpts, fs_type;
#line 15
# Label the pty with the unique type when created.
#line 15
type_transition priv_app devpts:chr_file priv_app_devpts;
#line 15
# Allow use of the pty after creation.
#line 15
allow priv_app priv_app_devpts:chr_file { open getattr read write ioctl };
#line 15
allowxperm priv_app priv_app_devpts:chr_file ioctl {
#line 15
0x00005411 0x00005451 0x00005450 0x00005401 0x00005402 0x00005403 0x00005404 0x00005413 0x00005414
#line 15
0x0000540e 0x0000540b 0x00005410 0x0000540f
#line 15
};
#line 15
# TIOCSTI is only ever used for exploits. Block it.
#line 15
# b/33073072, b/7530569
#line 15
# http://www.openwall.com/lists/oss-security/2016/09/26/14
#line 15
neverallowxperm * priv_app_devpts:chr_file ioctl 0x00005412;
#line 15
# Note: devpts:dir search and ptmx_device:chr_file rw_file_perms
#line 15
# allowed to everyone via domain.te.
#line 15
# Allow loading executable code from writable priv-app home
# directories. This is a W^X violation, however, it needs
# to be supported for now for the following reasons.
# * /data/user_*/0/*/code_cache/* POSSIBLE uses (b/117841367)
# 1) com.android.opengl.shaders_cache
# 2) com.android.skia.shaders_cache
# 3) com.android.renderscript.cache
# * /data/user_de/0/com.google.android.gms/app_chimera
# TODO: Tighten (b/112357170)
allow priv_app privapp_data_file:file execute;
# Chrome Crashpad uses the the dynamic linker to load native executables
# from an APK (b/112050209, crbug.com/928422)
allow priv_app system_linker_exec:file execute_no_trans;
allow priv_app privapp_data_file:lnk_file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Priv apps can find services that expose both @SystemAPI and normal APIs.
allow priv_app app_api_service:service_manager find;
allow priv_app system_api_service:service_manager find;
allow priv_app audioserver_service:service_manager find;
allow priv_app cameraserver_service:service_manager find;
allow priv_app drmserver_service:service_manager find;
allow priv_app mediadrmserver_service:service_manager find;
allow priv_app mediaextractor_service:service_manager find;
allow priv_app mediametrics_service:service_manager find;
allow priv_app mediaserver_service:service_manager find;
allow priv_app music_recognition_service:service_manager find;
allow priv_app network_watchlist_service:service_manager find;
allow priv_app nfc_service:service_manager find;
allow priv_app oem_lock_service:service_manager find;
allow priv_app persistent_data_block_service:service_manager find;
allow priv_app radio_service:service_manager find;
allow priv_app recovery_service:service_manager find;
allow priv_app stats_service:service_manager find;
# Write to /cache.
allow priv_app { cache_file cache_recovery_file }:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow priv_app { cache_file cache_recovery_file }:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# /cache is a symlink to /data/cache on some devices. Allow reading the link.
allow priv_app cache_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
# Access to /data/media.
allow priv_app media_rw_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow priv_app media_rw_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Used by Finsky / Android "Verify Apps" functionality when
# running "adb install foo.apk".
allow priv_app shell_data_file:file { getattr open read ioctl lock map watch watch_reads };
allow priv_app shell_data_file:dir { open getattr read search ioctl lock watch watch_reads };
# Allow traceur to pass file descriptors through a content provider to betterbug
allow priv_app trace_data_file:file { getattr read };
# Allow betterbug to read profile reports generated by profcollect.
#line 75
# Allow the bug reporting frontend to read the presence and timestamp of the
# trace attached to the bugreport (but not its contents, which will go in the
# usual bugreport .zip file). This is used by the bug reporting UI to tell if
# the bugreport will contain a system trace or not while the bugreport is still
# in progress.
allow priv_app wm_trace_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow priv_app wm_trace_data_file:file getattr;
allow priv_app perfetto_traces_bugreport_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow priv_app perfetto_traces_bugreport_data_file:file { getattr };
# Required to traverse the parent dir (/data/misc/perfetto-traces).
allow priv_app perfetto_traces_data_file:dir { search };
# Allow priv apps (e.g. BetterBug) to receive Perfetto traces through
# the framework (i.e. TracingServiceProxy) and sendfile them into their private
# directories for reporting when network and battery conditions are
# appropriate.
allow priv_app perfetto:fd use;
allow priv_app perfetto_traces_data_file:file { read getattr };
# Allow verifier to access staged apks.
allow priv_app { apk_tmp_file apk_private_tmp_file }:dir { open getattr read search ioctl lock watch watch_reads };
allow priv_app { apk_tmp_file apk_private_tmp_file }:file { getattr open read ioctl lock map watch watch_reads };
# For AppFuse.
allow priv_app vold:fd use;
allow priv_app fuse_device:chr_file { read write };
# /proc access
allow priv_app {
proc_vmstat
}:file { getattr open read ioctl lock map watch watch_reads };
allow priv_app sysfs_type:dir search;
# Read access to /sys/block/zram*/mm_stat
#line 111
allow priv_app sysfs_zram:dir { open getattr read search ioctl lock watch watch_reads };
#line 111
allow priv_app sysfs_zram:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 111
#line 113
allow priv_app rootfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 113
allow priv_app rootfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 113
# Allow com.android.vending to communicate with statsd.
#line 116
# Call the server domain and optionally transfer references to it.
#line 116
allow priv_app statsd:binder { call transfer };
#line 116
# Allow the serverdomain to transfer references to the client on the reply.
#line 116
allow statsd priv_app:binder transfer;
#line 116
# Receive and use open files from the server.
#line 116
allow priv_app statsd:fd use;
#line 116
# Allow Phone to read/write cached ringtones (opened by system).
allow priv_app ringtone_file:file { getattr read write };
# Access to /data/preloads
allow priv_app preloads_data_file:file { getattr open read ioctl lock map watch watch_reads };
allow priv_app preloads_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow priv_app preloads_media_file:file { getattr open read ioctl lock map watch watch_reads };
allow priv_app preloads_media_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 127
allow priv_app runtime_event_log_tags_file:file { getattr open read ioctl lock map watch watch_reads };
#line 127
# Allow priv_apps to request and collect incident reports.
# (Also requires DUMP and PACKAGE_USAGE_STATS permissions)
allow priv_app incident_service:service_manager find;
#line 132
# Call the server domain and optionally transfer references to it.
#line 132
allow priv_app incidentd:binder { call transfer };
#line 132
# Allow the serverdomain to transfer references to the client on the reply.
#line 132
allow incidentd priv_app:binder transfer;
#line 132
# Receive and use open files from the server.
#line 132
allow priv_app incidentd:fd use;
#line 132
allow priv_app incidentd:fifo_file { read write };
# Allow priv_apps to check whether Dynamic System Update is enabled
#line 136
allow priv_app dynamic_system_prop:file { getattr open read map };
#line 136
# suppress denials for non-API accesses.
dontaudit priv_app exec_type:file getattr;
dontaudit priv_app device:dir read;
dontaudit priv_app fs_bpf:dir search;
dontaudit priv_app net_dns_prop:file read;
dontaudit priv_app proc:file read;
dontaudit priv_app proc_interrupts:file read;
dontaudit priv_app proc_modules:file read;
dontaudit priv_app proc_net:file read;
dontaudit priv_app proc_stat:file read;
dontaudit priv_app proc_version:file read;
dontaudit priv_app sysfs:dir read;
dontaudit priv_app sysfs:file read;
dontaudit priv_app sysfs_android_usb:file read;
dontaudit priv_app sysfs_dm:file { getattr open read ioctl lock map watch watch_reads };
dontaudit priv_app { wifi_prop wifi_config_prop wifi_hal_prop }:file read;
# allow privileged apps to use UDP sockets provided by the system server but not
# modify them other than to connect
allow priv_app system_server:udp_socket {
connect getattr read recvfrom sendto write getopt setopt };
# allow apps like Phonesky to check the file signature of an apk installed on
# the Incremental File System, fill missing blocks and get the app status and loading progress
allowxperm priv_app apk_data_file:file ioctl {
0x0000671f
0x00006720
0x00006724
0x00006722
};
# allow privileged data loader apps (e.g. com.android.vending) to read logs from Incremental File System
allow priv_app incremental_control_file:file { read getattr ioctl };
# allow apps like Phonesky to request permission to fill blocks of an apk file
# on the Incremental File System.
allowxperm priv_app incremental_control_file:file ioctl 0x00006721;
# allow privileged apps to read the vendor property that indicates if Incremental File System is enabled
#line 177
allow priv_app incremental_prop:file { getattr open read map };
#line 177
# allow privileged apps to read the device config flags.
#line 180
allow priv_app device_config_aconfig_flags_prop:file { getattr open read map };
#line 180
# allow privileged apps to read boot reason property
#line 183
allow priv_app system_boot_reason_prop:file { getattr open read map };
#line 183
# Required for Phonesky to be able to read APEX files under /data/apex/active/.
allow priv_app apex_data_file:dir search;
allow priv_app staging_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Required for Phonesky to be able to read staged files under /data/app-staging.
allow priv_app staging_data_file:dir { open getattr read search ioctl lock watch watch_reads };
# Allow com.android.vending to access files under vendor/apex as well as system apex files.
# This is required for com.android.vending to handle APEXes for e.g. delta patch optimization.
allow priv_app vendor_apex_file:dir { open getattr read search ioctl lock watch watch_reads };
allow priv_app vendor_apex_file:file { getattr open read ioctl lock map watch watch_reads };
# allow priv app to access the system app data files for ContentProvider case.
allow priv_app system_app_data_file:file { read getattr };
# Allow the renderscript compiler to be run.
#line 200
# Allow the necessary permissions.
#line 200
#line 200
# Old domain may exec the file and transition to the new domain.
#line 200
allow priv_app rs_exec:file { getattr open read execute map };
#line 200
allow priv_app rs:process transition;
#line 200
# New domain is entered by executing the file.
#line 200
allow rs rs_exec:file { entrypoint open read execute getattr map };
#line 200
# New domain can send SIGCHLD to its caller.
#line 200
allow rs priv_app:process sigchld;
#line 200
# Enable AT_SECURE, i.e. libc secure mode.
#line 200
dontaudit priv_app rs:process noatsecure;
#line 200
# XXX dontaudit candidate but requires further study.
#line 200
allow priv_app rs:process { siginh rlimitinh };
#line 200
#line 200
# Make the transition occur by default.
#line 200
type_transition priv_app rs_exec:process rs;
#line 200
# Allow loading and deleting executable shared libraries
# within an application home directory. Such shared libraries would be
# created by things like renderscript or via other mechanisms.
allow priv_app app_exec_data_file:file { { getattr open read ioctl lock map watch watch_reads } execute unlink };
# Allow privileged apps to create a VM. Note that access is still
# guarded with the `android.permission.MANAGE_VIRTUAL_MACHINE`
# permission.
#line 210
# Transition to virtualizationmanager when the client executes it.
#line 210
#line 210
# Allow the necessary permissions.
#line 210
#line 210
# Old domain may exec the file and transition to the new domain.
#line 210
allow priv_app virtualizationmanager_exec:file { getattr open read execute map };
#line 210
allow priv_app virtualizationmanager:process transition;
#line 210
# New domain is entered by executing the file.
#line 210
allow virtualizationmanager virtualizationmanager_exec:file { entrypoint open read execute getattr map };
#line 210
# New domain can send SIGCHLD to its caller.
#line 210
allow virtualizationmanager priv_app:process sigchld;
#line 210
# Enable AT_SECURE, i.e. libc secure mode.
#line 210
dontaudit priv_app virtualizationmanager:process noatsecure;
#line 210
# XXX dontaudit candidate but requires further study.
#line 210
allow priv_app virtualizationmanager:process { siginh rlimitinh };
#line 210
#line 210
# Make the transition occur by default.
#line 210
type_transition priv_app virtualizationmanager_exec:process virtualizationmanager;
#line 210
#line 210
# Allow virtualizationmanager to communicate over UDS with the client.
#line 210
allow { virtualizationmanager crosvm } priv_app:unix_stream_socket { ioctl getattr read write };
#line 210
# Let the client pass file descriptors to virtualizationmanager and on to crosvm.
#line 210
allow { virtualizationmanager crosvm } priv_app:fd use;
#line 210
# Let the client use file descriptors created by virtualizationmanager.
#line 210
allow priv_app virtualizationmanager:fd use;
#line 210
# Allow piping console log to the client
#line 210
allow { virtualizationmanager crosvm } priv_app:fifo_file { ioctl getattr read write };
#line 210
# Allow client to read/write vsock created by virtualizationmanager to communicate with the VM
#line 210
# that it created. Notice that we do not grant permission to create a vsock;
#line 210
# the client can only connect to VMs that it owns.
#line 210
allow priv_app virtualizationmanager:vsock_socket { getattr getopt read write };
#line 210
# Allow client to inspect hypervisor capabilities
#line 210
#line 210
allow priv_app hypervisor_prop:file { getattr open read map };
#line 210
#line 210
# Allow client to read (but not open) the crashdump provided by virtualizationmanager
#line 210
allow priv_app virtualizationservice_data_file:file { getattr read };
#line 210
###
### neverallow rules
###
# Receive or send uevent messages.
neverallow priv_app domain:netlink_kobject_uevent_socket *;
# Receive or send generic netlink messages
neverallow priv_app domain:netlink_socket *;
# Read or write kernel printk buffer
neverallow priv_app kmsg_device:chr_file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Too much leaky information in debugfs. It's a security
# best practice to ensure these files aren't readable.
neverallow priv_app debugfs_type:file read;
# Do not allow privileged apps to register services.
# Only trusted components of Android should be registering
# services.
neverallow priv_app service_manager_type:service_manager add;
# Do not allow privileged apps to connect to the property service
# or set properties. b/10243159
neverallow priv_app property_socket:sock_file write;
neverallow priv_app init:unix_stream_socket connectto;
neverallow priv_app property_type:property_service set;
# Do not allow priv_app to be assigned mlstrustedsubject.
# This would undermine the per-user isolation model being
# enforced via levelFrom=user in seapp_contexts and the mls
# constraints. As there is no direct way to specify a neverallow
# on attribute assignment, this relies on the fact that fork
# permission only makes sense within a domain (hence should
# never be granted to any other domain within mlstrustedsubject)
# and priv_app is allowed fork permission to itself.
neverallow priv_app mlstrustedsubject:process fork;
# Do not allow priv_app to hard link to any files.
# In particular, if priv_app links to other app data
# files, installd will not be able to guarantee the deletion
# of the linked to file. Hard links also contribute to security
# bugs, so we want to ensure priv_app never has this
# capability.
neverallow priv_app file_type:file link;
# priv apps should not be able to open trace data files, they should depend
# upon traceur to pass a file descriptor which they can then read
neverallow priv_app trace_data_file:dir *;
neverallow priv_app trace_data_file:file { { append create link unlink relabelfrom rename setattr write } open };
# Do not allow priv_app access to cgroups.
neverallow priv_app cgroup:file *;
neverallow priv_app cgroup_v2:file *;
# Do not allow loading executable code from non-privileged
# application home directories. Code loading across a security boundary
# is dangerous and allows a full compromise of a privileged process
# by an unprivileged process. b/112357170
neverallow priv_app { app_data_file_type -privapp_data_file }:file { execute execute_no_trans };
# Do not follow any app provided symlinks
neverallow priv_app { app_data_file_type -privapp_data_file }:lnk_file { open read getattr };
# Do not allow getting permission-protected network information from sysfs.
neverallow priv_app sysfs_net:file *;
# Restrict socket ioctls. Either 1. disallow privileged ioctls, 2. disallow the
# ioctl permission, or 3. disallow the socket class.
neverallowxperm priv_app domain:{ icmp_socket rawip_socket tcp_socket udp_socket } ioctl
#line 281
{
#line 281
# qualcomm rmnet ioctls
#line 281
0x00006900 0x00006902
#line 281
# socket ioctls
#line 281
0x0000890b 0x0000890c 0x0000890d 0x00008911 0x00008914 0x00008916
#line 281
0x00008918 0x0000891a 0x0000891c 0x0000891d 0x0000891e 0x0000891f
#line 281
0x00008920 0x00008922 0x00008923 0x00008924 0x00008925 0x00008926
#line 281
0x00008927 0x00008929 0x00008930 0x00008931 0x00008932
#line 281
0x00008934 0x00008935 0x00008936 0x00008937 0x00008939 0x00008940 0x00008941
#line 281
0x00008943 0x00008946 0x00008947 0x00008948 0x00008949 0x0000894a
#line 281
0x0000894b 0x00008953 0x00008954 0x00008955 0x00008960 0x00008961 0x00008962 0x00008970
#line 281
0x00008971 0x00008980 0x00008981 0x00008982 0x00008983 0x00008990
#line 281
0x00008991 0x00008992 0x00008993 0x00008994
#line 281
0x00008995 0x000089a0 0x000089a1 0x000089a2 0x000089a3 0x000089b0
#line 281
# device and protocol specific ioctls
#line 281
0x000089f0-0x000089ff
#line 281
0x000089e0-0x000089ef
#line 281
# Wireless extension ioctls
#line 281
0x00008b00 0x00008b02 0x00008b04 0x00008b06 0x00008b08 0x00008b0a
#line 281
0x00008b0c 0x00008b0e 0x00008b10 0x00008b14 0x00008b15 0x00008b16 0x00008b17
#line 281
0x00008b18 0x00008b19 0x00008b1a 0x00008b1b 0x00008b1c 0x00008b1d
#line 281
0x00008b20 0x00008b22 0x00008b24 0x00008b26 0x00008b28 0x00008b2a
#line 281
0x00008b2b 0x00008b2c 0x00008b30 0x00008b31 0x00008b32 0x00008b33
#line 281
0x00008b34 0x00008b35 0x00008b36
#line 281
# Dev private ioctl i.e. hardware specific ioctls
#line 281
0x00008be0-0x00008bff
#line 281
};
neverallow priv_app *:{ netlink_route_socket netlink_selinux_socket } ioctl;
neverallow priv_app *:{
socket netlink_socket packet_socket key_socket appletalk_socket
netlink_tcpdiag_socket netlink_nflog_socket
netlink_xfrm_socket netlink_audit_socket
netlink_dnrt_socket netlink_kobject_uevent_socket tun_socket
netlink_iscsi_socket netlink_fib_lookup_socket netlink_connector_socket
netlink_netfilter_socket netlink_generic_socket netlink_scsitransport_socket
netlink_rdma_socket netlink_crypto_socket sctp_socket
ax25_socket ipx_socket netrom_socket atmpvc_socket x25_socket rose_socket decnet_socket
atmsvc_socket rds_socket irda_socket pppox_socket llc_socket can_socket tipc_socket
bluetooth_socket iucv_socket rxrpc_socket isdn_socket phonet_socket ieee802154_socket caif_socket
alg_socket nfc_socket kcm_socket qipcrtr_socket smc_socket xdp_socket
} *;
# Allow priv apps to report off body events to keystore2.
allow priv_app keystore:keystore2 report_off_body;
# Allow priv_apps to check if archiving is enabled
#line 301
allow priv_app pm_archiving_enabled_prop:file { getattr open read map };
#line 301
#line 1 "system/sepolicy/private/prng_seeder.te"
# PRNG seeder daemon
# Started from early init, maintains a FIPS approved DRBG which it periodically reseeds from
# /dev/hw_random. When BoringSSL (libcrypto) in other processes needs seeding data for its
# internal DRBGs it will connect to /dev/socket/prng_seeder and the daemon will write a
# fixed size block of entropy then disconnect. No other IO is performed.
typeattribute prng_seeder coredomain;
# mlstrustedsubject required in order to allow connections from trusted app domains.
typeattribute prng_seeder mlstrustedsubject;
type prng_seeder_exec, system_file_type, exec_type, file_type;
#line 12
#line 12
# Allow the necessary permissions.
#line 12
#line 12
# Old domain may exec the file and transition to the new domain.
#line 12
allow init prng_seeder_exec:file { getattr open read execute map };
#line 12
allow init prng_seeder:process transition;
#line 12
# New domain is entered by executing the file.
#line 12
allow prng_seeder prng_seeder_exec:file { entrypoint open read execute getattr map };
#line 12
# New domain can send SIGCHLD to its caller.
#line 12
#line 12
# Enable AT_SECURE, i.e. libc secure mode.
#line 12
dontaudit init prng_seeder:process noatsecure;
#line 12
# XXX dontaudit candidate but requires further study.
#line 12
allow init prng_seeder:process { siginh rlimitinh };
#line 12
#line 12
# Make the transition occur by default.
#line 12
type_transition init prng_seeder_exec:process prng_seeder;
#line 12
#line 12
# Socket open and listen are performed by init.
allow prng_seeder prng_seeder:unix_stream_socket { read write getattr accept };
allow prng_seeder hw_random_device:chr_file { read open };
allow prng_seeder kmsg_debug_device:chr_file { { open append write lock map } getattr ioctl };
#line 1 "system/sepolicy/private/profcollectd.te"
# profcollectd - hardware profile collection daemon
type profcollectd, domain, coredomain, mlstrustedsubject;
type profcollectd_exec, system_file_type, exec_type, file_type;
#line 66
#line 1 "system/sepolicy/private/profman.te"
typeattribute profman coredomain;
# Allow profman to read APKs and profile files next to them by FDs passed from
# other programs. In addition, allow profman to acquire flocks on those files.
allow profman {
system_file
apk_data_file
vendor_app_file
}:file { getattr read map lock };
# Allow profman to use file descriptors passed from privileged programs.
allow profman { artd installd }:fd use;
# Allow profman to read from memfd created by artd.
# profman needs to read the embedded profile that artd extracts from an APK,
# which is passed by a memfd.
allow profman artd_tmpfs:file { getattr read map lock };
#line 1 "system/sepolicy/private/property.te"
# Properties used only in /system
#line 2
#line 2
type adbd_prop, property_type, system_property_type, system_internal_property_type;
#line 2
#line 2
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 2
#line 2
neverallow { domain -coredomain } adbd_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 2
#line 2
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 2
#line 2
#line 3
#line 3
type apexd_payload_metadata_prop, property_type, system_property_type, system_internal_property_type;
#line 3
#line 3
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 3
#line 3
neverallow { domain -coredomain } apexd_payload_metadata_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 3
#line 3
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 3
#line 3
#line 4
#line 4
type ctl_snapuserd_prop, property_type, system_property_type, system_internal_property_type;
#line 4
#line 4
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 4
#line 4
neverallow { domain -coredomain } ctl_snapuserd_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 4
#line 4
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 4
#line 4
#line 5
#line 5
type crashrecovery_prop, property_type, system_property_type, system_internal_property_type;
#line 5
#line 5
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 5
#line 5
neverallow { domain -coredomain } crashrecovery_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 5
#line 5
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 5
#line 5
#line 6
#line 6
type device_config_core_experiments_team_internal_prop, property_type, system_property_type, system_internal_property_type;
#line 6
#line 6
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 6
#line 6
neverallow { domain -coredomain } device_config_core_experiments_team_internal_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 6
#line 6
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 6
#line 6
#line 7
#line 7
type device_config_lmkd_native_prop, property_type, system_property_type, system_internal_property_type;
#line 7
#line 7
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 7
#line 7
neverallow { domain -coredomain } device_config_lmkd_native_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 7
#line 7
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 7
#line 7
#line 8
#line 8
type device_config_mglru_native_prop, property_type, system_property_type, system_internal_property_type;
#line 8
#line 8
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 8
#line 8
neverallow { domain -coredomain } device_config_mglru_native_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 8
#line 8
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 8
#line 8
#line 9
#line 9
type device_config_profcollect_native_boot_prop, property_type, system_property_type, system_internal_property_type;
#line 9
#line 9
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 9
#line 9
neverallow { domain -coredomain } device_config_profcollect_native_boot_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 9
#line 9
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 9
#line 9
#line 10
#line 10
type device_config_remote_key_provisioning_native_prop, property_type, system_property_type, system_internal_property_type;
#line 10
#line 10
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 10
#line 10
neverallow { domain -coredomain } device_config_remote_key_provisioning_native_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 10
#line 10
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 10
#line 10
#line 11
#line 11
type device_config_statsd_native_prop, property_type, system_property_type, system_internal_property_type;
#line 11
#line 11
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 11
#line 11
neverallow { domain -coredomain } device_config_statsd_native_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 11
#line 11
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 11
#line 11
#line 12
#line 12
type device_config_statsd_native_boot_prop, property_type, system_property_type, system_internal_property_type;
#line 12
#line 12
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 12
#line 12
neverallow { domain -coredomain } device_config_statsd_native_boot_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 12
#line 12
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 12
#line 12
#line 13
#line 13
type device_config_storage_native_boot_prop, property_type, system_property_type, system_internal_property_type;
#line 13
#line 13
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 13
#line 13
neverallow { domain -coredomain } device_config_storage_native_boot_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 13
#line 13
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 13
#line 13
#line 14
#line 14
type device_config_sys_traced_prop, property_type, system_property_type, system_internal_property_type;
#line 14
#line 14
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 14
#line 14
neverallow { domain -coredomain } device_config_sys_traced_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 14
#line 14
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 14
#line 14
#line 15
#line 15
type device_config_window_manager_native_boot_prop, property_type, system_property_type, system_internal_property_type;
#line 15
#line 15
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
neverallow { domain -coredomain } device_config_window_manager_native_boot_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
#line 15
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 15
#line 15
#line 16
#line 16
type device_config_configuration_prop, property_type, system_property_type, system_internal_property_type;
#line 16
#line 16
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 16
#line 16
neverallow { domain -coredomain } device_config_configuration_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 16
#line 16
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 16
#line 16
#line 17
#line 17
type device_config_connectivity_prop, property_type, system_property_type, system_internal_property_type;
#line 17
#line 17
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 17
#line 17
neverallow { domain -coredomain } device_config_connectivity_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 17
#line 17
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 17
#line 17
#line 18
#line 18
type device_config_swcodec_native_prop, property_type, system_property_type, system_internal_property_type;
#line 18
#line 18
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 18
#line 18
neverallow { domain -coredomain } device_config_swcodec_native_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 18
#line 18
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 18
#line 18
#line 19
#line 19
type device_config_tethering_u_or_later_native_prop, property_type, system_property_type, system_internal_property_type;
#line 19
#line 19
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 19
#line 19
neverallow { domain -coredomain } device_config_tethering_u_or_later_native_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 19
#line 19
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 19
#line 19
#line 20
#line 20
type dmesgd_start_prop, property_type, system_property_type, system_internal_property_type;
#line 20
#line 20
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 20
#line 20
neverallow { domain -coredomain } dmesgd_start_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 20
#line 20
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 20
#line 20
#line 21
#line 21
type fastbootd_protocol_prop, property_type, system_property_type, system_internal_property_type;
#line 21
#line 21
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 21
#line 21
neverallow { domain -coredomain } fastbootd_protocol_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 21
#line 21
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 21
#line 21
#line 22
#line 22
type gsid_prop, property_type, system_property_type, system_internal_property_type;
#line 22
#line 22
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 22
#line 22
neverallow { domain -coredomain } gsid_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 22
#line 22
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 22
#line 22
#line 23
#line 23
type init_perf_lsm_hooks_prop, property_type, system_property_type, system_internal_property_type;
#line 23
#line 23
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 23
#line 23
neverallow { domain -coredomain } init_perf_lsm_hooks_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 23
#line 23
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 23
#line 23
#line 24
#line 24
type init_service_status_private_prop, property_type, system_property_type, system_internal_property_type;
#line 24
#line 24
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 24
#line 24
neverallow { domain -coredomain } init_service_status_private_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 24
#line 24
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 24
#line 24
#line 25
#line 25
type init_storage_prop, property_type, system_property_type, system_internal_property_type;
#line 25
#line 25
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 25
#line 25
neverallow { domain -coredomain } init_storage_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 25
#line 25
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 25
#line 25
#line 26
#line 26
type init_svc_debug_prop, property_type, system_property_type, system_internal_property_type;
#line 26
#line 26
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 26
#line 26
neverallow { domain -coredomain } init_svc_debug_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 26
#line 26
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 26
#line 26
#line 27
#line 27
type keystore_crash_prop, property_type, system_property_type, system_internal_property_type;
#line 27
#line 27
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 27
#line 27
neverallow { domain -coredomain } keystore_crash_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 27
#line 27
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 27
#line 27
#line 28
#line 28
type keystore_listen_prop, property_type, system_property_type, system_internal_property_type;
#line 28
#line 28
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 28
#line 28
neverallow { domain -coredomain } keystore_listen_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 28
#line 28
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 28
#line 28
#line 29
#line 29
type last_boot_reason_prop, property_type, system_property_type, system_internal_property_type;
#line 29
#line 29
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 29
#line 29
neverallow { domain -coredomain } last_boot_reason_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 29
#line 29
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 29
#line 29
#line 30
#line 30
type localization_prop, property_type, system_property_type, system_internal_property_type;
#line 30
#line 30
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 30
#line 30
neverallow { domain -coredomain } localization_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 30
#line 30
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 30
#line 30
#line 31
#line 31
type logd_auditrate_prop, property_type, system_property_type, system_internal_property_type;
#line 31
#line 31
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 31
#line 31
neverallow { domain -coredomain } logd_auditrate_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 31
#line 31
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 31
#line 31
#line 32
#line 32
type lower_kptr_restrict_prop, property_type, system_property_type, system_internal_property_type;
#line 32
#line 32
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 32
#line 32
neverallow { domain -coredomain } lower_kptr_restrict_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 32
#line 32
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 32
#line 32
#line 33
#line 33
type net_464xlat_fromvendor_prop, property_type, system_property_type, system_internal_property_type;
#line 33
#line 33
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 33
#line 33
neverallow { domain -coredomain } net_464xlat_fromvendor_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 33
#line 33
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 33
#line 33
#line 34
#line 34
type net_connectivity_prop, property_type, system_property_type, system_internal_property_type;
#line 34
#line 34
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 34
#line 34
neverallow { domain -coredomain } net_connectivity_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 34
#line 34
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 34
#line 34
#line 35
#line 35
type netd_stable_secret_prop, property_type, system_property_type, system_internal_property_type;
#line 35
#line 35
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 35
#line 35
neverallow { domain -coredomain } netd_stable_secret_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 35
#line 35
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 35
#line 35
#line 36
#line 36
type next_boot_prop, property_type, system_property_type, system_internal_property_type;
#line 36
#line 36
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 36
#line 36
neverallow { domain -coredomain } next_boot_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 36
#line 36
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 36
#line 36
#line 37
#line 37
type odsign_prop, property_type, system_property_type, system_internal_property_type;
#line 37
#line 37
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 37
#line 37
neverallow { domain -coredomain } odsign_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 37
#line 37
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 37
#line 37
#line 38
#line 38
type misctrl_prop, property_type, system_property_type, system_internal_property_type;
#line 38
#line 38
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 38
#line 38
neverallow { domain -coredomain } misctrl_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 38
#line 38
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 38
#line 38
#line 39
#line 39
type perf_drop_caches_prop, property_type, system_property_type, system_internal_property_type;
#line 39
#line 39
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 39
#line 39
neverallow { domain -coredomain } perf_drop_caches_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 39
#line 39
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 39
#line 39
#line 40
#line 40
type pm_prop, property_type, system_property_type, system_internal_property_type;
#line 40
#line 40
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 40
#line 40
neverallow { domain -coredomain } pm_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 40
#line 40
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 40
#line 40
#line 41
#line 41
type profcollectd_node_id_prop, property_type, system_property_type, system_internal_property_type;
#line 41
#line 41
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 41
#line 41
neverallow { domain -coredomain } profcollectd_node_id_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 41
#line 41
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 41
#line 41
#line 42
#line 42
type radio_cdma_ecm_prop, property_type, system_property_type, system_internal_property_type;
#line 42
#line 42
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 42
#line 42
neverallow { domain -coredomain } radio_cdma_ecm_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 42
#line 42
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 42
#line 42
#line 43
#line 43
type remote_prov_prop, property_type, system_property_type, system_internal_property_type;
#line 43
#line 43
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 43
#line 43
neverallow { domain -coredomain } remote_prov_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 43
#line 43
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 43
#line 43
#line 44
#line 44
type rollback_test_prop, property_type, system_property_type, system_internal_property_type;
#line 44
#line 44
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 44
#line 44
neverallow { domain -coredomain } rollback_test_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 44
#line 44
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 44
#line 44
#line 45
#line 45
type setupwizard_prop, property_type, system_property_type, system_internal_property_type;
#line 45
#line 45
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 45
#line 45
neverallow { domain -coredomain } setupwizard_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 45
#line 45
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 45
#line 45
#line 46
#line 46
type snapuserd_prop, property_type, system_property_type, system_internal_property_type;
#line 46
#line 46
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 46
#line 46
neverallow { domain -coredomain } snapuserd_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 46
#line 46
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 46
#line 46
#line 47
#line 47
type system_adbd_prop, property_type, system_property_type, system_internal_property_type;
#line 47
#line 47
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 47
#line 47
neverallow { domain -coredomain } system_adbd_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 47
#line 47
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 47
#line 47
#line 48
#line 48
type system_audio_config_prop, property_type, system_property_type, system_internal_property_type;
#line 48
#line 48
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 48
#line 48
neverallow { domain -coredomain } system_audio_config_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 48
#line 48
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 48
#line 48
#line 49
#line 49
type timezone_metadata_prop, property_type, system_property_type, system_internal_property_type;
#line 49
#line 49
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 49
#line 49
neverallow { domain -coredomain } timezone_metadata_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 49
#line 49
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 49
#line 49
#line 50
#line 50
type traced_perf_enabled_prop, property_type, system_property_type, system_internal_property_type;
#line 50
#line 50
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 50
#line 50
neverallow { domain -coredomain } traced_perf_enabled_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 50
#line 50
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 50
#line 50
#line 51
#line 51
type uprobestats_start_with_config_prop, property_type, system_property_type, system_internal_property_type;
#line 51
#line 51
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 51
#line 51
neverallow { domain -coredomain } uprobestats_start_with_config_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 51
#line 51
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 51
#line 51
#line 52
#line 52
type tuner_server_ctl_prop, property_type, system_property_type, system_internal_property_type;
#line 52
#line 52
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 52
#line 52
neverallow { domain -coredomain } tuner_server_ctl_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 52
#line 52
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 52
#line 52
#line 53
#line 53
type userspace_reboot_log_prop, property_type, system_property_type, system_internal_property_type;
#line 53
#line 53
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 53
#line 53
neverallow { domain -coredomain } userspace_reboot_log_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 53
#line 53
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 53
#line 53
#line 54
#line 54
type userspace_reboot_test_prop, property_type, system_property_type, system_internal_property_type;
#line 54
#line 54
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 54
#line 54
neverallow { domain -coredomain } userspace_reboot_test_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 54
#line 54
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 54
#line 54
#line 55
#line 55
type verity_status_prop, property_type, system_property_type, system_internal_property_type;
#line 55
#line 55
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 55
#line 55
neverallow { domain -coredomain } verity_status_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 55
#line 55
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 55
#line 55
#line 56
#line 56
type zygote_wrap_prop, property_type, system_property_type, system_internal_property_type;
#line 56
#line 56
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 56
#line 56
neverallow { domain -coredomain } zygote_wrap_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 56
#line 56
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 56
#line 56
#line 57
#line 57
type ctl_mediatranscoding_prop, property_type, system_property_type, system_internal_property_type;
#line 57
#line 57
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 57
#line 57
neverallow { domain -coredomain } ctl_mediatranscoding_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 57
#line 57
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 57
#line 57
#line 58
#line 58
type ctl_odsign_prop, property_type, system_property_type, system_internal_property_type;
#line 58
#line 58
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 58
#line 58
neverallow { domain -coredomain } ctl_odsign_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 58
#line 58
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 58
#line 58
#line 59
#line 59
type virtualizationservice_prop, property_type, system_property_type, system_internal_property_type;
#line 59
#line 59
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 59
#line 59
neverallow { domain -coredomain } virtualizationservice_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 59
#line 59
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 59
#line 59
#line 60
#line 60
type ctl_apex_load_prop, property_type, system_property_type, system_internal_property_type;
#line 60
#line 60
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 60
#line 60
neverallow { domain -coredomain } ctl_apex_load_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 60
#line 60
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 60
#line 60
#line 61
#line 61
type enable_16k_pages_prop, property_type, system_property_type, system_internal_property_type;
#line 61
#line 61
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 61
#line 61
neverallow { domain -coredomain } enable_16k_pages_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 61
#line 61
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 61
#line 61
#line 62
#line 62
type sensors_config_prop, property_type, system_property_type, system_internal_property_type;
#line 62
#line 62
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 62
#line 62
neverallow { domain -coredomain } sensors_config_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 62
#line 62
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 62
#line 62
#line 63
#line 63
type hypervisor_pvmfw_prop, property_type, system_property_type, system_internal_property_type;
#line 63
#line 63
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 63
#line 63
neverallow { domain -coredomain } hypervisor_pvmfw_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 63
#line 63
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 63
#line 63
#line 64
#line 64
type hypervisor_virtualizationmanager_prop, property_type, system_property_type, system_internal_property_type;
#line 64
#line 64
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 64
#line 64
neverallow { domain -coredomain } hypervisor_virtualizationmanager_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 64
#line 64
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 64
#line 64
#line 65
#line 65
type game_manager_config_prop, property_type, system_property_type, system_internal_property_type;
#line 65
#line 65
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 65
#line 65
neverallow { domain -coredomain } game_manager_config_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 65
#line 65
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 65
#line 65
#line 66
#line 66
type hidl_memory_prop, property_type, system_property_type, system_internal_property_type;
#line 66
#line 66
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 66
#line 66
neverallow { domain -coredomain } hidl_memory_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 66
#line 66
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 66
#line 66
#line 67
#line 67
type suspend_debug_prop, property_type, system_property_type, system_internal_property_type;
#line 67
#line 67
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 67
#line 67
neverallow { domain -coredomain } suspend_debug_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 67
#line 67
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 67
#line 67
# Properties which can't be written outside system
#line 70
#line 70
type device_config_virtualization_framework_native_prop, property_type, system_property_type, system_restricted_property_type;
#line 70
#line 70
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 70
#line 70
neverallow { domain -coredomain } device_config_virtualization_framework_native_prop:property_service set;
#line 70
#line 70
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 70
#line 70
#line 71
#line 71
type log_file_logger_prop, property_type, system_property_type, system_restricted_property_type;
#line 71
#line 71
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 71
#line 71
neverallow { domain -coredomain } log_file_logger_prop:property_service set;
#line 71
#line 71
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 71
#line 71
#line 72
#line 72
type persist_sysui_builder_extras_prop, property_type, system_property_type, system_restricted_property_type;
#line 72
#line 72
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 72
#line 72
neverallow { domain -coredomain } persist_sysui_builder_extras_prop:property_service set;
#line 72
#line 72
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 72
#line 72
#line 73
#line 73
type persist_sysui_ranking_update_prop, property_type, system_property_type, system_restricted_property_type;
#line 73
#line 73
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 73
#line 73
neverallow { domain -coredomain } persist_sysui_ranking_update_prop:property_service set;
#line 73
#line 73
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 73
#line 73
###
### Neverallow rules
###
# BEGIN_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 79
#line 79
#line 79
# BEGIN_LAUNCHING_WITH_S_ONLY -- this marker is used by CTS -- do not modify
#line 79
#line 79
neverallow domain {
#line 79
property_type
#line 79
-system_property_type
#line 79
-system_property_type
#line 79
-vendor_property_type
#line 79
}:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 79
#line 79
# END_LAUNCHING_WITH_S_ONLY -- this marker is used by CTS -- do not modify
#line 79
#line 79
#line 79
neverallow { domain -coredomain } {
#line 79
system_property_type
#line 79
system_internal_property_type
#line 79
-system_restricted_property_type
#line 79
-system_public_property_type
#line 79
}:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 79
#line 79
neverallow { domain -coredomain } {
#line 79
system_property_type
#line 79
-system_public_property_type
#line 79
}:property_service set;
#line 79
#line 79
# init is in coredomain, but should be able to read/write all props.
#line 79
# dumpstate is also in coredomain, but should be able to read all props.
#line 79
neverallow { coredomain -init -dumpstate } {
#line 79
vendor_property_type
#line 79
vendor_internal_property_type
#line 79
-vendor_restricted_property_type
#line 79
-vendor_public_property_type
#line 79
}:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 79
#line 79
neverallow { coredomain -init } {
#line 79
vendor_property_type
#line 79
-vendor_public_property_type
#line 79
}:property_service set;
#line 79
#line 79
#line 79
# END_LAUNCHING_WITH_R_ONLY -- this marker is used by CTS -- do not modify
#line 116
# There is no need to perform ioctl or advisory locking operations on
# property files. If this neverallow is being triggered, it is
# likely that the policy is using r_file_perms directly instead of
# the get_prop() macro.
neverallow domain property_type:file { ioctl lock };
neverallow * {
core_property_type
-audio_prop
-config_prop
-cppreopt_prop
-dalvik_prop
-debuggerd_prop
-debug_prop
-dhcp_prop
-dumpstate_prop
-fingerprint_prop
-logd_prop
-net_radio_prop
-nfc_prop
-ota_prop
-pan_result_prop
-persist_debug_prop
-powerctl_prop
-radio_prop
-restorecon_prop
-shell_prop
-system_prop
-usb_prop
-vold_prop
}:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# sigstop property is only used for debugging; should only be set by su which is permissive
# for userdebug/eng
neverallow {
domain
-init
-vendor_init
} ctl_sigstop_prop:property_service set;
# Don't audit legacy ctl. property handling. We only want the newer permission check to appear
# in the audit log
dontaudit domain {
ctl_bootanim_prop
ctl_bugreport_prop
ctl_console_prop
ctl_default_prop
ctl_dumpstate_prop
ctl_fuse_prop
ctl_mdnsd_prop
ctl_rildaemon_prop
}:property_service set;
neverallow {
domain
-init
-extra_free_kbytes
} init_storage_prop:property_service set;
neverallow {
domain
-init
} init_svc_debug_prop:property_service set;
neverallow {
domain
-init
-dumpstate
} init_svc_debug_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# DO NOT ADD: compat risk
neverallow {
domain
-init
-dumpstate
-misctrl
} misctrl_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow {
domain
-init
-misctrl
} misctrl_prop:property_service set;
# BEGIN_COMPATIBLE_PROPERTY_ONLY -- this marker is used by CTS -- do not modify
#line 204
#line 204
# Prevent properties from being set
#line 204
neverallow {
#line 204
domain
#line 204
-coredomain
#line 204
-appdomain
#line 204
-vendor_init
#line 204
} {
#line 204
core_property_type
#line 204
extended_core_property_type
#line 204
exported_config_prop
#line 204
exported_default_prop
#line 204
exported_dumpstate_prop
#line 204
exported_system_prop
#line 204
exported3_system_prop
#line 204
usb_control_prop
#line 204
-nfc_prop
#line 204
-powerctl_prop
#line 204
-radio_prop
#line 204
}:property_service set;
#line 204
#line 204
neverallow {
#line 204
domain
#line 204
-coredomain
#line 204
-appdomain
#line 204
-hal_nfc_server
#line 204
} {
#line 204
nfc_prop
#line 204
}:property_service set;
#line 204
#line 204
neverallow {
#line 204
domain
#line 204
-coredomain
#line 204
-appdomain
#line 204
-hal_telephony_server
#line 204
-vendor_init
#line 204
} {
#line 204
radio_control_prop
#line 204
}:property_service set;
#line 204
#line 204
neverallow {
#line 204
domain
#line 204
-coredomain
#line 204
-appdomain
#line 204
-hal_telephony_server
#line 204
} {
#line 204
radio_prop
#line 204
}:property_service set;
#line 204
#line 204
neverallow {
#line 204
domain
#line 204
-coredomain
#line 204
-bluetooth
#line 204
-hal_bluetooth_server
#line 204
} {
#line 204
bluetooth_prop
#line 204
}:property_service set;
#line 204
#line 204
neverallow {
#line 204
domain
#line 204
-coredomain
#line 204
-bluetooth
#line 204
-hal_bluetooth_server
#line 204
-vendor_init
#line 204
} {
#line 204
exported_bluetooth_prop
#line 204
}:property_service set;
#line 204
#line 204
neverallow {
#line 204
domain
#line 204
-coredomain
#line 204
-hal_camera_server
#line 204
-cameraserver
#line 204
-vendor_init
#line 204
} {
#line 204
exported_camera_prop
#line 204
}:property_service set;
#line 204
#line 204
neverallow {
#line 204
domain
#line 204
-coredomain
#line 204
-hal_wifi_server
#line 204
-wificond
#line 204
} {
#line 204
wifi_prop
#line 204
}:property_service set;
#line 204
#line 204
neverallow {
#line 204
domain
#line 204
-init
#line 204
-dumpstate
#line 204
-hal_wifi_server
#line 204
-wificond
#line 204
-vendor_init
#line 204
} {
#line 204
wifi_hal_prop
#line 204
}:property_service set;
#line 204
#line 204
# Prevent properties from being read
#line 204
neverallow {
#line 204
domain
#line 204
-coredomain
#line 204
-appdomain
#line 204
-vendor_init
#line 204
} {
#line 204
core_property_type
#line 204
dalvik_config_prop_type
#line 204
extended_core_property_type
#line 204
exported3_system_prop
#line 204
systemsound_config_prop
#line 204
-debug_prop
#line 204
-logd_prop
#line 204
-nfc_prop
#line 204
-powerctl_prop
#line 204
-radio_prop
#line 204
}:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 204
#line 204
neverallow {
#line 204
domain
#line 204
-coredomain
#line 204
-appdomain
#line 204
-hal_nfc_server
#line 204
} {
#line 204
nfc_prop
#line 204
}:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 204
#line 204
neverallow {
#line 204
domain
#line 204
-coredomain
#line 204
-appdomain
#line 204
-hal_telephony_server
#line 204
} {
#line 204
radio_prop
#line 204
}:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 204
#line 204
neverallow {
#line 204
domain
#line 204
-coredomain
#line 204
-bluetooth
#line 204
-hal_bluetooth_server
#line 204
} {
#line 204
bluetooth_prop
#line 204
}:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 204
#line 204
neverallow {
#line 204
domain
#line 204
-coredomain
#line 204
-hal_wifi_server
#line 204
-wificond
#line 204
} {
#line 204
wifi_prop
#line 204
}:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 204
#line 204
neverallow {
#line 204
domain
#line 204
-coredomain
#line 204
-vendor_init
#line 204
} {
#line 204
suspend_prop
#line 204
}:property_service set;
#line 204
#line 204
neverallow {
#line 204
domain
#line 204
-init
#line 204
} {
#line 204
suspend_debug_prop
#line 204
}:property_service set;
#line 204
#line 204
neverallow {
#line 204
domain
#line 204
-init
#line 204
-dumpstate
#line 204
#line 204
} {
#line 204
suspend_debug_prop
#line 204
}:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 204
#line 204
# END_COMPATIBLE_PROPERTY_ONLY -- this marker is used by CTS -- do not modify
#line 380
dontaudit system_suspend suspend_debug_prop:file { getattr open read ioctl lock map watch watch_reads };
# BEGIN_COMPATIBLE_PROPERTY_ONLY -- this marker is used by CTS -- do not modify
#line 384
#line 384
# Neverallow coredomain to set vendor properties
#line 384
neverallow {
#line 384
coredomain
#line 384
-init
#line 384
-system_writes_vendor_properties_violators
#line 384
} {
#line 384
property_type
#line 384
-system_property_type
#line 384
-extended_core_property_type
#line 384
}:property_service set;
#line 384
#line 384
# END_COMPATIBLE_PROPERTY_ONLY -- this marker is used by CTS -- do not modify
#line 395
neverallow {
domain
-coredomain
-vendor_init
} {
ffs_config_prop
ffs_control_prop
}:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow {
domain
-init
-system_server
} {
userspace_reboot_log_prop
}:property_service set;
neverallow {
# Only allow init and system_server to set system_adbd_prop
domain
-init
-system_server
} {
system_adbd_prop
}:property_service set;
# Let (vendor_)init, adbd, and system_server set service.adb.tcp.port
neverallow {
domain
-init
-vendor_init
-adbd
-system_server
} {
adbd_config_prop
}:property_service set;
neverallow {
# Only allow init and adbd to set adbd_prop
domain
-init
-adbd
} {
adbd_prop
}:property_service set;
neverallow {
# Only allow init to set apexd_payload_metadata_prop
domain
-init
} {
apexd_payload_metadata_prop
}:property_service set;
neverallow {
# Only allow init and shell to set userspace_reboot_test_prop
domain
-init
-shell
} {
userspace_reboot_test_prop
}:property_service set;
neverallow {
domain
-init
-system_server
-vendor_init
} {
surfaceflinger_color_prop
}:property_service set;
neverallow {
domain
-init
} {
libc_debug_prop
}:property_service set;
# Allow the shell to set MTE & GWP-ASan props, so that non-root users with adb
# shell access can control the settings on their device. Allow system apps to
# set MTE props, so Developer Options can set them.
neverallow {
domain
-init
-shell
-system_app
-system_server
-mtectrl
} {
arm64_memtag_prop
gwp_asan_prop
}:property_service set;
neverallow {
domain
-init
-system_server
-vendor_init
} zram_control_prop:property_service set;
neverallow {
domain
-init
-system_server
-vendor_init
} dalvik_runtime_prop:property_service set;
neverallow {
domain
-coredomain
-vendor_init
} {
usb_config_prop
usb_control_prop
}:property_service set;
neverallow {
domain
-init
-system_server
} {
provisioned_prop
retaildemo_prop
}:property_service set;
neverallow {
domain
-coredomain
-vendor_init
} {
provisioned_prop
retaildemo_prop
}:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow {
domain
-init
} {
init_service_status_private_prop
init_service_status_prop
}:property_service set;
neverallow {
domain
-init
-radio
-appdomain
-hal_telephony_server
-vendor_init
} telephony_status_prop:property_service set;
neverallow {
domain
-init
-vendor_init
} {
graphics_config_prop
}:property_service set;
neverallow {
domain
-init
-surfaceflinger
} {
surfaceflinger_display_prop
}:property_service set;
neverallow {
domain
-coredomain
-appdomain
-vendor_init
} packagemanager_config_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow {
domain
-coredomain
-vendor_init
} keyguard_config_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow {
domain
-init
} {
localization_prop
}:property_service set;
neverallow {
domain
-init
-vendor_init
-dumpstate
-system_app
} oem_unlock_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow {
domain
-coredomain
-vendor_init
} storagemanager_config_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow {
domain
-init
-vendor_init
-dumpstate
-appdomain
} sendbug_config_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow {
domain
-init
-vendor_init
-dumpstate
-appdomain
} camera_calibration_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow {
domain
-init
-dumpstate
-hal_dumpstate_server
-vendor_init
} hal_dumpstate_config_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow {
domain
-init
} {
lower_kptr_restrict_prop
}:property_service set;
neverallow {
domain
-init
} zygote_wrap_prop:property_service set;
neverallow {
domain
-init
} verity_status_prop:property_service set;
neverallow {
domain
-init
-vendor_init
} setupwizard_mode_prop:property_service set;
neverallow {
domain
-init
} setupwizard_prop:property_service set;
# ro.product.property_source_order is useless after initialization of ro.product.* props.
# So making it accessible only from init and vendor_init.
neverallow {
domain
-init
-dumpstate
-vendor_init
} build_config_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow {
domain
-init
-shell
} sqlite_log_prop:property_service set;
neverallow {
domain
-coredomain
-appdomain
} sqlite_log_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow {
domain
-init
} default_prop:property_service set;
# Only one of system_property_type and vendor_property_type can be assigned.
# Property types having both attributes won't be accessible from anywhere.
neverallow domain system_and_vendor_property_type:{file property_service} *;
neverallow {
domain
-init
-shell
-rkpdapp
} remote_prov_prop:property_service set;
neverallow {
# Only allow init and shell to set rollback_test_prop
domain
-init
-shell
} rollback_test_prop:property_service set;
neverallow {
domain
-init
-apexd
} ctl_apex_load_prop:property_service set;
neverallow {
domain
-coredomain
-init
-dumpstate
-apexd
} ctl_apex_load_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow {
domain
-init
-apexd
} apex_ready_prop:property_service set;
neverallow {
domain
-coredomain
-dumpstate
-apexd
-vendor_init
} apex_ready_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow {
# Only allow init and profcollectd to access profcollectd_node_id_prop
domain
-init
-dumpstate
-profcollectd
} profcollectd_node_id_prop:file { getattr open read ioctl lock map watch watch_reads };
neverallow {
domain
-init
} log_file_logger_prop:property_service set;
neverallow {
domain
-init
-vendor_init
} usb_uvc_enabled_prop:property_service set;
# Disallow non system apps from reading ro.usb.uvc.enabled
neverallow {
appdomain
-system_app
-device_as_webcam
} usb_uvc_enabled_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow {
domain
-init
-vendor_init
} pm_archiving_enabled_prop:property_service set;
#line 1 "system/sepolicy/private/radio.te"
typeattribute radio coredomain, mlstrustedsubject;
#line 3
typeattribute radio appdomain;
#line 3
# Label tmpfs objects for all apps.
#line 3
type_transition radio tmpfs:file appdomain_tmpfs;
#line 3
#line 3
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 3
type radio_userfaultfd;
#line 3
type_transition radio radio:anon_inode radio_userfaultfd "[userfaultfd]";
#line 3
# Allow domain to create/use userfaultfd anon_inode.
#line 3
allow radio radio_userfaultfd:anon_inode { create ioctl read };
#line 3
# Suppress errors generate during bugreport
#line 3
dontaudit su radio_userfaultfd:anon_inode *;
#line 3
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 3
neverallow { domain -radio } radio_userfaultfd:anon_inode *;
#line 3
#line 3
allow radio appdomain_tmpfs:file { execute getattr map read write };
#line 3
neverallow { radio -runas_app -shell -simpleperf } { domain -radio }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 3
neverallow { appdomain -runas_app -shell -simpleperf -radio } radio:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 3
# The Android security model guarantees the confidentiality and integrity
#line 3
# of application data and execution state. Ptrace bypasses those
#line 3
# confidentiality guarantees. Disallow ptrace access from system components to
#line 3
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 3
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 3
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 3
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 3
# live lock conditions.
#line 3
neverallow { domain -radio -crash_dump -runas_app -simpleperf } radio:process ptrace;
#line 3
#line 5
allow radio runtime_event_log_tags_file:file { getattr open read ioctl lock map watch watch_reads };
#line 5
# Property service
#line 8
#line 8
allow radio property_socket:sock_file write;
#line 8
allow radio init:unix_stream_socket connectto;
#line 8
#line 8
allow radio radio_control_prop:property_service set;
#line 8
#line 8
allow radio radio_control_prop:file { getattr open read map };
#line 8
#line 8
#line 9
#line 9
allow radio property_socket:sock_file write;
#line 9
allow radio init:unix_stream_socket connectto;
#line 9
#line 9
allow radio radio_prop:property_service set;
#line 9
#line 9
allow radio radio_prop:file { getattr open read map };
#line 9
#line 9
#line 10
#line 10
allow radio property_socket:sock_file write;
#line 10
allow radio init:unix_stream_socket connectto;
#line 10
#line 10
allow radio net_radio_prop:property_service set;
#line 10
#line 10
allow radio net_radio_prop:file { getattr open read map };
#line 10
#line 10
#line 11
#line 11
allow radio property_socket:sock_file write;
#line 11
allow radio init:unix_stream_socket connectto;
#line 11
#line 11
allow radio telephony_status_prop:property_service set;
#line 11
#line 11
allow radio telephony_status_prop:file { getattr open read map };
#line 11
#line 11
#line 12
#line 12
allow radio property_socket:sock_file write;
#line 12
allow radio init:unix_stream_socket connectto;
#line 12
#line 12
allow radio radio_cdma_ecm_prop:property_service set;
#line 12
#line 12
allow radio radio_cdma_ecm_prop:file { getattr open read map };
#line 12
#line 12
# ctl interface
#line 15
#line 15
allow radio property_socket:sock_file write;
#line 15
allow radio init:unix_stream_socket connectto;
#line 15
#line 15
allow radio ctl_rildaemon_prop:property_service set;
#line 15
#line 15
allow radio ctl_rildaemon_prop:file { getattr open read map };
#line 15
#line 15
# Telephony code contains time / time zone detection logic so it reads the associated properties.
#line 18
allow radio time_prop:file { getattr open read map };
#line 18
# allow telephony to access platform compat to log permission denials
allow radio platform_compat_service:service_manager find;
allow radio uce_service:service_manager find;
# Manage /data/misc/emergencynumberdb
allow radio emergency_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow radio emergency_data_file:file { getattr open read ioctl lock map watch watch_reads };
# allow telephony to access related cache properties
#line 30
#line 30
allow radio property_socket:sock_file write;
#line 30
allow radio init:unix_stream_socket connectto;
#line 30
#line 30
allow radio binder_cache_telephony_server_prop:property_service set;
#line 30
#line 30
allow radio binder_cache_telephony_server_prop:file { getattr open read map };
#line 30
#line 30
;
neverallow { domain -radio -init }
binder_cache_telephony_server_prop:property_service set;
# allow sending pulled atoms to statsd
#line 35
# Call the server domain and optionally transfer references to it.
#line 35
allow radio statsd:binder { call transfer };
#line 35
# Allow the serverdomain to transfer references to the client on the reply.
#line 35
allow statsd radio:binder transfer;
#line 35
# Receive and use open files from the server.
#line 35
allow radio statsd:fd use;
#line 35
#line 1 "system/sepolicy/private/recovery.te"
typeattribute recovery coredomain;
# The allow rules are only included in the recovery policy.
# Otherwise recovery is only allowed the domain rules.
#line 50
#line 1 "system/sepolicy/private/recovery_persist.te"
typeattribute recovery_persist coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init recovery_persist_exec:file { getattr open read execute map };
#line 3
allow init recovery_persist:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow recovery_persist recovery_persist_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init recovery_persist:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init recovery_persist:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init recovery_persist_exec:process recovery_persist;
#line 3
#line 3
# recovery_persist is not allowed to write anywhere other than recovery_data_file
neverallow recovery_persist {
file_type
-recovery_data_file
}:file write;
#line 1 "system/sepolicy/private/recovery_refresh.te"
typeattribute recovery_refresh coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init recovery_refresh_exec:file { getattr open read execute map };
#line 3
allow init recovery_refresh:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow recovery_refresh recovery_refresh_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init recovery_refresh:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init recovery_refresh:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init recovery_refresh_exec:process recovery_refresh;
#line 3
#line 3
# recovery_refresh is not allowed to write anywhere
neverallow recovery_refresh {
file_type
}:file write;
#line 1 "system/sepolicy/private/remount.te"
type remount, domain, coredomain;
type remount_exec, system_file_type, exec_type, file_type;
#line 25
#line 1 "system/sepolicy/private/rkpd.te"
# Policies for Remote Key Provisioning Daemon (rkpd)
type rkpd, domain;
type rkpd_exec, system_file_type, exec_type, file_type;
typeattribute rkpd coredomain;
#line 7
# Call the servicemanager and transfer references to it.
#line 7
allow rkpd servicemanager:binder { call transfer };
#line 7
# Allow servicemanager to send out callbacks
#line 7
allow servicemanager rkpd:binder { call transfer };
#line 7
# servicemanager performs getpidcon on clients.
#line 7
allow servicemanager rkpd:dir search;
#line 7
allow servicemanager rkpd:file { read open };
#line 7
allow servicemanager rkpd:process getattr;
#line 7
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 7
# all domains in domain.te.
#line 7
#line 8
typeattribute rkpd binderservicedomain;
#line 8
#line 10
#line 10
# Allow the necessary permissions.
#line 10
#line 10
# Old domain may exec the file and transition to the new domain.
#line 10
allow init rkpd_exec:file { getattr open read execute map };
#line 10
allow init rkpd:process transition;
#line 10
# New domain is entered by executing the file.
#line 10
allow rkpd rkpd_exec:file { entrypoint open read execute getattr map };
#line 10
# New domain can send SIGCHLD to its caller.
#line 10
#line 10
# Enable AT_SECURE, i.e. libc secure mode.
#line 10
dontaudit init rkpd:process noatsecure;
#line 10
# XXX dontaudit candidate but requires further study.
#line 10
allow init rkpd:process { siginh rlimitinh };
#line 10
#line 10
# Make the transition occur by default.
#line 10
type_transition init rkpd_exec:process rkpd;
#line 10
#line 10
#line 12
allow rkpd rkpd_registrar_service:service_manager { add find };
#line 12
neverallow { domain -rkpd } rkpd_registrar_service:service_manager add;
#line 12
#line 12
# On debug builds with root, allow binder services to use binder over TCP.
#line 12
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 12
#line 12
#line 13
allow rkpd rkpd_refresh_service:service_manager { add find };
#line 13
neverallow { domain -rkpd } rkpd_refresh_service:service_manager add;
#line 13
#line 13
# On debug builds with root, allow binder services to use binder over TCP.
#line 13
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 13
#line 13
#line 15
allow rkpd device_config_remote_key_provisioning_native_prop:file { getattr open read map };
#line 15
#line 1 "system/sepolicy/private/rkpd_app.te"
###
### A domain for sandboxing the remote key provisioning daemon
### app that is shipped via mainline.
###
typeattribute rkpdapp coredomain;
#line 7
typeattribute rkpdapp appdomain;
#line 7
# Label tmpfs objects for all apps.
#line 7
type_transition rkpdapp tmpfs:file appdomain_tmpfs;
#line 7
#line 7
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 7
type rkpdapp_userfaultfd;
#line 7
type_transition rkpdapp rkpdapp:anon_inode rkpdapp_userfaultfd "[userfaultfd]";
#line 7
# Allow domain to create/use userfaultfd anon_inode.
#line 7
allow rkpdapp rkpdapp_userfaultfd:anon_inode { create ioctl read };
#line 7
# Suppress errors generate during bugreport
#line 7
dontaudit su rkpdapp_userfaultfd:anon_inode *;
#line 7
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 7
neverallow { domain -rkpdapp } rkpdapp_userfaultfd:anon_inode *;
#line 7
#line 7
allow rkpdapp appdomain_tmpfs:file { execute getattr map read write };
#line 7
neverallow { rkpdapp -runas_app -shell -simpleperf } { domain -rkpdapp }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 7
neverallow { appdomain -runas_app -shell -simpleperf -rkpdapp } rkpdapp:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 7
# The Android security model guarantees the confidentiality and integrity
#line 7
# of application data and execution state. Ptrace bypasses those
#line 7
# confidentiality guarantees. Disallow ptrace access from system components to
#line 7
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 7
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 7
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 7
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 7
# live lock conditions.
#line 7
neverallow { domain -rkpdapp -crash_dump -runas_app -simpleperf } rkpdapp:process ptrace;
#line 7
#line 8
typeattribute rkpdapp netdomain;
#line 8
# RKPD needs to be able to call the remote provisioning HALs
#line 11
typeattribute rkpdapp halclientdomain;
#line 11
typeattribute rkpdapp hal_keymint_client;
#line 11
#line 11
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 11
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 11
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 11
#line 11
typeattribute rkpdapp hal_keymint;
#line 11
# Find passthrough HAL implementations
#line 11
allow hal_keymint system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 11
allow hal_keymint vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 11
allow hal_keymint vendor_file:file { read open getattr execute map };
#line 11
#line 11
#line 12
typeattribute rkpdapp halclientdomain;
#line 12
typeattribute rkpdapp hal_remotelyprovisionedcomponent_avf_client;
#line 12
#line 12
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 12
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 12
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 12
#line 12
typeattribute rkpdapp hal_remotelyprovisionedcomponent_avf;
#line 12
# Find passthrough HAL implementations
#line 12
allow hal_remotelyprovisionedcomponent_avf system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 12
allow hal_remotelyprovisionedcomponent_avf vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 12
allow hal_remotelyprovisionedcomponent_avf vendor_file:file { read open getattr execute map };
#line 12
#line 12
# Grant access to certain system properties related to RKP
#line 15
allow rkpdapp device_config_remote_key_provisioning_native_prop:file { getattr open read map };
#line 15
#line 16
#line 16
allow rkpdapp property_socket:sock_file write;
#line 16
allow rkpdapp init:unix_stream_socket connectto;
#line 16
#line 16
allow rkpdapp remote_prov_prop:property_service set;
#line 16
#line 16
allow rkpdapp remote_prov_prop:file { getattr open read map };
#line 16
#line 16
# Grant access to the normal services that are available to all apps
allow rkpdapp app_api_service:service_manager find;
# Grant access to media.metrics service, needed for widevine. This
# access is granted to all other apps already (e.g. untrusted_app_all).
allow rkpdapp mediametrics_service:service_manager find;
# Grant access to statsd
allow rkpdapp statsmanager_service:service_manager find;
#line 27
# Call the server domain and optionally transfer references to it.
#line 27
allow rkpdapp statsd:binder { call transfer };
#line 27
# Allow the serverdomain to transfer references to the client on the reply.
#line 27
allow statsd rkpdapp:binder transfer;
#line 27
# Receive and use open files from the server.
#line 27
allow rkpdapp statsd:fd use;
#line 27
#line 1 "system/sepolicy/private/rs.te"
# Any files which would have been created as app_data_file and
# privapp_data_file will be created as app_exec_data_file instead.
allow rs { app_data_file privapp_data_file }:dir { { open getattr read search ioctl lock watch watch_reads } add_name write };
allow rs app_exec_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
type_transition rs app_data_file:file app_exec_data_file;
type_transition rs privapp_data_file:file app_exec_data_file;
# Follow /data/user/0 symlink
allow rs system_data_file:lnk_file read;
# Read files from the app home directory.
allow rs { app_data_file privapp_data_file }:file { getattr open read ioctl lock map watch watch_reads };
allow rs { app_data_file privapp_data_file }:dir { open getattr read search ioctl lock watch watch_reads };
# Cleanup app_exec_data_file files in the app home directory.
allow rs { app_data_file privapp_data_file }:dir remove_name;
# Use vendor resources
allow rs vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 20
allow rs vendor_overlay_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 20
allow rs vendor_overlay_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 20
#line 21
allow rs vendor_app_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 21
allow rs vendor_app_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 21
# Vendor overlay can be found in vendor apex
allow rs vendor_apex_metadata_file:dir { getattr search };
# Read contents of app apks
#line 26
allow rs apk_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 26
allow rs apk_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 26
allow rs gpu_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow rs ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
allow rs same_process_hal_file:file { { getattr open read ioctl lock map watch watch_reads } execute };
# File descriptors passed from app to renderscript
allow rs { untrusted_app_all ephemeral_app priv_app }:fd use;
# See b/291211299. Since rs is deprecated, this shouldn't be too dangerous, since new
# renderscript usages shouldn't be popping up.
dontaudit rs { zygote surfaceflinger hal_graphics_allocator }:fd use;
# rs can access app data, so ensure it can only be entered via an app domain and cannot have
# CAP_DAC_OVERRIDE.
neverallow rs rs:{ capability capability2 cap_userns cap2_userns } *;
neverallow { domain -appdomain } rs:process { dyntransition transition };
neverallow rs { domain -crash_dump }:process { dyntransition transition };
neverallow rs app_data_file_type:{ { chr_file blk_file } { file lnk_file sock_file fifo_file } } ~{ getattr open read ioctl lock map watch watch_reads };
# rs should never use network sockets
neverallow rs *:{ icmp_socket rawip_socket tcp_socket udp_socket } *;
#line 1 "system/sepolicy/private/rss_hwm_reset.te"
type rss_hwm_reset_exec, system_file_type, exec_type, file_type;
# Start rss_hwm_reset from init.
#line 4
#line 4
# Allow the necessary permissions.
#line 4
#line 4
# Old domain may exec the file and transition to the new domain.
#line 4
allow init rss_hwm_reset_exec:file { getattr open read execute map };
#line 4
allow init rss_hwm_reset:process transition;
#line 4
# New domain is entered by executing the file.
#line 4
allow rss_hwm_reset rss_hwm_reset_exec:file { entrypoint open read execute getattr map };
#line 4
# New domain can send SIGCHLD to its caller.
#line 4
#line 4
# Enable AT_SECURE, i.e. libc secure mode.
#line 4
dontaudit init rss_hwm_reset:process noatsecure;
#line 4
# XXX dontaudit candidate but requires further study.
#line 4
allow init rss_hwm_reset:process { siginh rlimitinh };
#line 4
#line 4
# Make the transition occur by default.
#line 4
type_transition init rss_hwm_reset_exec:process rss_hwm_reset;
#line 4
#line 4
# Search /proc/pid directories.
allow rss_hwm_reset domain:dir search;
# Write to /proc/pid/clear_refs of other processes.
# /proc/pid/clear_refs is S_IWUSER, see: fs/proc/base.c
allow rss_hwm_reset self:{ capability cap_userns } { dac_override };
# Write to /prc/pid/clear_refs.
allow rss_hwm_reset domain:file { open append write lock map };
#line 1 "system/sepolicy/private/runas.te"
typeattribute runas coredomain;
# ndk-gdb invokes adb shell run-as.
#line 4
# Allow the necessary permissions.
#line 4
#line 4
# Old domain may exec the file and transition to the new domain.
#line 4
allow shell runas_exec:file { getattr open read execute map };
#line 4
allow shell runas:process transition;
#line 4
# New domain is entered by executing the file.
#line 4
allow runas runas_exec:file { entrypoint open read execute getattr map };
#line 4
# New domain can send SIGCHLD to its caller.
#line 4
allow runas shell:process sigchld;
#line 4
# Enable AT_SECURE, i.e. libc secure mode.
#line 4
dontaudit shell runas:process noatsecure;
#line 4
# XXX dontaudit candidate but requires further study.
#line 4
allow shell runas:process { siginh rlimitinh };
#line 4
#line 4
# Make the transition occur by default.
#line 4
type_transition shell runas_exec:process runas;
#line 4
#line 1 "system/sepolicy/private/runas_app.te"
typeattribute runas_app coredomain;
#line 3
typeattribute runas_app appdomain;
#line 3
# Label tmpfs objects for all apps.
#line 3
type_transition runas_app tmpfs:file appdomain_tmpfs;
#line 3
#line 3
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 3
type runas_app_userfaultfd;
#line 3
type_transition runas_app runas_app:anon_inode runas_app_userfaultfd "[userfaultfd]";
#line 3
# Allow domain to create/use userfaultfd anon_inode.
#line 3
allow runas_app runas_app_userfaultfd:anon_inode { create ioctl read };
#line 3
# Suppress errors generate during bugreport
#line 3
dontaudit su runas_app_userfaultfd:anon_inode *;
#line 3
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 3
neverallow { domain -runas_app } runas_app_userfaultfd:anon_inode *;
#line 3
#line 3
allow runas_app appdomain_tmpfs:file { execute getattr map read write };
#line 3
neverallow { runas_app -runas_app -shell -simpleperf } { domain -runas_app }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 3
neverallow { appdomain -runas_app -shell -simpleperf -runas_app } runas_app:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 3
# The Android security model guarantees the confidentiality and integrity
#line 3
# of application data and execution state. Ptrace bypasses those
#line 3
# confidentiality guarantees. Disallow ptrace access from system components to
#line 3
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 3
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 3
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 3
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 3
# live lock conditions.
#line 3
neverallow { domain -runas_app -crash_dump -runas_app -simpleperf } runas_app:process ptrace;
#line 3
#line 4
typeattribute runas_app untrusted_app_all;
#line 4
#line 5
typeattribute runas_app netdomain;
#line 5
#line 6
typeattribute runas_app bluetoothdomain;
#line 6
# The ability to call exec() on files in the apps home directories
# when using run-as on a debuggable app. Used to run lldb/ndk-gdb/simpleperf,
# which are copied to the apps home directories.
allow runas_app app_data_file:file execute_no_trans;
# Allow lldb/ndk-gdb/simpleperf to read maps of debuggable app processes.
#line 14
allow runas_app untrusted_app_all:dir { open getattr read search ioctl lock watch watch_reads };
#line 14
allow runas_app untrusted_app_all:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 14
# Allow lldb/ndk-gdb/simpleperf to ptrace attach to debuggable app processes.
allow runas_app untrusted_app_all:process { ptrace sigkill signal sigstop };
allow runas_app untrusted_app_all:unix_stream_socket connectto;
# Allow executing system image simpleperf without a domain transition.
allow runas_app simpleperf_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Suppress denial logspam when simpleperf is trying to find a matching process
# by scanning /proc/<pid>/cmdline files. The /proc/<pid> directories are within
# the same domain as their respective process, most of which this domain is not
# allowed to see.
dontaudit runas_app domain:dir search;
# Allow runas_app to call perf_event_open for profiling debuggable app
# processes, but not the whole system.
allow runas_app self:perf_event { open read write kernel };
neverallow runas_app self:perf_event ~{ open read write kernel };
# Suppress bionic loader denial /data/local/tests directories.
dontaudit runas_app shell_test_data_file:dir search;
#line 1 "system/sepolicy/private/sdcardd.te"
typeattribute sdcardd coredomain;
type_transition sdcardd system_data_file:{ dir file } media_rw_data_file;
#line 1 "system/sepolicy/private/sdk_sandbox_34.te"
###
### SDK Sandbox process.
###
### This file defines the security policy for the sdk sandbox processes
### for targetSdkVersion=34.
type sdk_sandbox_34, domain, coredomain, sdk_sandbox_all, sdk_sandbox_current;
#line 8
typeattribute sdk_sandbox_34 netdomain;
#line 8
#line 9
typeattribute sdk_sandbox_34 appdomain;
#line 9
# Label tmpfs objects for all apps.
#line 9
type_transition sdk_sandbox_34 tmpfs:file appdomain_tmpfs;
#line 9
#line 9
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 9
type sdk_sandbox_34_userfaultfd;
#line 9
type_transition sdk_sandbox_34 sdk_sandbox_34:anon_inode sdk_sandbox_34_userfaultfd "[userfaultfd]";
#line 9
# Allow domain to create/use userfaultfd anon_inode.
#line 9
allow sdk_sandbox_34 sdk_sandbox_34_userfaultfd:anon_inode { create ioctl read };
#line 9
# Suppress errors generate during bugreport
#line 9
dontaudit su sdk_sandbox_34_userfaultfd:anon_inode *;
#line 9
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 9
neverallow { domain -sdk_sandbox_34 } sdk_sandbox_34_userfaultfd:anon_inode *;
#line 9
#line 9
allow sdk_sandbox_34 appdomain_tmpfs:file { execute getattr map read write };
#line 9
neverallow { sdk_sandbox_34 -runas_app -shell -simpleperf } { domain -sdk_sandbox_34 }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 9
neverallow { appdomain -runas_app -shell -simpleperf -sdk_sandbox_34 } sdk_sandbox_34:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 9
# The Android security model guarantees the confidentiality and integrity
#line 9
# of application data and execution state. Ptrace bypasses those
#line 9
# confidentiality guarantees. Disallow ptrace access from system components to
#line 9
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 9
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 9
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 9
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 9
# live lock conditions.
#line 9
neverallow { domain -sdk_sandbox_34 -crash_dump -runas_app -simpleperf } sdk_sandbox_34:process ptrace;
#line 9
#line 1 "system/sepolicy/private/sdk_sandbox_all.te"
###
### sdk_sandbox_all
###
### This file defines the rules shared by all sdk_sandbox_all domains.
### Apps are labeled based on mac_permissions.xml (maps signer and
### optionally package name to seinfo value) and seapp_contexts (maps UID
### and optionally seinfo value to domain for process and type for data
### directory). The sdk_sandbox_all_all attribute is assigned to all default
### seapp_contexts for any app with UID between FIRST_SDK_SANDBOX_UID (20000)
### and LAST_SDK_SANDBOX_UID (29999) if the app has no specific seinfo
### value as determined from mac_permissions.xml.
allow sdk_sandbox_all system_linker_exec:file execute_no_trans;
# Required to read CTS tests data from the shell_data_file location.
allow sdk_sandbox_all shell_data_file:file { getattr open read ioctl lock map watch watch_reads };
allow sdk_sandbox_all shell_data_file:dir { open getattr read search ioctl lock watch watch_reads };
# allow sdk sandbox to use UDP sockets provided by the system server but not
# modify them other than to connect
allow sdk_sandbox_all system_server:udp_socket {
connect getattr read recvfrom sendto write getopt setopt };
# allow sandbox to search in sdk system server directory
# additionally, for webview to work, getattr has been permitted
allow sdk_sandbox_all sdk_sandbox_system_data_file:dir { getattr search };
# allow sandbox to create files and dirs in sdk data directory
allow sdk_sandbox_all sdk_sandbox_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow sdk_sandbox_all sdk_sandbox_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# allow apps to pass open fds to the sdk sandbox
allow sdk_sandbox_all { app_data_file privapp_data_file }:file { getattr read };
###
### neverallow rules
###
neverallow sdk_sandbox_all app_data_file_type:file { execute execute_no_trans };
# Receive or send uevent messages.
neverallow sdk_sandbox_all domain:netlink_kobject_uevent_socket *;
# Receive or send generic netlink messages
neverallow sdk_sandbox_all domain:netlink_socket *;
# Too much leaky information in debugfs. It's a security
# best practice to ensure these files aren't readable.
neverallow sdk_sandbox_all debugfs_type:file read;
# execute gpu_device
neverallow sdk_sandbox_all gpu_device:chr_file execute;
# access files in /sys with the default sysfs label
neverallow sdk_sandbox_all sysfs:file *;
# Avoid reads from generically labeled /proc files
# Create a more specific label if needed
neverallow sdk_sandbox_all proc:file { { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads } { execute execute_no_trans } };
# Directly access external storage
neverallow sdk_sandbox_all { sdcard_type media_rw_data_file }:file {open create};
neverallow sdk_sandbox_all { sdcard_type media_rw_data_file }:dir search;
# Avoid reads to proc_net, it contains too much device wide information about
# ongoing connections.
neverallow sdk_sandbox_all proc_net:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# SDK sandbox processes have their own storage not related to app_data_file or privapp_data_file
# TODO(b/280514080): shell_data_file shouldn't be allowed here
neverallow sdk_sandbox_all { app_data_file_type -sdk_sandbox_data_file -shell_data_file -radio_data_file }:dir { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow sdk_sandbox_all { app_data_file_type -sdk_sandbox_data_file -shell_data_file -radio_data_file }:file ~{ getattr read };
# SDK sandbox processes don't have any access to external storage
neverallow sdk_sandbox_all { media_rw_data_file }:dir { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow sdk_sandbox_all { media_rw_data_file }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow { sdk_sandbox_all } tmpfs:dir { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
neverallow sdk_sandbox_all hal_drm_service:service_manager find;
# Only certain system components should have access to sdk_sandbox_system_data_file
# sdk_sandbox only needs search. Restricted in follow up neverallow rule.
neverallow {
domain
-init
-installd
-system_server
-vold_prepare_subdirs
} sdk_sandbox_system_data_file:dir { relabelfrom };
neverallow {
domain
-init
-installd
-sdk_sandbox_all
-system_server
-vold_prepare_subdirs
-zygote
} sdk_sandbox_system_data_file:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } relabelto };
# Only certain system components should have access to sdk_sandbox_all_system_data_file
# sdk_sandbox_all only needs search. Restricted in follow up neverallow rule.
neverallow {
domain
-init
-installd
-system_server
-vold_prepare_subdirs
} sdk_sandbox_system_data_file:dir { relabelfrom };
neverallow {
domain
-init
-installd
-sdk_sandbox_all
-system_server
-vold_prepare_subdirs
-zygote
} sdk_sandbox_system_data_file:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } relabelto };
# sdk_sandbox_all only needs to traverse through the sdk_sandbox_all_system_data_file
neverallow sdk_sandbox_all sdk_sandbox_system_data_file:dir ~{ getattr search };
# Only dirs should be created at sdk_sandbox_all_system_data_file level
neverallow { domain -init } sdk_sandbox_system_data_file:file *;
#line 1 "system/sepolicy/private/sdk_sandbox_audit.te"
###
### SDK Sandbox process.
###
### This file defines the audit sdk sandbox security policy for
### the set of restrictions proposed for the next SDK level.
###
### The sdk_sandbox_audit domain has the same rules as the
### sdk_sandbox_current domain and additional auditing rules
### for the accesses we are considering forbidding in the upcoming
### sdk_sandbox_next domain.
type sdk_sandbox_audit, domain, coredomain, sdk_sandbox_all, sdk_sandbox_current;
#line 13
typeattribute sdk_sandbox_audit netdomain;
#line 13
#line 14
typeattribute sdk_sandbox_audit appdomain;
#line 14
# Label tmpfs objects for all apps.
#line 14
type_transition sdk_sandbox_audit tmpfs:file appdomain_tmpfs;
#line 14
#line 14
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 14
type sdk_sandbox_audit_userfaultfd;
#line 14
type_transition sdk_sandbox_audit sdk_sandbox_audit:anon_inode sdk_sandbox_audit_userfaultfd "[userfaultfd]";
#line 14
# Allow domain to create/use userfaultfd anon_inode.
#line 14
allow sdk_sandbox_audit sdk_sandbox_audit_userfaultfd:anon_inode { create ioctl read };
#line 14
# Suppress errors generate during bugreport
#line 14
dontaudit su sdk_sandbox_audit_userfaultfd:anon_inode *;
#line 14
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 14
neverallow { domain -sdk_sandbox_audit } sdk_sandbox_audit_userfaultfd:anon_inode *;
#line 14
#line 14
allow sdk_sandbox_audit appdomain_tmpfs:file { execute getattr map read write };
#line 14
neverallow { sdk_sandbox_audit -runas_app -shell -simpleperf } { domain -sdk_sandbox_audit }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 14
neverallow { appdomain -runas_app -shell -simpleperf -sdk_sandbox_audit } sdk_sandbox_audit:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 14
# The Android security model guarantees the confidentiality and integrity
#line 14
# of application data and execution state. Ptrace bypasses those
#line 14
# confidentiality guarantees. Disallow ptrace access from system components to
#line 14
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 14
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 14
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 14
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 14
# live lock conditions.
#line 14
neverallow { domain -sdk_sandbox_audit -crash_dump -runas_app -simpleperf } sdk_sandbox_audit:process ptrace;
#line 14
# Auditallow rules for accesses that are currently allowed but we
# might remove in the future.
auditallow sdk_sandbox_audit {
cameraserver_service
ephemeral_app_api_service
mediadrmserver_service
radio_service
}:service_manager find;
auditallow sdk_sandbox_audit {
property_type
-system_property_type
}:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
auditallow sdk_sandbox_audit {
property_type
-system_property_type
}:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
#line 1 "system/sepolicy/private/sdk_sandbox_current.te"
###
### SDK Sandbox process.
###
### This file defines the security policy for the sdk sandbox processes
### for the current SDK level.
# Allow finding services. This is different from ephemeral_app policy.
# Adding services manually to the allowlist is preferred hence app_api_service is not used.
allow sdk_sandbox_current {
activity_service
activity_task_service
appops_service
audio_service
audioserver_service
batteryproperties_service
batterystats_service
cameraserver_service
connectivity_service
connmetrics_service
deviceidle_service
display_service
dropbox_service
ephemeral_app_api_service
font_service
game_service
gpu_service
graphicsstats_service
hardware_properties_service
hint_service
imms_service
input_method_service
input_service
IProxyService_service
ipsec_service
launcherapps_service
legacy_permission_service
light_service
locale_service
media_communication_service
mediadrmserver_service
mediaextractor_service
mediametrics_service
media_projection_service
media_router_service
mediaserver_service
media_session_service
memtrackproxy_service
midi_service
netpolicy_service
netstats_service
network_management_service
notification_service
package_service
permission_checker_service
permission_service
permissionmgr_service
platform_compat_service
power_service
procstats_service
radio_service
registry_service
restrictions_service
rttmanager_service
search_service
selection_toolbar_service
sensor_privacy_service
sensorservice_service
servicediscovery_service
settings_service
speech_recognition_service
statusbar_service
storagestats_service
surfaceflinger_service
telecom_service
tethering_service
textclassification_service
textservices_service
texttospeech_service
thermal_service
translation_service
tv_iapp_service
tv_input_service
uimode_service
vcn_management_service
webviewupdate_service
}:service_manager find;
#line 1 "system/sepolicy/private/sdk_sandbox_next.te"
###
### SDK Sandbox process.
###
### This file defines the security policy for the sdk sandbox processes
### for a test set of restrictions. These restrictions will be adapted
### with modifications, into the set of restrictions for the next SDK
### level.
type sdk_sandbox_next, domain, coredomain, sdk_sandbox_all;
#line 10
typeattribute sdk_sandbox_next netdomain;
#line 10
#line 11
typeattribute sdk_sandbox_next appdomain;
#line 11
# Label tmpfs objects for all apps.
#line 11
type_transition sdk_sandbox_next tmpfs:file appdomain_tmpfs;
#line 11
#line 11
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 11
type sdk_sandbox_next_userfaultfd;
#line 11
type_transition sdk_sandbox_next sdk_sandbox_next:anon_inode sdk_sandbox_next_userfaultfd "[userfaultfd]";
#line 11
# Allow domain to create/use userfaultfd anon_inode.
#line 11
allow sdk_sandbox_next sdk_sandbox_next_userfaultfd:anon_inode { create ioctl read };
#line 11
# Suppress errors generate during bugreport
#line 11
dontaudit su sdk_sandbox_next_userfaultfd:anon_inode *;
#line 11
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 11
neverallow { domain -sdk_sandbox_next } sdk_sandbox_next_userfaultfd:anon_inode *;
#line 11
#line 11
allow sdk_sandbox_next appdomain_tmpfs:file { execute getattr map read write };
#line 11
neverallow { sdk_sandbox_next -runas_app -shell -simpleperf } { domain -sdk_sandbox_next }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 11
neverallow { appdomain -runas_app -shell -simpleperf -sdk_sandbox_next } sdk_sandbox_next:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 11
# The Android security model guarantees the confidentiality and integrity
#line 11
# of application data and execution state. Ptrace bypasses those
#line 11
# confidentiality guarantees. Disallow ptrace access from system components to
#line 11
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 11
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 11
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 11
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 11
# live lock conditions.
#line 11
neverallow { domain -sdk_sandbox_next -crash_dump -runas_app -simpleperf } sdk_sandbox_next:process ptrace;
#line 11
# Allow finding services. This is different from ephemeral_app policy.
# Adding services manually to the allowlist is preferred hence app_api_service is not used.
allow sdk_sandbox_next {
activity_service
activity_task_service
appops_service
audio_service
audioserver_service
batteryproperties_service
batterystats_service
connectivity_service
connmetrics_service
deviceidle_service
display_service
dropbox_service
font_service
game_service
gpu_service
graphicsstats_service
hardware_properties_service
hint_service
imms_service
input_method_service
input_service
IProxyService_service
ipsec_service
launcherapps_service
legacy_permission_service
light_service
locale_service
media_communication_service
mediaextractor_service
mediametrics_service
media_projection_service
media_router_service
mediaserver_service
media_session_service
memtrackproxy_service
midi_service
netpolicy_service
netstats_service
network_management_service
notification_service
package_service
permission_checker_service
permission_service
permissionmgr_service
platform_compat_service
power_service
procstats_service
registry_service
restrictions_service
rttmanager_service
search_service
selection_toolbar_service
sensor_privacy_service
sensorservice_service
servicediscovery_service
settings_service
speech_recognition_service
statusbar_service
storagestats_service
surfaceflinger_service
telecom_service
tethering_service
textclassification_service
textservices_service
texttospeech_service
thermal_service
translation_service
tv_iapp_service
tv_input_service
uimode_service
vcn_management_service
webviewupdate_service
}:service_manager find;
#line 1 "system/sepolicy/private/secure_element.te"
# secure element subsystem
typeattribute secure_element coredomain;
#line 3
typeattribute secure_element appdomain;
#line 3
# Label tmpfs objects for all apps.
#line 3
type_transition secure_element tmpfs:file appdomain_tmpfs;
#line 3
#line 3
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 3
type secure_element_userfaultfd;
#line 3
type_transition secure_element secure_element:anon_inode secure_element_userfaultfd "[userfaultfd]";
#line 3
# Allow domain to create/use userfaultfd anon_inode.
#line 3
allow secure_element secure_element_userfaultfd:anon_inode { create ioctl read };
#line 3
# Suppress errors generate during bugreport
#line 3
dontaudit su secure_element_userfaultfd:anon_inode *;
#line 3
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 3
neverallow { domain -secure_element } secure_element_userfaultfd:anon_inode *;
#line 3
#line 3
allow secure_element appdomain_tmpfs:file { execute getattr map read write };
#line 3
neverallow { secure_element -runas_app -shell -simpleperf } { domain -secure_element }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 3
neverallow { appdomain -runas_app -shell -simpleperf -secure_element } secure_element:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 3
# The Android security model guarantees the confidentiality and integrity
#line 3
# of application data and execution state. Ptrace bypasses those
#line 3
# confidentiality guarantees. Disallow ptrace access from system components to
#line 3
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 3
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 3
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 3
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 3
# live lock conditions.
#line 3
neverallow { domain -secure_element -crash_dump -runas_app -simpleperf } secure_element:process ptrace;
#line 3
#line 5
typeattribute secure_element binderservicedomain;
#line 5
#line 6
allow secure_element secure_element_service:service_manager { add find };
#line 6
neverallow { domain -secure_element } secure_element_service:service_manager add;
#line 6
#line 6
# On debug builds with root, allow binder services to use binder over TCP.
#line 6
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 6
#line 6
allow secure_element app_api_service:service_manager find;
#line 9
typeattribute secure_element halclientdomain;
#line 9
typeattribute secure_element hal_secure_element_client;
#line 9
#line 9
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 9
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 9
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 9
#line 9
typeattribute secure_element hal_secure_element;
#line 9
# Find passthrough HAL implementations
#line 9
allow hal_secure_element system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 9
allow hal_secure_element vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 9
allow hal_secure_element vendor_file:file { read open getattr execute map };
#line 9
#line 9
# already open bugreport file descriptors may be shared with
# the secure element process, from a file in
# /data/data/com.android.shell/files/bugreports/bugreport-*.
allow secure_element shell_data_file:file read;
allow secure_element vendor_uuid_mapping_config_file:file { getattr open read ioctl lock map watch watch_reads };
#line 1 "system/sepolicy/private/service.te"
type adaptive_auth_service, system_server_service, service_manager_type;
type ambient_context_service, app_api_service, system_server_service, service_manager_type;
type attention_service, system_server_service, service_manager_type;
type bg_install_control_service, system_api_service, system_server_service, service_manager_type;
type compos_service, service_manager_type;
type communal_service, app_api_service, system_server_service, service_manager_type;
type dynamic_system_service, system_api_service, system_server_service, service_manager_type;
type feature_flags_service, app_api_service, system_server_service, service_manager_type;
type gsi_service, service_manager_type;
type incidentcompanion_service, app_api_service, system_api_service, system_server_service, service_manager_type;
type logcat_service, system_server_service, service_manager_type;
type logd_service, service_manager_type;
type mediatuner_service, app_api_service, service_manager_type;
type profcollectd_service, service_manager_type;
type resolver_service, system_server_service, service_manager_type;
type rkpd_registrar_service, service_manager_type;
type rkpd_refresh_service, service_manager_type;
type safety_center_service, app_api_service, system_api_service, system_server_service, service_manager_type;
type stats_service, service_manager_type;
type statsbootstrap_service, system_server_service, service_manager_type;
type statscompanion_service, system_server_service, service_manager_type;
type statsmanager_service, system_api_service, system_server_service, service_manager_type;
type tracingproxy_service, system_server_service, service_manager_type;
type transparency_service, system_server_service, service_manager_type;
#line 28
#line 31
type uce_service, service_manager_type;
type wearable_sensing_service, app_api_service, system_server_service, service_manager_type;
#line 1 "system/sepolicy/private/servicemanager.te"
typeattribute servicemanager coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init servicemanager_exec:file { getattr open read execute map };
#line 3
allow init servicemanager:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow servicemanager servicemanager_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init servicemanager:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init servicemanager:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init servicemanager_exec:process servicemanager;
#line 3
#line 3
#line 5
allow servicemanager runtime_event_log_tags_file:file { getattr open read ioctl lock map watch watch_reads };
#line 5
#line 7
#line 7
allow servicemanager property_socket:sock_file write;
#line 7
allow servicemanager init:unix_stream_socket connectto;
#line 7
#line 7
allow servicemanager ctl_interface_start_prop:property_service set;
#line 7
#line 7
allow servicemanager ctl_interface_start_prop:file { getattr open read map };
#line 7
#line 7
#line 8
#line 8
allow servicemanager property_socket:sock_file write;
#line 8
allow servicemanager init:unix_stream_socket connectto;
#line 8
#line 8
allow servicemanager servicemanager_prop:property_service set;
#line 8
#line 8
allow servicemanager servicemanager_prop:file { getattr open read map };
#line 8
#line 8
# servicemanager is using bootstrap bionic
#line 11
allow servicemanager system_bootstrap_lib_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 11
allow servicemanager system_bootstrap_lib_file:file { execute read open getattr map };
#line 11
# servicemanager is using apex_info via libvintf
#line 14
allow servicemanager apex_mnt_dir:dir { open getattr read search ioctl lock watch watch_reads };
#line 14
allow servicemanager apex_info_file:file { getattr open read ioctl lock map watch watch_reads };
#line 14
#line 14
allow servicemanager vendor_apex_metadata_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 14
allow servicemanager vendor_apex_metadata_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 14
#line 14
#line 1 "system/sepolicy/private/sgdisk.te"
typeattribute sgdisk coredomain;
#line 1 "system/sepolicy/private/shared_relro.te"
typeattribute shared_relro coredomain;
# The shared relro process is a Java program forked from the zygote, so it
# inherits from app to get basic permissions it needs to run.
#line 5
typeattribute shared_relro appdomain;
#line 5
# Label tmpfs objects for all apps.
#line 5
type_transition shared_relro tmpfs:file appdomain_tmpfs;
#line 5
#line 5
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 5
type shared_relro_userfaultfd;
#line 5
type_transition shared_relro shared_relro:anon_inode shared_relro_userfaultfd "[userfaultfd]";
#line 5
# Allow domain to create/use userfaultfd anon_inode.
#line 5
allow shared_relro shared_relro_userfaultfd:anon_inode { create ioctl read };
#line 5
# Suppress errors generate during bugreport
#line 5
dontaudit su shared_relro_userfaultfd:anon_inode *;
#line 5
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 5
neverallow { domain -shared_relro } shared_relro_userfaultfd:anon_inode *;
#line 5
#line 5
allow shared_relro appdomain_tmpfs:file { execute getattr map read write };
#line 5
neverallow { shared_relro -runas_app -shell -simpleperf } { domain -shared_relro }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 5
neverallow { appdomain -runas_app -shell -simpleperf -shared_relro } shared_relro:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 5
# The Android security model guarantees the confidentiality and integrity
#line 5
# of application data and execution state. Ptrace bypasses those
#line 5
# confidentiality guarantees. Disallow ptrace access from system components to
#line 5
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 5
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 5
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 5
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 5
# live lock conditions.
#line 5
neverallow { domain -shared_relro -crash_dump -runas_app -simpleperf } shared_relro:process ptrace;
#line 5
allow shared_relro shared_relro_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow shared_relro shared_relro_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow shared_relro activity_service:service_manager find;
allow shared_relro webviewupdate_service:service_manager find;
allow shared_relro package_service:service_manager find;
# StrictMode may attempt to find this service, failure is harmless.
dontaudit shared_relro network_management_service:service_manager find;
#line 1 "system/sepolicy/private/shell.te"
typeattribute shell coredomain, mlstrustedsubject;
# allow shell input injection
allow shell uhid_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# systrace support - allow atrace to run
allow shell debugfs_tracing_debug:dir { open getattr read search ioctl lock watch watch_reads };
allow shell debugfs_tracing:dir { open getattr read search ioctl lock watch watch_reads };
allow shell debugfs_tracing:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow shell debugfs_trace_marker:file getattr;
allow shell atrace_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
#line 15
# read config.gz for CTS purposes
allow shell config_gz:file { getattr open read ioctl lock map watch watch_reads };
# allow reading tombstones. users can already use bugreports to get those.
allow shell tombstone_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow shell tombstone_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Run app_process.
# XXX Transition into its own domain?
#line 26
typeattribute shell appdomain;
#line 26
# Label tmpfs objects for all apps.
#line 26
type_transition shell tmpfs:file appdomain_tmpfs;
#line 26
#line 26
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 26
type shell_userfaultfd;
#line 26
type_transition shell shell:anon_inode shell_userfaultfd "[userfaultfd]";
#line 26
# Allow domain to create/use userfaultfd anon_inode.
#line 26
allow shell shell_userfaultfd:anon_inode { create ioctl read };
#line 26
# Suppress errors generate during bugreport
#line 26
dontaudit su shell_userfaultfd:anon_inode *;
#line 26
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 26
neverallow { domain -shell } shell_userfaultfd:anon_inode *;
#line 26
#line 26
allow shell appdomain_tmpfs:file { execute getattr map read write };
#line 26
neverallow { shell -runas_app -shell -simpleperf } { domain -shell }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 26
neverallow { appdomain -runas_app -shell -simpleperf -shell } shell:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 26
# The Android security model guarantees the confidentiality and integrity
#line 26
# of application data and execution state. Ptrace bypasses those
#line 26
# confidentiality guarantees. Disallow ptrace access from system components to
#line 26
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 26
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 26
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 26
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 26
# live lock conditions.
#line 26
neverallow { domain -shell -crash_dump -runas_app -simpleperf } shell:process ptrace;
#line 26
# allow shell to call dumpsys storaged
#line 29
# Call the server domain and optionally transfer references to it.
#line 29
allow shell storaged:binder { call transfer };
#line 29
# Allow the serverdomain to transfer references to the client on the reply.
#line 29
allow storaged shell:binder transfer;
#line 29
# Receive and use open files from the server.
#line 29
allow shell storaged:fd use;
#line 29
# Perform SELinux access checks, needed for CTS
#line 32
#line 32
allow shell selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 32
allow shell selinuxfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 32
#line 32
allow shell selinuxfs:file { open append write lock map };
#line 32
allow shell kernel:security compute_av;
#line 32
allow shell self:netlink_selinux_socket { read write create getattr setattr lock relabelfrom relabelto append bind connect listen accept getopt setopt shutdown recvfrom sendto name_bind };
#line 32
#line 33
#line 33
allow shell selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 33
allow shell selinuxfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 33
#line 33
allow shell selinuxfs:file { open append write lock map };
#line 33
allow shell kernel:security check_context;
#line 33
# Control Perfetto traced and obtain traces from it.
# Needed for Studio and debugging.
#line 37
allow shell traced_consumer_socket:sock_file write;
#line 37
allow shell traced:unix_stream_socket connectto;
#line 37
# Allow shell binaries to write trace data to Perfetto. Used for testing and
# cmdline utils.
#line 41
allow shell traced:fd use;
#line 41
allow shell traced_tmpfs:file { read write getattr map };
#line 41
#line 41
allow shell traced_producer_socket:sock_file write;
#line 41
allow shell traced:unix_stream_socket connectto;
#line 41
#line 41
#line 41
# Also allow the service to use the producer file descriptors. This is
#line 41
# necessary when the producer is creating the shared memory, as it will be
#line 41
# passed to the service as a file descriptor (obtained from memfd_create).
#line 41
allow traced shell:fd use;
#line 41
#line 43
# Allow the necessary permissions.
#line 43
#line 43
# Old domain may exec the file and transition to the new domain.
#line 43
allow shell vendor_shell_exec:file { getattr open read execute map };
#line 43
allow shell vendor_shell:process transition;
#line 43
# New domain is entered by executing the file.
#line 43
allow vendor_shell vendor_shell_exec:file { entrypoint open read execute getattr map };
#line 43
# New domain can send SIGCHLD to its caller.
#line 43
allow vendor_shell shell:process sigchld;
#line 43
# Enable AT_SECURE, i.e. libc secure mode.
#line 43
dontaudit shell vendor_shell:process noatsecure;
#line 43
# XXX dontaudit candidate but requires further study.
#line 43
allow shell vendor_shell:process { siginh rlimitinh };
#line 43
#line 43
# Make the transition occur by default.
#line 43
type_transition shell vendor_shell_exec:process vendor_shell;
#line 43
# Allow shell binaries to exec the perfetto cmdline util and have that
# transition into its own domain, so that it behaves consistently to
# when exec()-d by statsd.
#line 48
# Allow the necessary permissions.
#line 48
#line 48
# Old domain may exec the file and transition to the new domain.
#line 48
allow shell perfetto_exec:file { getattr open read execute map };
#line 48
allow shell perfetto:process transition;
#line 48
# New domain is entered by executing the file.
#line 48
allow perfetto perfetto_exec:file { entrypoint open read execute getattr map };
#line 48
# New domain can send SIGCHLD to its caller.
#line 48
allow perfetto shell:process sigchld;
#line 48
# Enable AT_SECURE, i.e. libc secure mode.
#line 48
dontaudit shell perfetto:process noatsecure;
#line 48
# XXX dontaudit candidate but requires further study.
#line 48
allow shell perfetto:process { siginh rlimitinh };
#line 48
#line 48
# Make the transition occur by default.
#line 48
type_transition shell perfetto_exec:process perfetto;
#line 48
# Allow to send SIGINT to perfetto when daemonized.
allow shell perfetto:process signal;
# Allow shell to run adb shell cmd stats commands. Needed for CTS.
#line 53
# Call the server domain and optionally transfer references to it.
#line 53
allow shell statsd:binder { call transfer };
#line 53
# Allow the serverdomain to transfer references to the client on the reply.
#line 53
allow statsd shell:binder transfer;
#line 53
# Receive and use open files from the server.
#line 53
allow shell statsd:fd use;
#line 53
;
# Allow shell to read and unlink traces stored in /data/misc/a11ytraces.
#line 59
# Allow shell to read and unlink traces stored in /data/misc/perfetto-traces.
allow shell perfetto_traces_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow shell perfetto_traces_data_file:file { { getattr open read ioctl lock map watch watch_reads } unlink };
# ... and /data/misc/perfetto-traces/bugreport/ .
allow shell perfetto_traces_bugreport_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow shell perfetto_traces_bugreport_data_file:file { { getattr open read ioctl lock map watch watch_reads } unlink };
# Allow shell to create/remove configs stored in /data/misc/perfetto-configs.
allow shell perfetto_configs_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow shell perfetto_configs_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow shell to run adb shell cmd gpu commands.
#line 73
# Call the server domain and optionally transfer references to it.
#line 73
allow shell gpuservice:binder { call transfer };
#line 73
# Allow the serverdomain to transfer references to the client on the reply.
#line 73
allow gpuservice shell:binder transfer;
#line 73
# Receive and use open files from the server.
#line 73
allow shell gpuservice:fd use;
#line 73
;
# Allow shell to use atrace HAL
#line 76
typeattribute shell halclientdomain;
#line 76
typeattribute shell hal_atrace_client;
#line 76
#line 76
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 76
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 76
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 76
#line 76
typeattribute shell hal_atrace;
#line 76
# Find passthrough HAL implementations
#line 76
allow hal_atrace system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 76
allow hal_atrace vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 76
allow hal_atrace vendor_file:file { read open getattr execute map };
#line 76
#line 76
# For hostside tests such as CTS listening ports test.
allow shell proc_net_tcp_udp:file { getattr open read ioctl lock map watch watch_reads };
# The dl.exec_linker* tests need to execute /system/bin/linker
# b/124789393
allow shell system_linker_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Renderscript host side tests depend on being able to execute
# /system/bin/bcc (b/126388046)
allow shell rs_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Allow (host-driven) ART run-tests to execute dex2oat, in order to
# check ART's compiler.
allow shell dex2oat_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow shell dex2oat_exec:lnk_file read;
# Allow shell to start and comminicate with lpdumpd.
#line 95
#line 95
allow shell property_socket:sock_file write;
#line 95
allow shell init:unix_stream_socket connectto;
#line 95
#line 95
allow shell lpdumpd_prop:property_service set;
#line 95
#line 95
allow shell lpdumpd_prop:file { getattr open read map };
#line 95
#line 95
;
#line 96
# Call the server domain and optionally transfer references to it.
#line 96
allow shell lpdumpd:binder { call transfer };
#line 96
# Allow the serverdomain to transfer references to the client on the reply.
#line 96
allow lpdumpd shell:binder transfer;
#line 96
# Receive and use open files from the server.
#line 96
allow shell lpdumpd:fd use;
#line 96
# Allow shell to set and read value of properties used for CTS tests of
# userspace reboot
#line 100
#line 100
allow shell property_socket:sock_file write;
#line 100
allow shell init:unix_stream_socket connectto;
#line 100
#line 100
allow shell userspace_reboot_test_prop:property_service set;
#line 100
#line 100
allow shell userspace_reboot_test_prop:file { getattr open read map };
#line 100
#line 100
# Allow shell to set this property to disable charging.
#line 103
#line 103
allow shell property_socket:sock_file write;
#line 103
allow shell init:unix_stream_socket connectto;
#line 103
#line 103
allow shell power_debug_prop:property_service set;
#line 103
#line 103
allow shell power_debug_prop:file { getattr open read map };
#line 103
#line 103
# Allow shell to set this property used for rollback tests
#line 106
#line 106
allow shell property_socket:sock_file write;
#line 106
allow shell init:unix_stream_socket connectto;
#line 106
#line 106
allow shell rollback_test_prop:property_service set;
#line 106
#line 106
allow shell rollback_test_prop:file { getattr open read map };
#line 106
#line 106
# Allow shell to set RKP properties for testing purposes
#line 109
#line 109
allow shell property_socket:sock_file write;
#line 109
allow shell init:unix_stream_socket connectto;
#line 109
#line 109
allow shell remote_prov_prop:property_service set;
#line 109
#line 109
allow shell remote_prov_prop:file { getattr open read map };
#line 109
#line 109
# Allow shell to get encryption policy of /data/local/tmp/, for CTS
allowxperm shell shell_data_file:dir ioctl {
0x400c6615
0xc0096616
};
# Allow shell to execute simpleperf without a domain transition.
allow shell simpleperf_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
#line 129
# Allow shell to run remount command.
allow shell remount_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Allow shell to call perf_event_open for profiling other shell processes, but
# not the whole system.
allow shell self:perf_event { open read write kernel };
neverallow shell self:perf_event ~{ open read write kernel };
# Allow shell to read microdroid vendor image
#line 140
allow shell vendor_microdroid_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 140
allow shell vendor_microdroid_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 140
# Allow shell to read /apex/apex-info-list.xml and the vendor apexes
allow shell apex_info_file:file { getattr open read ioctl lock map watch watch_reads };
allow shell vendor_apex_file:file { getattr open read ioctl lock map watch watch_reads };
allow shell vendor_apex_file:dir { open getattr read search ioctl lock watch watch_reads };
allow shell vendor_apex_metadata_file:dir { open getattr read search ioctl lock watch watch_reads };
# Allow shell to read updated APEXes under /data/apex
allow shell apex_data_file:dir search;
allow shell staging_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Set properties.
#line 153
#line 153
allow shell property_socket:sock_file write;
#line 153
allow shell init:unix_stream_socket connectto;
#line 153
#line 153
allow shell shell_prop:property_service set;
#line 153
#line 153
allow shell shell_prop:file { getattr open read map };
#line 153
#line 153
#line 154
#line 154
allow shell property_socket:sock_file write;
#line 154
allow shell init:unix_stream_socket connectto;
#line 154
#line 154
allow shell ctl_bugreport_prop:property_service set;
#line 154
#line 154
allow shell ctl_bugreport_prop:file { getattr open read map };
#line 154
#line 154
#line 155
#line 155
allow shell property_socket:sock_file write;
#line 155
allow shell init:unix_stream_socket connectto;
#line 155
#line 155
allow shell ctl_dumpstate_prop:property_service set;
#line 155
#line 155
allow shell ctl_dumpstate_prop:file { getattr open read map };
#line 155
#line 155
#line 156
#line 156
allow shell property_socket:sock_file write;
#line 156
allow shell init:unix_stream_socket connectto;
#line 156
#line 156
allow shell dumpstate_prop:property_service set;
#line 156
#line 156
allow shell dumpstate_prop:file { getattr open read map };
#line 156
#line 156
#line 157
#line 157
allow shell property_socket:sock_file write;
#line 157
allow shell init:unix_stream_socket connectto;
#line 157
#line 157
allow shell exported_dumpstate_prop:property_service set;
#line 157
#line 157
allow shell exported_dumpstate_prop:file { getattr open read map };
#line 157
#line 157
#line 158
#line 158
allow shell property_socket:sock_file write;
#line 158
allow shell init:unix_stream_socket connectto;
#line 158
#line 158
allow shell debug_prop:property_service set;
#line 158
#line 158
allow shell debug_prop:file { getattr open read map };
#line 158
#line 158
#line 159
#line 159
allow shell property_socket:sock_file write;
#line 159
allow shell init:unix_stream_socket connectto;
#line 159
#line 159
allow shell perf_drop_caches_prop:property_service set;
#line 159
#line 159
allow shell perf_drop_caches_prop:file { getattr open read map };
#line 159
#line 159
#line 160
#line 160
allow shell property_socket:sock_file write;
#line 160
allow shell init:unix_stream_socket connectto;
#line 160
#line 160
allow shell powerctl_prop:property_service set;
#line 160
#line 160
allow shell powerctl_prop:file { getattr open read map };
#line 160
#line 160
#line 161
#line 161
allow shell property_socket:sock_file write;
#line 161
allow shell init:unix_stream_socket connectto;
#line 161
#line 161
allow shell log_tag_prop:property_service set;
#line 161
#line 161
allow shell log_tag_prop:file { getattr open read map };
#line 161
#line 161
#line 162
#line 162
allow shell property_socket:sock_file write;
#line 162
allow shell init:unix_stream_socket connectto;
#line 162
#line 162
allow shell wifi_log_prop:property_service set;
#line 162
#line 162
allow shell wifi_log_prop:file { getattr open read map };
#line 162
#line 162
# Allow shell to start/stop traced via the persist.traced.enable
# property (which also takes care of /data/misc initialization).
#line 165
#line 165
allow shell property_socket:sock_file write;
#line 165
allow shell init:unix_stream_socket connectto;
#line 165
#line 165
allow shell traced_enabled_prop:property_service set;
#line 165
#line 165
allow shell traced_enabled_prop:file { getattr open read map };
#line 165
#line 165
# adjust SELinux audit rates
#line 167
#line 167
allow shell property_socket:sock_file write;
#line 167
allow shell init:unix_stream_socket connectto;
#line 167
#line 167
allow shell logd_auditrate_prop:property_service set;
#line 167
#line 167
allow shell logd_auditrate_prop:file { getattr open read map };
#line 167
#line 167
# adjust is_loggable properties
# logpersist script
# Allow shell to start/stop heapprofd via the persist.heapprofd.enable
# property.
#line 174
#line 174
allow shell property_socket:sock_file write;
#line 174
allow shell init:unix_stream_socket connectto;
#line 174
#line 174
allow shell heapprofd_enabled_prop:property_service set;
#line 174
#line 174
allow shell heapprofd_enabled_prop:file { getattr open read map };
#line 174
#line 174
# Allow shell to start/stop traced_perf via the persist.traced_perf.enable
# property.
#line 177
#line 177
allow shell property_socket:sock_file write;
#line 177
allow shell init:unix_stream_socket connectto;
#line 177
#line 177
allow shell traced_perf_enabled_prop:property_service set;
#line 177
#line 177
allow shell traced_perf_enabled_prop:file { getattr open read map };
#line 177
#line 177
# Allow shell to start/stop gsid via ctl.start|stop|restart gsid.
#line 179
#line 179
allow shell property_socket:sock_file write;
#line 179
allow shell init:unix_stream_socket connectto;
#line 179
#line 179
allow shell ctl_gsid_prop:property_service set;
#line 179
#line 179
allow shell ctl_gsid_prop:file { getattr open read map };
#line 179
#line 179
#line 180
#line 180
allow shell property_socket:sock_file write;
#line 180
allow shell init:unix_stream_socket connectto;
#line 180
#line 180
allow shell ctl_snapuserd_prop:property_service set;
#line 180
#line 180
allow shell ctl_snapuserd_prop:file { getattr open read map };
#line 180
#line 180
# Allow shell to enable Dynamic System Update
#line 182
#line 182
allow shell property_socket:sock_file write;
#line 182
allow shell init:unix_stream_socket connectto;
#line 182
#line 182
allow shell dynamic_system_prop:property_service set;
#line 182
#line 182
allow shell dynamic_system_prop:file { getattr open read map };
#line 182
#line 182
# Allow shell to mock an OTA using persist.pm.mock-upgrade
#line 184
#line 184
allow shell property_socket:sock_file write;
#line 184
allow shell init:unix_stream_socket connectto;
#line 184
#line 184
allow shell mock_ota_prop:property_service set;
#line 184
#line 184
allow shell mock_ota_prop:file { getattr open read map };
#line 184
#line 184
# Read device's serial number from system properties
#line 187
allow shell serialno_prop:file { getattr open read map };
#line 187
# Allow shell to read the vendor security patch level for CTS
#line 190
allow shell vendor_security_patch_level_prop:file { getattr open read map };
#line 190
# Read state of logging-related properties
#line 193
allow shell device_logging_prop:file { getattr open read map };
#line 193
# Read state of boot reason properties
#line 196
allow shell bootloader_boot_reason_prop:file { getattr open read map };
#line 196
#line 197
allow shell last_boot_reason_prop:file { getattr open read map };
#line 197
#line 198
allow shell system_boot_reason_prop:file { getattr open read map };
#line 198
# Allow shell to execute the remote key provisioning factory tool
#line 201
# Call the server domain and optionally transfer references to it.
#line 201
allow shell hal_keymint:binder { call transfer };
#line 201
# Allow the serverdomain to transfer references to the client on the reply.
#line 201
allow hal_keymint shell:binder transfer;
#line 201
# Receive and use open files from the server.
#line 201
allow shell hal_keymint:fd use;
#line 201
# Allow reading the outcome of perf_event_open LSM support test for CTS.
#line 204
allow shell init_perf_lsm_hooks_prop:file { getattr open read map };
#line 204
# Allow shell to read boot image timestamps and fingerprints.
#line 207
allow shell build_bootimage_prop:file { getattr open read map };
#line 207
# Allow shell to read odsign verification properties
#line 210
allow shell odsign_prop:file { getattr open read map };
#line 210
# Allow shell to read the keystore key contexts files. Used by native tests to test label lookup.
allow shell keystore2_key_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow shell to access the keystore2_key namespace shell_key. Mainly used for native tests.
allow shell shell_key:keystore2_key { delete rebind use get_info update };
# Allow shell to open and execute memfd files for minijail unit tests.
#line 223
# Allow shell to write db.log.detailed, db.log.slow_query_threshold*
#line 226
#line 226
allow shell property_socket:sock_file write;
#line 226
allow shell init:unix_stream_socket connectto;
#line 226
#line 226
allow shell sqlite_log_prop:property_service set;
#line 226
#line 226
allow shell sqlite_log_prop:file { getattr open read map };
#line 226
#line 226
# Allow shell to write MTE properties even on user builds.
#line 229
#line 229
allow shell property_socket:sock_file write;
#line 229
allow shell init:unix_stream_socket connectto;
#line 229
#line 229
allow shell arm64_memtag_prop:property_service set;
#line 229
#line 229
allow shell arm64_memtag_prop:file { getattr open read map };
#line 229
#line 229
# Allow shell to read the dm-verity props on user builds.
#line 232
allow shell verity_status_prop:file { getattr open read map };
#line 232
# Allow shell to read Virtual A/B related properties
#line 235
allow shell virtual_ab_prop:file { getattr open read map };
#line 235
# Never allow others to set or get the perf.drop_caches property.
neverallow { domain -shell -init } perf_drop_caches_prop:property_service set;
neverallow { domain -shell -init -dumpstate } perf_drop_caches_prop:file read;
# Allow ReadDefaultFstab() for CTS.
#line 242
allow shell { metadata_file gsi_metadata_file_type }:dir search;
#line 242
allow shell gsi_public_metadata_file:file { getattr open read ioctl lock map watch watch_reads };
#line 242
allow shell { proc_bootconfig proc_cmdline }:file { getattr open read ioctl lock map watch watch_reads };
#line 242
# Allow shell read access to /apex/apex-info-list.xml for CTS.
allow shell apex_info_file:file { getattr open read ioctl lock map watch watch_reads };
# Let the shell user call virtualizationservice (and
# virtualizationservice call back to shell) for debugging.
#line 249
# Transition to virtualizationmanager when the client executes it.
#line 249
#line 249
# Allow the necessary permissions.
#line 249
#line 249
# Old domain may exec the file and transition to the new domain.
#line 249
allow shell virtualizationmanager_exec:file { getattr open read execute map };
#line 249
allow shell virtualizationmanager:process transition;
#line 249
# New domain is entered by executing the file.
#line 249
allow virtualizationmanager virtualizationmanager_exec:file { entrypoint open read execute getattr map };
#line 249
# New domain can send SIGCHLD to its caller.
#line 249
allow virtualizationmanager shell:process sigchld;
#line 249
# Enable AT_SECURE, i.e. libc secure mode.
#line 249
dontaudit shell virtualizationmanager:process noatsecure;
#line 249
# XXX dontaudit candidate but requires further study.
#line 249
allow shell virtualizationmanager:process { siginh rlimitinh };
#line 249
#line 249
# Make the transition occur by default.
#line 249
type_transition shell virtualizationmanager_exec:process virtualizationmanager;
#line 249
#line 249
# Allow virtualizationmanager to communicate over UDS with the client.
#line 249
allow { virtualizationmanager crosvm } shell:unix_stream_socket { ioctl getattr read write };
#line 249
# Let the client pass file descriptors to virtualizationmanager and on to crosvm.
#line 249
allow { virtualizationmanager crosvm } shell:fd use;
#line 249
# Let the client use file descriptors created by virtualizationmanager.
#line 249
allow shell virtualizationmanager:fd use;
#line 249
# Allow piping console log to the client
#line 249
allow { virtualizationmanager crosvm } shell:fifo_file { ioctl getattr read write };
#line 249
# Allow client to read/write vsock created by virtualizationmanager to communicate with the VM
#line 249
# that it created. Notice that we do not grant permission to create a vsock;
#line 249
# the client can only connect to VMs that it owns.
#line 249
allow shell virtualizationmanager:vsock_socket { getattr getopt read write };
#line 249
# Allow client to inspect hypervisor capabilities
#line 249
#line 249
allow shell hypervisor_prop:file { getattr open read map };
#line 249
#line 249
# Allow client to read (but not open) the crashdump provided by virtualizationmanager
#line 249
allow shell virtualizationservice_data_file:file { getattr read };
#line 249
# Allow shell to set persist.wm.debug properties
# Allow shell to write GWP-ASan properties even on user builds.
#line 255
#line 255
allow shell property_socket:sock_file write;
#line 255
allow shell init:unix_stream_socket connectto;
#line 255
#line 255
allow shell gwp_asan_prop:property_service set;
#line 255
#line 255
allow shell gwp_asan_prop:file { getattr open read map };
#line 255
#line 255
# Allow shell to set persist.sysui.notification.builder_extras_override property
# Allow shell to set persist.sysui.notification.ranking_update_ashmem property
# Allow shell to read the build properties for attestation feature
#line 263
allow shell build_attestation_prop:file { getattr open read map };
#line 263
# Allow shell to execute oatdump.
allow shell oatdump_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
#line 1 "system/sepolicy/private/simpleperf.te"
# Domain used when running /system/bin/simpleperf to profile a specific app.
# Entered either by the app itself exec-ing the binary, or through
# simpleperf_app_runner (with shell as its origin). Certain other domains
# (runas_app, shell) can also exec this binary without a domain transition.
typeattribute simpleperf coredomain;
type simpleperf_exec, system_file_type, exec_type, file_type;
# Define apps that can be marked debuggable/profileable and be profiled by simpleperf.
#line 15
#line 17
# Allow the necessary permissions.
#line 17
#line 17
# Old domain may exec the file and transition to the new domain.
#line 17
allow { {
#line 17
ephemeral_app
#line 17
isolated_app
#line 17
platform_app
#line 17
priv_app
#line 17
untrusted_app_all
#line 17
} -runas_app } simpleperf_exec:file { getattr open read execute map };
#line 17
allow { {
#line 17
ephemeral_app
#line 17
isolated_app
#line 17
platform_app
#line 17
priv_app
#line 17
untrusted_app_all
#line 17
} -runas_app } simpleperf:process transition;
#line 17
# New domain is entered by executing the file.
#line 17
allow simpleperf simpleperf_exec:file { entrypoint open read execute getattr map };
#line 17
# New domain can send SIGCHLD to its caller.
#line 17
allow simpleperf { {
#line 17
ephemeral_app
#line 17
isolated_app
#line 17
platform_app
#line 17
priv_app
#line 17
untrusted_app_all
#line 17
} -runas_app }:process sigchld;
#line 17
# Enable AT_SECURE, i.e. libc secure mode.
#line 17
dontaudit { {
#line 17
ephemeral_app
#line 17
isolated_app
#line 17
platform_app
#line 17
priv_app
#line 17
untrusted_app_all
#line 17
} -runas_app } simpleperf:process noatsecure;
#line 17
# XXX dontaudit candidate but requires further study.
#line 17
allow { {
#line 17
ephemeral_app
#line 17
isolated_app
#line 17
platform_app
#line 17
priv_app
#line 17
untrusted_app_all
#line 17
} -runas_app } simpleperf:process { siginh rlimitinh };
#line 17
#line 17
# Make the transition occur by default.
#line 17
type_transition { {
#line 17
ephemeral_app
#line 17
isolated_app
#line 17
platform_app
#line 17
priv_app
#line 17
untrusted_app_all
#line 17
} -runas_app } simpleperf_exec:process simpleperf;
#line 17
# When running in this domain, simpleperf is scoped to profiling an individual
# app. The necessary MAC permissions for profiling are more maintainable and
# consistent if simpleperf is marked as an app domain as well (as, for example,
# it will then see the same set of system libraries as the app).
#line 23
typeattribute simpleperf appdomain;
#line 23
# Label tmpfs objects for all apps.
#line 23
type_transition simpleperf tmpfs:file appdomain_tmpfs;
#line 23
#line 23
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 23
type simpleperf_userfaultfd;
#line 23
type_transition simpleperf simpleperf:anon_inode simpleperf_userfaultfd "[userfaultfd]";
#line 23
# Allow domain to create/use userfaultfd anon_inode.
#line 23
allow simpleperf simpleperf_userfaultfd:anon_inode { create ioctl read };
#line 23
# Suppress errors generate during bugreport
#line 23
dontaudit su simpleperf_userfaultfd:anon_inode *;
#line 23
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 23
neverallow { domain -simpleperf } simpleperf_userfaultfd:anon_inode *;
#line 23
#line 23
allow simpleperf appdomain_tmpfs:file { execute getattr map read write };
#line 23
neverallow { simpleperf -runas_app -shell -simpleperf } { domain -simpleperf }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 23
neverallow { appdomain -runas_app -shell -simpleperf -simpleperf } simpleperf:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 23
# The Android security model guarantees the confidentiality and integrity
#line 23
# of application data and execution state. Ptrace bypasses those
#line 23
# confidentiality guarantees. Disallow ptrace access from system components to
#line 23
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 23
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 23
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 23
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 23
# live lock conditions.
#line 23
neverallow { domain -simpleperf -crash_dump -runas_app -simpleperf } simpleperf:process ptrace;
#line 23
#line 24
typeattribute simpleperf untrusted_app_all;
#line 24
# Allow ptrace attach to the target app, for reading JIT debug info (using
# process_vm_readv) during unwinding and symbolization.
allow simpleperf {
#line 28
ephemeral_app
#line 28
isolated_app
#line 28
platform_app
#line 28
priv_app
#line 28
untrusted_app_all
#line 28
}:process ptrace;
# Allow using perf_event_open syscall for profiling the target app.
allow simpleperf self:perf_event { open read write kernel };
# Allow /proc/<pid> access for the target app (for example, when trying to
# discover it by cmdline).
#line 35
allow simpleperf {
#line 35
ephemeral_app
#line 35
isolated_app
#line 35
platform_app
#line 35
priv_app
#line 35
untrusted_app_all
#line 35
}:dir { open getattr read search ioctl lock watch watch_reads };
#line 35
allow simpleperf {
#line 35
ephemeral_app
#line 35
isolated_app
#line 35
platform_app
#line 35
priv_app
#line 35
untrusted_app_all
#line 35
}:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 35
# Allow apps signalling simpleperf domain, which is the domain that the simpleperf
# profiler runs as when executed by the app. The signals are used to control
# the profiler (which would be profiling the app that is sending the signal).
allow {
#line 40
ephemeral_app
#line 40
isolated_app
#line 40
platform_app
#line 40
priv_app
#line 40
untrusted_app_all
#line 40
} simpleperf:process signal;
# Suppress denial logspam when simpleperf is trying to find a matching process
# by scanning /proc/<pid>/cmdline files. The /proc/<pid> directories are within
# the same domain as their respective processes, most of which this domain is
# not allowed to see.
dontaudit simpleperf domain:dir search;
# Neverallows:
# Profiling must be confined to the scope of an individual app.
neverallow simpleperf self:perf_event ~{ open read write kernel };
#line 1 "system/sepolicy/private/simpleperf_app_runner.te"
typeattribute simpleperf_app_runner coredomain;
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow shell simpleperf_app_runner_exec:file { getattr open read execute map };
#line 3
allow shell simpleperf_app_runner:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow simpleperf_app_runner simpleperf_app_runner_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
allow simpleperf_app_runner shell:process sigchld;
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit shell simpleperf_app_runner:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow shell simpleperf_app_runner:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition shell simpleperf_app_runner_exec:process simpleperf_app_runner;
#line 3
# run simpleperf_app_runner in adb shell.
allow simpleperf_app_runner adbd:fd use;
allow simpleperf_app_runner shell:fd use;
allow simpleperf_app_runner devpts:chr_file { read write ioctl };
# simpleperf_app_runner reads package information.
allow simpleperf_app_runner system_data_file:file { getattr open read ioctl lock map watch watch_reads };
allow simpleperf_app_runner system_data_file:lnk_file getattr;
allow simpleperf_app_runner packages_list_file:file { getattr open read ioctl lock map watch watch_reads };
# The app's data dir may be accessed through a symlink.
allow simpleperf_app_runner system_data_file:lnk_file read;
# simpleperf_app_runner switches to the app UID/GID.
allow simpleperf_app_runner self:{ capability cap_userns } { setuid setgid };
# simpleperf_app_runner switches to the app security context.
#line 22
#line 22
allow simpleperf_app_runner selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 22
allow simpleperf_app_runner selinuxfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 22
#line 22
allow simpleperf_app_runner selinuxfs:file { open append write lock map };
#line 22
allow simpleperf_app_runner kernel:security check_context;
#line 22
# validate context
allow simpleperf_app_runner self:process setcurrent;
allow simpleperf_app_runner { ephemeral_app isolated_app platform_app priv_app untrusted_app_all }:process dyntransition; # setcon
# simpleperf_app_runner/libselinux needs access to seapp_contexts_file to
# determine which domain to transition to.
allow simpleperf_app_runner seapp_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
# simpleperf_app_runner passes pipe fds.
# simpleperf_app_runner writes app type (debuggable or profileable) to pipe fds.
allow simpleperf_app_runner shell:fifo_file { read write };
# simpleperf_app_runner checks shell data paths.
# simpleperf_app_runner passes shell data fds.
allow simpleperf_app_runner shell_data_file:dir { getattr search };
allow simpleperf_app_runner shell_data_file:file { getattr write };
###
### neverallow rules
###
# simpleperf_app_runner cannot have capabilities other than CAP_SETUID and CAP_SETGID
neverallow simpleperf_app_runner self:{ capability cap_userns } ~{ setuid setgid };
neverallow simpleperf_app_runner self:{ capability2 cap2_userns } *;
#line 1 "system/sepolicy/private/simpleperf_boot.te"
# Domain used when running /system/bin/simpleperf to record boot-time profiles.
# It is started by init process. It's only available on userdebug/eng build.
type simpleperf_boot, domain, coredomain, mlstrustedsubject;
# /data/simpleperf_boot_data, used to store boot-time profiles.
type simpleperf_boot_data_file, file_type;
#line 59
#line 1 "system/sepolicy/private/slideshow.te"
typeattribute slideshow coredomain;
#line 1 "system/sepolicy/private/snapshotctl.te"
type snapshotctl, domain, coredomain;
type snapshotctl_exec, system_file_type, exec_type, file_type;
# Allow init to run snapshotctl and do auto domain transfer.
#line 5
#line 5
# Allow the necessary permissions.
#line 5
#line 5
# Old domain may exec the file and transition to the new domain.
#line 5
allow init snapshotctl_exec:file { getattr open read execute map };
#line 5
allow init snapshotctl:process transition;
#line 5
# New domain is entered by executing the file.
#line 5
allow snapshotctl snapshotctl_exec:file { entrypoint open read execute getattr map };
#line 5
# New domain can send SIGCHLD to its caller.
#line 5
#line 5
# Enable AT_SECURE, i.e. libc secure mode.
#line 5
dontaudit init snapshotctl:process noatsecure;
#line 5
# XXX dontaudit candidate but requires further study.
#line 5
allow init snapshotctl:process { siginh rlimitinh };
#line 5
#line 5
# Make the transition occur by default.
#line 5
type_transition init snapshotctl_exec:process snapshotctl;
#line 5
#line 5
;
# Allow to start gsid service.
#line 8
#line 8
allow snapshotctl property_socket:sock_file write;
#line 8
allow snapshotctl init:unix_stream_socket connectto;
#line 8
#line 8
allow snapshotctl ctl_gsid_prop:property_service set;
#line 8
#line 8
allow snapshotctl ctl_gsid_prop:file { getattr open read map };
#line 8
#line 8
# Allow to talk to gsid.
#line 11
# Call the servicemanager and transfer references to it.
#line 11
allow snapshotctl servicemanager:binder { call transfer };
#line 11
# Allow servicemanager to send out callbacks
#line 11
allow servicemanager snapshotctl:binder { call transfer };
#line 11
# servicemanager performs getpidcon on clients.
#line 11
allow servicemanager snapshotctl:dir search;
#line 11
allow servicemanager snapshotctl:file { read open };
#line 11
allow servicemanager snapshotctl:process getattr;
#line 11
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 11
# all domains in domain.te.
#line 11
allow snapshotctl gsi_service:service_manager find;
#line 13
# Call the server domain and optionally transfer references to it.
#line 13
allow snapshotctl gsid:binder { call transfer };
#line 13
# Allow the serverdomain to transfer references to the client on the reply.
#line 13
allow gsid snapshotctl:binder transfer;
#line 13
# Receive and use open files from the server.
#line 13
allow snapshotctl gsid:fd use;
#line 13
# Allow to create/read/write/delete OTA metadata files for snapshot status and COW file status.
allow snapshotctl metadata_file:dir search;
allow snapshotctl ota_metadata_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow snapshotctl ota_metadata_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow to get A/B slot suffix from device tree or kernel cmdline.
#line 21
allow snapshotctl sysfs_dt_firmware_android:dir { open getattr read search ioctl lock watch watch_reads };
#line 21
allow snapshotctl sysfs_dt_firmware_android:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 21
;
allow snapshotctl proc_cmdline:file { getattr open read ioctl lock map watch watch_reads };
# Needed to (re-)map logical partitions.
allow snapshotctl block_device:dir { open getattr read search ioctl lock watch watch_reads };
allow snapshotctl super_block_device:blk_file { getattr open read ioctl lock map watch watch_reads };
# Interact with device-mapper to collapse snapshots.
allow snapshotctl dm_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Needed to mutate device-mapper nodes.
allow snapshotctl self:{ capability cap_userns } sys_admin;
# Snapshotctl talk to boot control HAL to set merge status.
#line 35
# Call the hwservicemanager and transfer references to it.
#line 35
allow snapshotctl hwservicemanager:binder { call transfer };
#line 35
# Allow hwservicemanager to send out callbacks
#line 35
allow hwservicemanager snapshotctl:binder { call transfer };
#line 35
# hwservicemanager performs getpidcon on clients.
#line 35
allow hwservicemanager snapshotctl:dir search;
#line 35
allow hwservicemanager snapshotctl:file { read open map };
#line 35
allow hwservicemanager snapshotctl:process getattr;
#line 35
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 35
# all domains in domain.te.
#line 35
#line 36
typeattribute snapshotctl halclientdomain;
#line 36
typeattribute snapshotctl hal_bootctl_client;
#line 36
#line 36
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 36
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 36
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 36
#line 36
typeattribute snapshotctl hal_bootctl;
#line 36
# Find passthrough HAL implementations
#line 36
allow hal_bootctl system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 36
allow hal_bootctl vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 36
allow hal_bootctl vendor_file:file { read open getattr execute map };
#line 36
#line 36
# Allow snapshotctl to write to statsd socket.
#line 39
allow snapshotctl statsdw_socket:sock_file write;
#line 39
allow snapshotctl statsd:unix_dgram_socket sendto;
#line 39
# Logging
#line 45
#line 1 "system/sepolicy/private/snapuserd.te"
# snapuserd - Daemon for servicing dm-user requests for Virtual A/B snapshots.
type snapuserd, domain;
type snapuserd_exec, exec_type, file_type, system_file_type;
typeattribute snapuserd coredomain;
#line 7
#line 7
# Allow the necessary permissions.
#line 7
#line 7
# Old domain may exec the file and transition to the new domain.
#line 7
allow init snapuserd_exec:file { getattr open read execute map };
#line 7
allow init snapuserd:process transition;
#line 7
# New domain is entered by executing the file.
#line 7
allow snapuserd snapuserd_exec:file { entrypoint open read execute getattr map };
#line 7
# New domain can send SIGCHLD to its caller.
#line 7
#line 7
# Enable AT_SECURE, i.e. libc secure mode.
#line 7
dontaudit init snapuserd:process noatsecure;
#line 7
# XXX dontaudit candidate but requires further study.
#line 7
allow init snapuserd:process { siginh rlimitinh };
#line 7
#line 7
# Make the transition occur by default.
#line 7
type_transition init snapuserd_exec:process snapuserd;
#line 7
#line 7
allow snapuserd kmsg_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Allow snapuserd to reach block devices in /dev/block.
allow snapuserd block_device:dir search;
# Read /sys/block to find all the DM directories like (/sys/block/dm-X).
allow snapuserd sysfs:dir { open read };
# Read /sys/block/dm-X/dm/name (which is a symlink to
# /sys/devices/virtual/block/dm-X/dm/name) to identify the mapping between
# dm-X and dynamic partitions.
allow snapuserd sysfs_dm:dir { open read search };
allow snapuserd sysfs_dm:file { getattr open read ioctl lock map watch watch_reads };
# Reading and writing to /dev/block/dm-* (device-mapper) nodes.
allow snapuserd block_device:dir { open getattr read search ioctl lock watch watch_reads };
allow snapuserd dm_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow snapuserd dm_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Reading and writing to dm-user control nodes.
allow snapuserd dm_user_device:dir { open getattr read search ioctl lock watch watch_reads };
allow snapuserd dm_user_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Reading and writing to /dev/socket/snapuserd and snapuserd_proxy.
allow snapuserd snapuserd_socket:unix_stream_socket { accept listen getattr read write };
allow snapuserd snapuserd_proxy_socket:sock_file write;
# Required for setting GID to system while calling SetTaskProfile() API
allow snapuserd self:{ capability cap_userns } { setgid };
# This arises due to first-stage init opening /dev/null without F_CLOEXEC
# (see SetStdioToDevNull in init). When we fork() and execveat() snapuserd
# again, the descriptor leaks into the new process.
allow snapuserd kernel:fd use;
# snapuserd.* properties
#line 45
#line 45
allow snapuserd property_socket:sock_file write;
#line 45
allow snapuserd init:unix_stream_socket connectto;
#line 45
#line 45
allow snapuserd snapuserd_prop:property_service set;
#line 45
#line 45
allow snapuserd snapuserd_prop:file { getattr open read map };
#line 45
#line 45
#line 46
allow snapuserd virtual_ab_prop:file { getattr open read map };
#line 46
# For inotify watching for /dev/socket/snapuserd_proxy to appear.
allow snapuserd tmpfs:dir { read watch };
# Forbid anything other than snapuserd and init setting snapuserd properties.
neverallow {
domain
-snapuserd
-init
} snapuserd_prop:property_service set;
# Allow to read/write/create OTA metadata files
allow snapuserd metadata_file:dir search;
allow snapuserd ota_metadata_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow snapuserd ota_metadata_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# write to /data/misc/snapuserd_log
allow snapuserd snapuserd_log_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow snapuserd snapuserd_log_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Read /proc/stat to determine boot time
allow snapuserd proc_stat:file { getattr open read ioctl lock map watch watch_reads };
# This capability allows snapuserd to circumvent memlock rlimits while using
# io_uring. An Alternative would be to up the memlock rlimit for the snapuserd service.
allow snapuserd self:capability ipc_lock;
#line 73
# Set up a type_transition to "io_uring" named anonymous inode object.
#line 73
type snapuserd_iouring;
#line 73
type_transition snapuserd snapuserd:anon_inode snapuserd_iouring "[io_uring]";
#line 73
# Allow domain to create/use io_uring anon_inode.
#line 73
allow snapuserd snapuserd_iouring:anon_inode { create map read write };
#line 73
allow snapuserd self:io_uring sqpoll;
#line 73
# Other domains may not use iouring anon_inodes created by this domain.
#line 73
neverallow { domain -snapuserd } snapuserd_iouring:anon_inode *;
#line 73
# io_uring checks for CAP_IPC_LOCK to determine whether or not to track
#line 73
# memory usage per uid against RLIMIT_MEMLOCK. This can lead folks to
#line 73
# grant CAP_IPC_LOCK to silence avc denials, which is undesireable.
#line 73
dontaudit snapuserd self:{ capability cap_userns } ipc_lock;
#line 73
#line 1 "system/sepolicy/private/stats.te"
type stats, domain;
typeattribute stats coredomain;
type stats_exec, system_file_type, exec_type, file_type;
# switch to stats domain for stats command
#line 6
# Allow the necessary permissions.
#line 6
#line 6
# Old domain may exec the file and transition to the new domain.
#line 6
allow shell stats_exec:file { getattr open read execute map };
#line 6
allow shell stats:process transition;
#line 6
# New domain is entered by executing the file.
#line 6
allow stats stats_exec:file { entrypoint open read execute getattr map };
#line 6
# New domain can send SIGCHLD to its caller.
#line 6
allow stats shell:process sigchld;
#line 6
# Enable AT_SECURE, i.e. libc secure mode.
#line 6
dontaudit shell stats:process noatsecure;
#line 6
# XXX dontaudit candidate but requires further study.
#line 6
allow shell stats:process { siginh rlimitinh };
#line 6
#line 6
# Make the transition occur by default.
#line 6
type_transition shell stats_exec:process stats;
#line 6
# allow stats access to stdout from its parent shell.
allow stats shell:fd use;
# allow stats to communicate use, read and write over the adb
# connection.
allow stats adbd:fd use;
allow stats adbd:unix_stream_socket { read write };
# allow adbd to reap stats
allow stats adbd:process { sigchld };
# Allow the stats command to talk to the statsd over the binder, and get
# back the stats report data from a ParcelFileDescriptor.
#line 21
# Call the servicemanager and transfer references to it.
#line 21
allow stats servicemanager:binder { call transfer };
#line 21
# Allow servicemanager to send out callbacks
#line 21
allow servicemanager stats:binder { call transfer };
#line 21
# servicemanager performs getpidcon on clients.
#line 21
allow servicemanager stats:dir search;
#line 21
allow servicemanager stats:file { read open };
#line 21
allow servicemanager stats:process getattr;
#line 21
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 21
# all domains in domain.te.
#line 21
allow stats stats_service:service_manager find;
#line 23
# Call the server domain and optionally transfer references to it.
#line 23
allow stats statsd:binder { call transfer };
#line 23
# Allow the serverdomain to transfer references to the client on the reply.
#line 23
allow statsd stats:binder transfer;
#line 23
# Receive and use open files from the server.
#line 23
allow stats statsd:fd use;
#line 23
allow stats statsd:fifo_file write;
# Only statsd can publish the binder service.
#line 27
allow statsd stats_service:service_manager { add find };
#line 27
neverallow { domain -statsd } stats_service:service_manager add;
#line 27
#line 27
# On debug builds with root, allow binder services to use binder over TCP.
#line 27
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 27
#line 27
# Allow pipes from (and only from) stats.
allow statsd stats:fd use;
allow statsd stats:fifo_file write;
# Allow statsd to call back to stats with status updates.
#line 34
# Call the server domain and optionally transfer references to it.
#line 34
allow statsd stats:binder { call transfer };
#line 34
# Allow the serverdomain to transfer references to the client on the reply.
#line 34
allow stats statsd:binder transfer;
#line 34
# Receive and use open files from the server.
#line 34
allow statsd stats:fd use;
#line 34
#line 1 "system/sepolicy/private/statsd.te"
typeattribute statsd coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init statsd_exec:file { getattr open read execute map };
#line 3
allow init statsd:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow statsd statsd_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init statsd:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init statsd:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init statsd_exec:process statsd;
#line 3
#line 3
# Allow to exec the perfetto cmdline client and pass it the trace config on
# stdint through a pipe. It allows statsd to capture traces and hand them
# to Android dropbox.
allow statsd perfetto_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
#line 9
# Allow the necessary permissions.
#line 9
#line 9
# Old domain may exec the file and transition to the new domain.
#line 9
allow statsd perfetto_exec:file { getattr open read execute map };
#line 9
allow statsd perfetto:process transition;
#line 9
# New domain is entered by executing the file.
#line 9
allow perfetto perfetto_exec:file { entrypoint open read execute getattr map };
#line 9
# New domain can send SIGCHLD to its caller.
#line 9
allow perfetto statsd:process sigchld;
#line 9
# Enable AT_SECURE, i.e. libc secure mode.
#line 9
dontaudit statsd perfetto:process noatsecure;
#line 9
# XXX dontaudit candidate but requires further study.
#line 9
allow statsd perfetto:process { siginh rlimitinh };
#line 9
#line 9
# Make the transition occur by default.
#line 9
type_transition statsd perfetto_exec:process perfetto;
#line 9
# Grant statsd with permissions to register the services.
allow statsd {
statscompanion_service
}:service_manager find;
# Allow incidentd to obtain the statsd incident section.
allow statsd incidentd:fifo_file write;
# Allow StatsCompanionService to pipe data to statsd.
allow statsd system_server:fifo_file { read write getattr };
# Allow Statsd to pipe data to privileged apps.
allow statsd priv_app:fifo_file { read write getattr };
# Allow statsd to retrieve SF statistics over binder
#line 26
# Call the server domain and optionally transfer references to it.
#line 26
allow statsd surfaceflinger:binder { call transfer };
#line 26
# Allow the serverdomain to transfer references to the client on the reply.
#line 26
allow surfaceflinger statsd:binder transfer;
#line 26
# Receive and use open files from the server.
#line 26
allow statsd surfaceflinger:fd use;
#line 26
;
# Allow statsd to read its system properties
#line 29
allow statsd device_config_statsd_native_prop:file { getattr open read map };
#line 29
#line 30
allow statsd device_config_statsd_native_boot_prop:file { getattr open read map };
#line 30
# Allow statsd to write uprobestats configs.
allow statsd uprobestats_configs_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow statsd uprobestats_configs_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow statsd to trigger uprobestats via property.
#line 37
#line 37
allow statsd property_socket:sock_file write;
#line 37
allow statsd init:unix_stream_socket connectto;
#line 37
#line 37
allow statsd uprobestats_start_with_config_prop:property_service set;
#line 37
#line 37
allow statsd uprobestats_start_with_config_prop:file { getattr open read map };
#line 37
#line 37
;
#line 1 "system/sepolicy/private/storaged.te"
# storaged daemon
type storaged, domain, coredomain, mlstrustedsubject;
type storaged_exec, system_file_type, exec_type, file_type;
#line 5
#line 5
# Allow the necessary permissions.
#line 5
#line 5
# Old domain may exec the file and transition to the new domain.
#line 5
allow init storaged_exec:file { getattr open read execute map };
#line 5
allow init storaged:process transition;
#line 5
# New domain is entered by executing the file.
#line 5
allow storaged storaged_exec:file { entrypoint open read execute getattr map };
#line 5
# New domain can send SIGCHLD to its caller.
#line 5
#line 5
# Enable AT_SECURE, i.e. libc secure mode.
#line 5
dontaudit init storaged:process noatsecure;
#line 5
# XXX dontaudit candidate but requires further study.
#line 5
allow init storaged:process { siginh rlimitinh };
#line 5
#line 5
# Make the transition occur by default.
#line 5
type_transition init storaged_exec:process storaged;
#line 5
#line 5
# Read access to pseudo filesystems
#line 8
allow storaged domain:dir { open getattr read search ioctl lock watch watch_reads };
#line 8
allow storaged domain:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 8
# Read /proc/uid_io/stats
allow storaged proc_uid_io_stats:file { getattr open read ioctl lock map watch watch_reads };
# Read /data/system/packages.list
allow storaged system_data_file:file { getattr open read ioctl lock map watch watch_reads };
allow storaged packages_list_file:file { getattr open read ioctl lock map watch watch_reads };
# Store storaged proto file
allow storaged storaged_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow storaged storaged_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
#line 21
#line 27
# Needed to provide debug dump output via dumpsys pipes.
allow storaged shell:fd use;
allow storaged shell:fifo_file write;
# Needed for GMScore to call dumpsys storaged
allow storaged priv_app:fd use;
# b/142672293: No other priv-app should need this allow rule now that GMS core runs in its own domain.
# Remove after no logs are seen for this rule.
#line 39
allow storaged gmscore_app:fd use;
allow storaged { privapp_data_file app_data_file }:file write;
allow storaged permission_service:service_manager find;
# Binder permissions
#line 45
allow storaged storaged_service:service_manager { add find };
#line 45
neverallow { domain -storaged } storaged_service:service_manager add;
#line 45
#line 45
# On debug builds with root, allow binder services to use binder over TCP.
#line 45
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 45
#line 45
#line 47
# Call the servicemanager and transfer references to it.
#line 47
allow storaged servicemanager:binder { call transfer };
#line 47
# Allow servicemanager to send out callbacks
#line 47
allow servicemanager storaged:binder { call transfer };
#line 47
# servicemanager performs getpidcon on clients.
#line 47
allow servicemanager storaged:dir search;
#line 47
allow servicemanager storaged:file { read open };
#line 47
allow servicemanager storaged:process getattr;
#line 47
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 47
# all domains in domain.te.
#line 47
#line 48
# Call the server domain and optionally transfer references to it.
#line 48
allow storaged system_server:binder { call transfer };
#line 48
# Allow the serverdomain to transfer references to the client on the reply.
#line 48
allow system_server storaged:binder transfer;
#line 48
# Receive and use open files from the server.
#line 48
allow storaged system_server:fd use;
#line 48
#line 50
typeattribute storaged halclientdomain;
#line 50
typeattribute storaged hal_health_client;
#line 50
#line 50
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 50
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 50
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 50
#line 50
typeattribute storaged hal_health;
#line 50
# Find passthrough HAL implementations
#line 50
allow hal_health system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 50
allow hal_health vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 50
allow hal_health vendor_file:file { read open getattr execute map };
#line 50
#line 50
# Implements a dumpsys interface.
allow storaged dumpstate:fd use;
# use a subset of the package manager service
allow storaged package_native_service:service_manager find;
# Kernel does extra check on CAP_DAC_OVERRIDE for libbinder when storaged is
# running as root. See b/35323867 #3.
dontaudit storaged self:{ capability cap_userns } { dac_override dac_read_search };
# For collecting bugreports.
allow storaged dumpstate:fifo_file write;
###
### neverallow
###
neverallow storaged domain:process ptrace;
neverallow storaged self:{ capability capability2 cap_userns cap2_userns } *;
#line 36 "system/sepolicy/private/su.te"
#line 1 "system/sepolicy/private/surfaceflinger.te"
# surfaceflinger - display compositor service
typeattribute surfaceflinger coredomain;
type surfaceflinger_exec, system_file_type, exec_type, file_type;
#line 6
#line 6
# Allow the necessary permissions.
#line 6
#line 6
# Old domain may exec the file and transition to the new domain.
#line 6
allow init surfaceflinger_exec:file { getattr open read execute map };
#line 6
allow init surfaceflinger:process transition;
#line 6
# New domain is entered by executing the file.
#line 6
allow surfaceflinger surfaceflinger_exec:file { entrypoint open read execute getattr map };
#line 6
# New domain can send SIGCHLD to its caller.
#line 6
#line 6
# Enable AT_SECURE, i.e. libc secure mode.
#line 6
dontaudit init surfaceflinger:process noatsecure;
#line 6
# XXX dontaudit candidate but requires further study.
#line 6
allow init surfaceflinger:process { siginh rlimitinh };
#line 6
#line 6
# Make the transition occur by default.
#line 6
type_transition init surfaceflinger_exec:process surfaceflinger;
#line 6
#line 6
#line 7
type_transition surfaceflinger tmpfs:file surfaceflinger_tmpfs;
#line 7
allow surfaceflinger surfaceflinger_tmpfs:file { read write getattr map };
#line 7
typeattribute surfaceflinger mlstrustedsubject;
typeattribute surfaceflinger display_service_server;
#line 12
allow surfaceflinger runtime_event_log_tags_file:file { getattr open read ioctl lock map watch watch_reads };
#line 12
# Perform HwBinder IPC.
#line 15
typeattribute surfaceflinger halclientdomain;
#line 15
typeattribute surfaceflinger hal_graphics_allocator_client;
#line 15
#line 15
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 15
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 15
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 15
#line 15
typeattribute surfaceflinger hal_graphics_allocator;
#line 15
# Find passthrough HAL implementations
#line 15
allow hal_graphics_allocator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 15
allow hal_graphics_allocator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 15
allow hal_graphics_allocator vendor_file:file { read open getattr execute map };
#line 15
#line 15
#line 16
typeattribute surfaceflinger halclientdomain;
#line 16
typeattribute surfaceflinger hal_graphics_composer_client;
#line 16
#line 16
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 16
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 16
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 16
#line 16
typeattribute surfaceflinger hal_graphics_composer;
#line 16
# Find passthrough HAL implementations
#line 16
allow hal_graphics_composer system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 16
allow hal_graphics_composer vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 16
allow hal_graphics_composer vendor_file:file { read open getattr execute map };
#line 16
#line 16
typeattribute surfaceflinger_tmpfs hal_graphics_composer_client_tmpfs;
#line 18
typeattribute surfaceflinger halclientdomain;
#line 18
typeattribute surfaceflinger hal_codec2_client;
#line 18
#line 18
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 18
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 18
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 18
#line 18
typeattribute surfaceflinger hal_codec2;
#line 18
# Find passthrough HAL implementations
#line 18
allow hal_codec2 system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 18
allow hal_codec2 vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 18
allow hal_codec2 vendor_file:file { read open getattr execute map };
#line 18
#line 18
#line 19
typeattribute surfaceflinger halclientdomain;
#line 19
typeattribute surfaceflinger hal_omx_client;
#line 19
#line 19
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 19
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 19
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 19
#line 19
typeattribute surfaceflinger hal_omx;
#line 19
# Find passthrough HAL implementations
#line 19
allow hal_omx system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 19
allow hal_omx vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 19
allow hal_omx vendor_file:file { read open getattr execute map };
#line 19
#line 19
#line 20
typeattribute surfaceflinger halclientdomain;
#line 20
typeattribute surfaceflinger hal_configstore_client;
#line 20
#line 20
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 20
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 20
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 20
#line 20
typeattribute surfaceflinger hal_configstore;
#line 20
# Find passthrough HAL implementations
#line 20
allow hal_configstore system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 20
allow hal_configstore vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 20
allow hal_configstore vendor_file:file { read open getattr execute map };
#line 20
#line 20
#line 21
typeattribute surfaceflinger halclientdomain;
#line 21
typeattribute surfaceflinger hal_power_client;
#line 21
#line 21
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 21
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 21
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 21
#line 21
typeattribute surfaceflinger hal_power;
#line 21
# Find passthrough HAL implementations
#line 21
allow hal_power system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 21
allow hal_power vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 21
allow hal_power vendor_file:file { read open getattr execute map };
#line 21
#line 21
allow surfaceflinger hidl_token_hwservice:hwservice_manager find;
# Perform Binder IPC.
#line 25
# Call the servicemanager and transfer references to it.
#line 25
allow surfaceflinger servicemanager:binder { call transfer };
#line 25
# Allow servicemanager to send out callbacks
#line 25
allow servicemanager surfaceflinger:binder { call transfer };
#line 25
# servicemanager performs getpidcon on clients.
#line 25
allow servicemanager surfaceflinger:dir search;
#line 25
allow servicemanager surfaceflinger:file { read open };
#line 25
allow servicemanager surfaceflinger:process getattr;
#line 25
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 25
# all domains in domain.te.
#line 25
#line 26
# Call the server domain and optionally transfer references to it.
#line 26
allow surfaceflinger binderservicedomain:binder { call transfer };
#line 26
# Allow the serverdomain to transfer references to the client on the reply.
#line 26
allow binderservicedomain surfaceflinger:binder transfer;
#line 26
# Receive and use open files from the server.
#line 26
allow surfaceflinger binderservicedomain:fd use;
#line 26
#line 27
# Call the server domain and optionally transfer references to it.
#line 27
allow surfaceflinger appdomain:binder { call transfer };
#line 27
# Allow the serverdomain to transfer references to the client on the reply.
#line 27
allow appdomain surfaceflinger:binder transfer;
#line 27
# Receive and use open files from the server.
#line 27
allow surfaceflinger appdomain:fd use;
#line 27
#line 28
# Call the server domain and optionally transfer references to it.
#line 28
allow surfaceflinger bootanim:binder { call transfer };
#line 28
# Allow the serverdomain to transfer references to the client on the reply.
#line 28
allow bootanim surfaceflinger:binder transfer;
#line 28
# Receive and use open files from the server.
#line 28
allow surfaceflinger bootanim:fd use;
#line 28
#line 29
# Call the server domain and optionally transfer references to it.
#line 29
allow surfaceflinger system_server:binder { call transfer };
#line 29
# Allow the serverdomain to transfer references to the client on the reply.
#line 29
allow system_server surfaceflinger:binder transfer;
#line 29
# Receive and use open files from the server.
#line 29
allow surfaceflinger system_server:fd use;
#line 29
;
#line 30
typeattribute surfaceflinger binderservicedomain;
#line 30
# Binder IPC to bu, presently runs in adbd domain.
#line 33
# Call the server domain and optionally transfer references to it.
#line 33
allow surfaceflinger adbd:binder { call transfer };
#line 33
# Allow the serverdomain to transfer references to the client on the reply.
#line 33
allow adbd surfaceflinger:binder transfer;
#line 33
# Receive and use open files from the server.
#line 33
allow surfaceflinger adbd:fd use;
#line 33
# Read /proc/pid files for Binder clients.
#line 36
allow surfaceflinger binderservicedomain:dir { open getattr read search ioctl lock watch watch_reads };
#line 36
allow surfaceflinger binderservicedomain:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 36
#line 37
allow surfaceflinger appdomain:dir { open getattr read search ioctl lock watch watch_reads };
#line 37
allow surfaceflinger appdomain:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 37
# Access the GPU.
allow surfaceflinger gpu_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow surfaceflinger gpu_device:dir { open getattr read search ioctl lock watch watch_reads };
allow surfaceflinger sysfs_gpu:file { getattr open read ioctl lock map watch watch_reads };
# Access /dev/graphics/fb0.
allow surfaceflinger graphics_device:dir search;
allow surfaceflinger graphics_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Access /dev/video1.
allow surfaceflinger video_device:dir { open getattr read search ioctl lock watch watch_reads };
allow surfaceflinger video_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Access the secure heap.
allow surfaceflinger dmabuf_system_secure_heap_device:chr_file { getattr open read ioctl lock map watch watch_reads };
# Create and use netlink kobject uevent sockets.
allow surfaceflinger self:netlink_kobject_uevent_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# Set properties.
#line 59
#line 59
allow surfaceflinger property_socket:sock_file write;
#line 59
allow surfaceflinger init:unix_stream_socket connectto;
#line 59
#line 59
allow surfaceflinger system_prop:property_service set;
#line 59
#line 59
allow surfaceflinger system_prop:file { getattr open read map };
#line 59
#line 59
#line 60
#line 60
allow surfaceflinger property_socket:sock_file write;
#line 60
allow surfaceflinger init:unix_stream_socket connectto;
#line 60
#line 60
allow surfaceflinger bootanim_system_prop:property_service set;
#line 60
#line 60
allow surfaceflinger bootanim_system_prop:file { getattr open read map };
#line 60
#line 60
#line 61
#line 61
allow surfaceflinger property_socket:sock_file write;
#line 61
allow surfaceflinger init:unix_stream_socket connectto;
#line 61
#line 61
allow surfaceflinger exported_system_prop:property_service set;
#line 61
#line 61
allow surfaceflinger exported_system_prop:file { getattr open read map };
#line 61
#line 61
#line 62
#line 62
allow surfaceflinger property_socket:sock_file write;
#line 62
allow surfaceflinger init:unix_stream_socket connectto;
#line 62
#line 62
allow surfaceflinger exported3_system_prop:property_service set;
#line 62
#line 62
allow surfaceflinger exported3_system_prop:file { getattr open read map };
#line 62
#line 62
#line 63
#line 63
allow surfaceflinger property_socket:sock_file write;
#line 63
allow surfaceflinger init:unix_stream_socket connectto;
#line 63
#line 63
allow surfaceflinger ctl_bootanim_prop:property_service set;
#line 63
#line 63
allow surfaceflinger ctl_bootanim_prop:file { getattr open read map };
#line 63
#line 63
#line 64
#line 64
allow surfaceflinger property_socket:sock_file write;
#line 64
allow surfaceflinger init:unix_stream_socket connectto;
#line 64
#line 64
allow surfaceflinger locale_prop:property_service set;
#line 64
#line 64
allow surfaceflinger locale_prop:file { getattr open read map };
#line 64
#line 64
#line 65
#line 65
allow surfaceflinger property_socket:sock_file write;
#line 65
allow surfaceflinger init:unix_stream_socket connectto;
#line 65
#line 65
allow surfaceflinger surfaceflinger_display_prop:property_service set;
#line 65
#line 65
allow surfaceflinger surfaceflinger_display_prop:file { getattr open read map };
#line 65
#line 65
#line 66
#line 66
allow surfaceflinger property_socket:sock_file write;
#line 66
allow surfaceflinger init:unix_stream_socket connectto;
#line 66
#line 66
allow surfaceflinger timezone_prop:property_service set;
#line 66
#line 66
allow surfaceflinger timezone_prop:file { getattr open read map };
#line 66
#line 66
# Get properties.
#line 69
allow surfaceflinger qemu_sf_lcd_density_prop:file { getattr open read map };
#line 69
#line 70
allow surfaceflinger device_config_surface_flinger_native_boot_prop:file { getattr open read map };
#line 70
# Use open files supplied by an app.
allow surfaceflinger appdomain:fd use;
allow surfaceflinger { app_data_file privapp_data_file }:file { read write };
# Allow writing surface traces to /data/misc/wmtrace.
#line 80
# Needed to register as a Perfetto producer.
#line 83
allow surfaceflinger traced:fd use;
#line 83
allow surfaceflinger traced_tmpfs:file { read write getattr map };
#line 83
#line 83
allow surfaceflinger traced_producer_socket:sock_file write;
#line 83
allow surfaceflinger traced:unix_stream_socket connectto;
#line 83
#line 83
#line 83
# Also allow the service to use the producer file descriptors. This is
#line 83
# necessary when the producer is creating the shared memory, as it will be
#line 83
# passed to the service as a file descriptor (obtained from memfd_create).
#line 83
allow traced surfaceflinger:fd use;
#line 83
# Use socket supplied by adbd, for cmd gpu vkjson etc.
allow surfaceflinger adbd:unix_stream_socket { read write getattr };
# Allow a dumpstate triggered screenshot
#line 89
# Call the server domain and optionally transfer references to it.
#line 89
allow surfaceflinger dumpstate:binder { call transfer };
#line 89
# Allow the serverdomain to transfer references to the client on the reply.
#line 89
allow dumpstate surfaceflinger:binder transfer;
#line 89
# Receive and use open files from the server.
#line 89
allow surfaceflinger dumpstate:fd use;
#line 89
#line 90
# Call the server domain and optionally transfer references to it.
#line 90
allow surfaceflinger shell:binder { call transfer };
#line 90
# Allow the serverdomain to transfer references to the client on the reply.
#line 90
allow shell surfaceflinger:binder transfer;
#line 90
# Receive and use open files from the server.
#line 90
allow surfaceflinger shell:fd use;
#line 90
#line 91
allow surfaceflinger dumpstate:dir { open getattr read search ioctl lock watch watch_reads };
#line 91
allow surfaceflinger dumpstate:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 91
# media.player service
# do not use add_service() as hal_graphics_composer_default may be the
# provider as well
#add_service(surfaceflinger, surfaceflinger_service)
allow surfaceflinger surfaceflinger_service:service_manager { add find };
allow surfaceflinger mediaserver_service:service_manager find;
allow surfaceflinger permission_service:service_manager find;
allow surfaceflinger power_service:service_manager find;
allow surfaceflinger vr_manager_service:service_manager find;
allow surfaceflinger window_service:service_manager find;
allow surfaceflinger inputflinger_service:service_manager find;
# allow self to set SCHED_FIFO
allow surfaceflinger self:{ capability cap_userns } sys_nice;
allow surfaceflinger proc_meminfo:file { getattr open read ioctl lock map watch watch_reads };
#line 111
allow surfaceflinger cgroup:dir { open getattr read search ioctl lock watch watch_reads };
#line 111
allow surfaceflinger cgroup:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 111
#line 112
allow surfaceflinger cgroup_v2:dir { open getattr read search ioctl lock watch watch_reads };
#line 112
allow surfaceflinger cgroup_v2:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 112
#line 113
allow surfaceflinger system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 113
allow surfaceflinger system_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 113
allow surfaceflinger tmpfs:dir { open getattr read search ioctl lock watch watch_reads };
allow surfaceflinger system_server:fd use;
allow surfaceflinger system_server:unix_stream_socket { read write };
allow surfaceflinger ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
allow surfaceflinger dmabuf_system_heap_device:chr_file { getattr open read ioctl lock map watch watch_reads };
# pdx IPC
#line 121
# Mark the server domain as a PDX server.
#line 121
typeattribute surfaceflinger pdx_display_client_server_type;
#line 121
# Allow the init process to create the initial endpoint socket.
#line 121
allow init pdx_display_client_endpoint_socket_type:unix_stream_socket { create bind };
#line 121
# Allow the server domain to use the endpoint socket and accept connections on it.
#line 121
# Not using macro like "rw_socket_perms_no_ioctl" because it provides more rights
#line 121
# than we need (e.g. we don"t need "bind" or "connect").
#line 121
allow surfaceflinger pdx_display_client_endpoint_socket_type:unix_stream_socket { read getattr write setattr lock append getopt setopt shutdown listen accept };
#line 121
# Allow the server domain to apply security context label to the channel socket pair (allow process to use setsockcreatecon_raw()).
#line 121
allow surfaceflinger self:process setsockcreate;
#line 121
# Allow the server domain to create a client channel socket.
#line 121
allow surfaceflinger pdx_display_client_channel_socket_type:unix_stream_socket { create { { ioctl read getattr write setattr lock append bind connect getopt setopt shutdown map } listen accept } };
#line 121
# Prevent other processes from claiming to be a server for the same service.
#line 121
neverallow {domain -surfaceflinger} pdx_display_client_endpoint_socket_type:unix_stream_socket { listen accept };
#line 121
#line 122
# Mark the server domain as a PDX server.
#line 122
typeattribute surfaceflinger pdx_display_manager_server_type;
#line 122
# Allow the init process to create the initial endpoint socket.
#line 122
allow init pdx_display_manager_endpoint_socket_type:unix_stream_socket { create bind };
#line 122
# Allow the server domain to use the endpoint socket and accept connections on it.
#line 122
# Not using macro like "rw_socket_perms_no_ioctl" because it provides more rights
#line 122
# than we need (e.g. we don"t need "bind" or "connect").
#line 122
allow surfaceflinger pdx_display_manager_endpoint_socket_type:unix_stream_socket { read getattr write setattr lock append getopt setopt shutdown listen accept };
#line 122
# Allow the server domain to apply security context label to the channel socket pair (allow process to use setsockcreatecon_raw()).
#line 122
allow surfaceflinger self:process setsockcreate;
#line 122
# Allow the server domain to create a client channel socket.
#line 122
allow surfaceflinger pdx_display_manager_channel_socket_type:unix_stream_socket { create { { ioctl read getattr write setattr lock append bind connect getopt setopt shutdown map } listen accept } };
#line 122
# Prevent other processes from claiming to be a server for the same service.
#line 122
neverallow {domain -surfaceflinger} pdx_display_manager_endpoint_socket_type:unix_stream_socket { listen accept };
#line 122
#line 123
# Mark the server domain as a PDX server.
#line 123
typeattribute surfaceflinger pdx_display_screenshot_server_type;
#line 123
# Allow the init process to create the initial endpoint socket.
#line 123
allow init pdx_display_screenshot_endpoint_socket_type:unix_stream_socket { create bind };
#line 123
# Allow the server domain to use the endpoint socket and accept connections on it.
#line 123
# Not using macro like "rw_socket_perms_no_ioctl" because it provides more rights
#line 123
# than we need (e.g. we don"t need "bind" or "connect").
#line 123
allow surfaceflinger pdx_display_screenshot_endpoint_socket_type:unix_stream_socket { read getattr write setattr lock append getopt setopt shutdown listen accept };
#line 123
# Allow the server domain to apply security context label to the channel socket pair (allow process to use setsockcreatecon_raw()).
#line 123
allow surfaceflinger self:process setsockcreate;
#line 123
# Allow the server domain to create a client channel socket.
#line 123
allow surfaceflinger pdx_display_screenshot_channel_socket_type:unix_stream_socket { create { { ioctl read getattr write setattr lock append bind connect getopt setopt shutdown map } listen accept } };
#line 123
# Prevent other processes from claiming to be a server for the same service.
#line 123
neverallow {domain -surfaceflinger} pdx_display_screenshot_endpoint_socket_type:unix_stream_socket { listen accept };
#line 123
#line 124
# Mark the server domain as a PDX server.
#line 124
typeattribute surfaceflinger pdx_display_vsync_server_type;
#line 124
# Allow the init process to create the initial endpoint socket.
#line 124
allow init pdx_display_vsync_endpoint_socket_type:unix_stream_socket { create bind };
#line 124
# Allow the server domain to use the endpoint socket and accept connections on it.
#line 124
# Not using macro like "rw_socket_perms_no_ioctl" because it provides more rights
#line 124
# than we need (e.g. we don"t need "bind" or "connect").
#line 124
allow surfaceflinger pdx_display_vsync_endpoint_socket_type:unix_stream_socket { read getattr write setattr lock append getopt setopt shutdown listen accept };
#line 124
# Allow the server domain to apply security context label to the channel socket pair (allow process to use setsockcreatecon_raw()).
#line 124
allow surfaceflinger self:process setsockcreate;
#line 124
# Allow the server domain to create a client channel socket.
#line 124
allow surfaceflinger pdx_display_vsync_channel_socket_type:unix_stream_socket { create { { ioctl read getattr write setattr lock append bind connect getopt setopt shutdown map } listen accept } };
#line 124
# Prevent other processes from claiming to be a server for the same service.
#line 124
neverallow {domain -surfaceflinger} pdx_display_vsync_endpoint_socket_type:unix_stream_socket { listen accept };
#line 124
#line 126
#line 126
# Allow client to open the service endpoint file.
#line 126
allow surfaceflinger pdx_bufferhub_client_endpoint_dir_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 126
allow surfaceflinger pdx_bufferhub_client_endpoint_socket_type:sock_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 126
# Allow the client to connect to endpoint socket.
#line 126
allow surfaceflinger pdx_bufferhub_client_endpoint_socket_type:unix_stream_socket { connectto read write shutdown };
#line 126
#line 126
#line 126
# Allow the client to use the PDX channel socket.
#line 126
# Not using macro like "rw_socket_perms_no_ioctl" because it provides more rights
#line 126
# than we need (e.g. we don"t need "bind" or "connect").
#line 126
allow surfaceflinger pdx_bufferhub_client_channel_socket_type:unix_stream_socket { read getattr write setattr lock append getopt setopt shutdown };
#line 126
# Client needs to use an channel event fd from the server.
#line 126
allow surfaceflinger pdx_bufferhub_client_server_type:fd use;
#line 126
# Servers may receive sync fences, gralloc buffers, etc, from clients.
#line 126
# This could be tightened on a per-server basis, but keeping track of service
#line 126
# clients is error prone.
#line 126
allow pdx_bufferhub_client_server_type surfaceflinger:fd use;
#line 126
#line 126
#line 127
#line 127
# Allow client to open the service endpoint file.
#line 127
allow surfaceflinger pdx_performance_client_endpoint_dir_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 127
allow surfaceflinger pdx_performance_client_endpoint_socket_type:sock_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 127
# Allow the client to connect to endpoint socket.
#line 127
allow surfaceflinger pdx_performance_client_endpoint_socket_type:unix_stream_socket { connectto read write shutdown };
#line 127
#line 127
#line 127
# Allow the client to use the PDX channel socket.
#line 127
# Not using macro like "rw_socket_perms_no_ioctl" because it provides more rights
#line 127
# than we need (e.g. we don"t need "bind" or "connect").
#line 127
allow surfaceflinger pdx_performance_client_channel_socket_type:unix_stream_socket { read getattr write setattr lock append getopt setopt shutdown };
#line 127
# Client needs to use an channel event fd from the server.
#line 127
allow surfaceflinger pdx_performance_client_server_type:fd use;
#line 127
# Servers may receive sync fences, gralloc buffers, etc, from clients.
#line 127
# This could be tightened on a per-server basis, but keeping track of service
#line 127
# clients is error prone.
#line 127
allow pdx_performance_client_server_type surfaceflinger:fd use;
#line 127
#line 127
# Allow supplying timestats statistics to statsd
allow surfaceflinger stats_service:service_manager find;
allow surfaceflinger statsmanager_service:service_manager find;
# TODO(146461633): remove this once native pullers talk to StatsManagerService
#line 133
# Call the server domain and optionally transfer references to it.
#line 133
allow surfaceflinger statsd:binder { call transfer };
#line 133
# Allow the serverdomain to transfer references to the client on the reply.
#line 133
allow statsd surfaceflinger:binder transfer;
#line 133
# Receive and use open files from the server.
#line 133
allow surfaceflinger statsd:fd use;
#line 133
;
# Allow to use files supplied by hal_evs
allow surfaceflinger hal_evs:fd use;
# Allow to use release fence fds supplied by hal_camera
allow surfaceflinger hal_camera:fd use;
# Allow pushing jank event atoms to statsd
#line 144
# Surfaceflinger should not be reading default vendor-defined properties.
dontaudit surfaceflinger vendor_default_prop:file read;
###
### Neverallow rules
###
### surfaceflinger should NEVER do any of this
# Do not allow accessing SDcard files as unsafe ejection could
# cause the kernel to kill the process.
neverallow surfaceflinger { sdcard_type fuse }:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# b/68864350
dontaudit surfaceflinger unlabeled:dir search;
#line 1 "system/sepolicy/private/system_app.te"
###
### 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.
###
typeattribute system_app coredomain, mlstrustedsubject;
#line 9
typeattribute system_app appdomain;
#line 9
# Label tmpfs objects for all apps.
#line 9
type_transition system_app tmpfs:file appdomain_tmpfs;
#line 9
#line 9
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 9
type system_app_userfaultfd;
#line 9
type_transition system_app system_app:anon_inode system_app_userfaultfd "[userfaultfd]";
#line 9
# Allow domain to create/use userfaultfd anon_inode.
#line 9
allow system_app system_app_userfaultfd:anon_inode { create ioctl read };
#line 9
# Suppress errors generate during bugreport
#line 9
dontaudit su system_app_userfaultfd:anon_inode *;
#line 9
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 9
neverallow { domain -system_app } system_app_userfaultfd:anon_inode *;
#line 9
#line 9
allow system_app appdomain_tmpfs:file { execute getattr map read write };
#line 9
neverallow { system_app -runas_app -shell -simpleperf } { domain -system_app }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 9
neverallow { appdomain -runas_app -shell -simpleperf -system_app } system_app:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 9
# The Android security model guarantees the confidentiality and integrity
#line 9
# of application data and execution state. Ptrace bypasses those
#line 9
# confidentiality guarantees. Disallow ptrace access from system components to
#line 9
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 9
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 9
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 9
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 9
# live lock conditions.
#line 9
neverallow { domain -system_app -crash_dump -runas_app -simpleperf } system_app:process ptrace;
#line 9
#line 10
typeattribute system_app netdomain;
#line 10
#line 11
typeattribute system_app binderservicedomain;
#line 11
# android.ui and system.ui
allow system_app rootfs:dir getattr;
# Read and write /data/data subdirectory.
allow system_app system_app_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_app system_app_data_file:{ file lnk_file } { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Read and write to /data/misc/user.
allow system_app misc_user_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_app misc_user_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Access to apex files stored on /data (b/136063500)
# Needed so that Settings can access NOTICE files inside apex
# files located in the assets/ directory.
allow system_app apex_data_file:dir search;
allow system_app staging_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Read wallpaper file.
allow system_app wallpaper_file:file { getattr open read ioctl lock map watch watch_reads };
# Read icon file.
allow system_app icon_file:file { getattr open read ioctl lock map watch watch_reads };
# Write to properties
#line 37
#line 37
allow system_app property_socket:sock_file write;
#line 37
allow system_app init:unix_stream_socket connectto;
#line 37
#line 37
allow system_app adaptive_haptics_prop:property_service set;
#line 37
#line 37
allow system_app adaptive_haptics_prop:file { getattr open read map };
#line 37
#line 37
#line 38
#line 38
allow system_app property_socket:sock_file write;
#line 38
allow system_app init:unix_stream_socket connectto;
#line 38
#line 38
allow system_app arm64_memtag_prop:property_service set;
#line 38
#line 38
allow system_app arm64_memtag_prop:file { getattr open read map };
#line 38
#line 38
#line 39
#line 39
allow system_app property_socket:sock_file write;
#line 39
allow system_app init:unix_stream_socket connectto;
#line 39
#line 39
allow system_app bluetooth_a2dp_offload_prop:property_service set;
#line 39
#line 39
allow system_app bluetooth_a2dp_offload_prop:file { getattr open read map };
#line 39
#line 39
#line 40
#line 40
allow system_app property_socket:sock_file write;
#line 40
allow system_app init:unix_stream_socket connectto;
#line 40
#line 40
allow system_app bluetooth_audio_hal_prop:property_service set;
#line 40
#line 40
allow system_app bluetooth_audio_hal_prop:file { getattr open read map };
#line 40
#line 40
#line 41
#line 41
allow system_app property_socket:sock_file write;
#line 41
allow system_app init:unix_stream_socket connectto;
#line 41
#line 41
allow system_app bluetooth_prop:property_service set;
#line 41
#line 41
allow system_app bluetooth_prop:file { getattr open read map };
#line 41
#line 41
#line 42
#line 42
allow system_app property_socket:sock_file write;
#line 42
allow system_app init:unix_stream_socket connectto;
#line 42
#line 42
allow system_app debug_prop:property_service set;
#line 42
#line 42
allow system_app debug_prop:file { getattr open read map };
#line 42
#line 42
#line 43
#line 43
allow system_app property_socket:sock_file write;
#line 43
allow system_app init:unix_stream_socket connectto;
#line 43
#line 43
allow system_app system_prop:property_service set;
#line 43
#line 43
allow system_app system_prop:file { getattr open read map };
#line 43
#line 43
#line 44
#line 44
allow system_app property_socket:sock_file write;
#line 44
allow system_app init:unix_stream_socket connectto;
#line 44
#line 44
allow system_app exported_bluetooth_prop:property_service set;
#line 44
#line 44
allow system_app exported_bluetooth_prop:file { getattr open read map };
#line 44
#line 44
#line 45
#line 45
allow system_app property_socket:sock_file write;
#line 45
allow system_app init:unix_stream_socket connectto;
#line 45
#line 45
allow system_app exported_system_prop:property_service set;
#line 45
#line 45
allow system_app exported_system_prop:file { getattr open read map };
#line 45
#line 45
#line 46
#line 46
allow system_app property_socket:sock_file write;
#line 46
allow system_app init:unix_stream_socket connectto;
#line 46
#line 46
allow system_app exported3_system_prop:property_service set;
#line 46
#line 46
allow system_app exported3_system_prop:file { getattr open read map };
#line 46
#line 46
#line 47
#line 47
allow system_app property_socket:sock_file write;
#line 47
allow system_app init:unix_stream_socket connectto;
#line 47
#line 47
allow system_app gesture_prop:property_service set;
#line 47
#line 47
allow system_app gesture_prop:file { getattr open read map };
#line 47
#line 47
#line 48
#line 48
allow system_app property_socket:sock_file write;
#line 48
allow system_app init:unix_stream_socket connectto;
#line 48
#line 48
allow system_app locale_prop:property_service set;
#line 48
#line 48
allow system_app locale_prop:file { getattr open read map };
#line 48
#line 48
#line 49
#line 49
allow system_app property_socket:sock_file write;
#line 49
allow system_app init:unix_stream_socket connectto;
#line 49
#line 49
allow system_app logd_prop:property_service set;
#line 49
#line 49
allow system_app logd_prop:file { getattr open read map };
#line 49
#line 49
#line 50
#line 50
allow system_app property_socket:sock_file write;
#line 50
allow system_app init:unix_stream_socket connectto;
#line 50
#line 50
allow system_app net_radio_prop:property_service set;
#line 50
#line 50
allow system_app net_radio_prop:file { getattr open read map };
#line 50
#line 50
#line 51
#line 51
allow system_app property_socket:sock_file write;
#line 51
allow system_app init:unix_stream_socket connectto;
#line 51
#line 51
allow system_app timezone_prop:property_service set;
#line 51
#line 51
allow system_app timezone_prop:file { getattr open read map };
#line 51
#line 51
#line 52
#line 52
allow system_app property_socket:sock_file write;
#line 52
allow system_app init:unix_stream_socket connectto;
#line 52
#line 52
allow system_app usb_control_prop:property_service set;
#line 52
#line 52
allow system_app usb_control_prop:file { getattr open read map };
#line 52
#line 52
#line 53
#line 53
allow system_app property_socket:sock_file write;
#line 53
allow system_app init:unix_stream_socket connectto;
#line 53
#line 53
allow system_app usb_prop:property_service set;
#line 53
#line 53
allow system_app usb_prop:file { getattr open read map };
#line 53
#line 53
#line 54
#line 54
allow system_app property_socket:sock_file write;
#line 54
allow system_app init:unix_stream_socket connectto;
#line 54
#line 54
allow system_app log_tag_prop:property_service set;
#line 54
#line 54
allow system_app log_tag_prop:file { getattr open read map };
#line 54
#line 54
#line 55
#line 55
allow system_app property_socket:sock_file write;
#line 55
allow system_app init:unix_stream_socket connectto;
#line 55
#line 55
allow system_app drm_forcel3_prop:property_service set;
#line 55
#line 55
allow system_app drm_forcel3_prop:file { getattr open read map };
#line 55
#line 55
auditallow system_app net_radio_prop:property_service set;
auditallow system_app usb_control_prop:property_service set;
auditallow system_app usb_prop:property_service set;
# Allow Settings to enable Dynamic System Update
#line 61
#line 61
allow system_app property_socket:sock_file write;
#line 61
allow system_app init:unix_stream_socket connectto;
#line 61
#line 61
allow system_app dynamic_system_prop:property_service set;
#line 61
#line 61
allow system_app dynamic_system_prop:file { getattr open read map };
#line 61
#line 61
# ctl interface
#line 64
#line 64
allow system_app property_socket:sock_file write;
#line 64
allow system_app init:unix_stream_socket connectto;
#line 64
#line 64
allow system_app ctl_default_prop:property_service set;
#line 64
#line 64
allow system_app ctl_default_prop:file { getattr open read map };
#line 64
#line 64
#line 65
#line 65
allow system_app property_socket:sock_file write;
#line 65
allow system_app init:unix_stream_socket connectto;
#line 65
#line 65
allow system_app ctl_bugreport_prop:property_service set;
#line 65
#line 65
allow system_app ctl_bugreport_prop:file { getattr open read map };
#line 65
#line 65
# Allow developer settings to query gsid status
#line 68
allow system_app gsid_prop:file { getattr open read map };
#line 68
# Allow developer settings to check 16k pages boot option status
#line 71
allow system_app enable_16k_pages_prop:file { getattr open read map };
#line 71
# Create /data/anr/traces.txt.
allow system_app anr_data_file:dir { { open getattr read search ioctl lock watch watch_reads } add_name write };
allow system_app anr_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Settings need to access app name and icon from asec
allow system_app asec_apk_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow system apps (like Settings) to interact with statsd
#line 81
# Call the server domain and optionally transfer references to it.
#line 81
allow system_app statsd:binder { call transfer };
#line 81
# Allow the serverdomain to transfer references to the client on the reply.
#line 81
allow statsd system_app:binder transfer;
#line 81
# Receive and use open files from the server.
#line 81
allow system_app statsd:fd use;
#line 81
# Allow system apps to interact with incidentd
#line 84
# Call the server domain and optionally transfer references to it.
#line 84
allow system_app incidentd:binder { call transfer };
#line 84
# Allow the serverdomain to transfer references to the client on the reply.
#line 84
allow incidentd system_app:binder transfer;
#line 84
# Receive and use open files from the server.
#line 84
allow system_app incidentd:fd use;
#line 84
# Allow system apps (Settings) to call into update_engine
# in order to apply update to switch from 4k kernel to 16K and vice-versa
#line 88
# Call the servicemanager and transfer references to it.
#line 88
allow system_app servicemanager:binder { call transfer };
#line 88
# Allow servicemanager to send out callbacks
#line 88
allow servicemanager system_app:binder { call transfer };
#line 88
# servicemanager performs getpidcon on clients.
#line 88
allow servicemanager system_app:dir search;
#line 88
allow servicemanager system_app:file { read open };
#line 88
allow servicemanager system_app:process getattr;
#line 88
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 88
# all domains in domain.te.
#line 88
allow system_app update_engine_stable_service:service_manager find;
#line 90
# Call the server domain and optionally transfer references to it.
#line 90
allow system_app update_engine:binder { call transfer };
#line 90
# Allow the serverdomain to transfer references to the client on the reply.
#line 90
allow update_engine system_app:binder transfer;
#line 90
# Receive and use open files from the server.
#line 90
allow system_app update_engine:fd use;
#line 90
# Allow system app to interact with Dumpstate HAL
#line 93
typeattribute system_app halclientdomain;
#line 93
typeattribute system_app hal_dumpstate_client;
#line 93
#line 93
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 93
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 93
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 93
#line 93
typeattribute system_app hal_dumpstate;
#line 93
# Find passthrough HAL implementations
#line 93
allow hal_dumpstate system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 93
allow hal_dumpstate vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 93
allow hal_dumpstate vendor_file:file { read open getattr execute map };
#line 93
#line 93
allow system_app servicemanager:service_manager list;
# TODO: scope this down? Too broad?
allow system_app {
service_manager_type
-apex_service
-dnsresolver_service
-dumpstate_service
-installd_service
-lpdump_service
-mdns_service
-netd_service
-system_suspend_control_internal_service
-system_suspend_control_service
-tracingproxy_service
-virtual_touchpad_service
-vold_service
-default_android_service
}:service_manager find;
# suppress denials for services system_app should not be accessing.
dontaudit system_app {
dnsresolver_service
dumpstate_service
installd_service
mdns_service
netd_service
virtual_touchpad_service
vold_service
}:service_manager find;
# suppress denials caused by debugfs_tracing
dontaudit system_app debugfs_tracing:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Ignore access to memory properties for Settings.
dontaudit system_app proc_pagetypeinfo:file { getattr open read ioctl lock map watch watch_reads };
dontaudit system_app sysfs_zram:dir search;
allow system_app keystore:keystore2_key {
delete
get_info
grant
rebind
update
use
};
# Allow Settings to manage WI-FI keys.
allow system_app wifi_key:keystore2_key {
delete
get_info
rebind
update
use
};
# settings app reads /proc/version
allow system_app {
proc_version
}:file { getattr open read ioctl lock map watch watch_reads };
# Settings app writes to /dev/stune/foreground/tasks.
allow system_app cgroup:file { open append write lock map };
allow system_app cgroup_v2:file { open append write lock map };
allow system_app cgroup_v2:dir { open search write add_name remove_name lock };
#line 159
# Group AID_LOG checked by filesystem & logd
#line 159
# to permit control commands
#line 159
#line 159
allow system_app logd_socket:sock_file write;
#line 159
allow system_app logd:unix_stream_socket connectto;
#line 159
#line 159
#line 160
allow system_app runtime_event_log_tags_file:file { getattr open read ioctl lock map watch watch_reads };
#line 160
#line 161
allow system_app device_logging_prop:file { getattr open read map };
#line 161
# allow system apps to use UDP sockets provided by the system server but not
# modify them other than to connect
allow system_app system_server:udp_socket {
connect getattr read recvfrom sendto write getopt setopt };
# allow system apps to read game manager related sysrops
#line 169
allow system_app game_manager_config_prop:file { getattr open read map };
#line 169
# Settings app reads ro.oem_unlock_supported
#line 172
allow system_app oem_unlock_prop:file { getattr open read map };
#line 172
# Settings app reads ro.usb.uvc.enabled
#line 175
allow system_app usb_uvc_enabled_prop:file { getattr open read map };
#line 175
# Settings and Launcher apps read pm.archiving.enabled
#line 178
allow system_app pm_archiving_enabled_prop:file { getattr open read map };
#line 178
###
### Neverallow rules
###
# app domains which access /dev/fuse should not run as system_app
neverallow system_app fuse_device:chr_file *;
# Apps which run as UID=system should not rely on any attacker controlled
# filesystem locations, such as /data/local/tmp. For /data/local/tmp, we
# allow writes to files passed by file descriptor to support dumpstate and
# bug reports, but not reads.
neverallow system_app shell_data_file:dir { { add_name create link relabelfrom remove_name rename reparent rmdir setattr write } open search read };
neverallow system_app shell_data_file:file { open read ioctl lock };
# system_app should be the only domain writing the adaptive haptics prop
neverallow { domain -init -system_app } adaptive_haptics_prop:property_service set;
# system_app should be the only domain writing the force l3 prop
neverallow { domain -init -system_app } drm_forcel3_prop:property_service set;
#line 1 "system/sepolicy/private/system_server.te"
#
# System Server aka system_server spawned by zygote.
# Most of the framework services run in this process.
#
typeattribute system_server coredomain;
typeattribute system_server mlstrustedsubject;
typeattribute system_server remote_provisioning_service_server;
typeattribute system_server scheduler_service_server;
typeattribute system_server sensor_service_server;
typeattribute system_server stats_service_server;
typeattribute system_server bpfdomain;
# Define a type for tmpfs-backed ashmem regions.
#line 15
type_transition system_server tmpfs:file system_server_tmpfs;
#line 15
allow system_server system_server_tmpfs:file { read write getattr map };
#line 15
#line 17
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 17
type system_server_userfaultfd;
#line 17
type_transition system_server system_server:anon_inode system_server_userfaultfd "[userfaultfd]";
#line 17
# Allow domain to create/use userfaultfd anon_inode.
#line 17
allow system_server system_server_userfaultfd:anon_inode { create ioctl read };
#line 17
# Suppress errors generate during bugreport
#line 17
dontaudit su system_server_userfaultfd:anon_inode *;
#line 17
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 17
neverallow { domain -system_server } system_server_userfaultfd:anon_inode *;
#line 17
# Create a socket for connections from crash_dump.
type_transition system_server system_data_file:sock_file system_ndebug_socket "ndebugsocket";
# Create a socket for connections from zygotes.
type_transition system_server system_data_file:sock_file system_unsolzygote_socket "unsolzygotesocket";
allow system_server zygote_tmpfs:file { map read };
allow system_server appdomain_tmpfs:file { getattr map read write };
# For Incremental Service to check if incfs is available
allow system_server proc_filesystems:file { getattr open read ioctl lock map watch watch_reads };
# To create files, get permission to fill blocks, and configure Incremental File System
allow system_server incremental_control_file:file { ioctl { getattr open read ioctl lock map watch watch_reads } };
allowxperm system_server incremental_control_file:file ioctl {
0x0000671e
0x00006723
0x00006721
0x00006725
0x00006726
0x00006727
};
# To get signature of an APK installed on Incremental File System, and fill in data
# blocks and get the filesystem state
allowxperm system_server apk_data_file:file ioctl {
0x0000671f
0x00006720
0x00006722
0x00006724
0xf50c
0xf511
0xf518
0xf517
0xf512
0xf513
0x40086602
0x80086601
};
allowxperm system_server apk_tmp_file:file ioctl {
0xf512
0x80086601
};
# For Incremental Service to check incfs metrics
allow system_server sysfs_fs_incfs_metrics:file { getattr open read ioctl lock map watch watch_reads };
# For f2fs-compression support
allow system_server sysfs_fs_f2fs:dir { open getattr read search ioctl lock watch watch_reads };
allow system_server sysfs_fs_f2fs:file { getattr open read ioctl lock map watch watch_reads };
# For SdkSandboxManagerService
allow system_server sdk_sandbox_system_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
# For art.
allow system_server { apex_art_data_file dalvikcache_data_file }:dir { open getattr read search ioctl lock watch watch_reads };
allow system_server { apex_art_data_file dalvikcache_data_file }:file { getattr open read ioctl lock map watch watch_reads };
# Ignore the denial on `system@framework@com.android.location.provider.jar@classes.odex`.
# `com.android.location.provider.jar` happens to be both a jar on system server classpath and a
# shared library used by a system server app. The odex file is loaded fine by Zygote when it forks
# system_server. It fails to be loaded when the jar is used as a shared library, which is expected.
dontaudit system_server apex_art_data_file:file execute;
# For release odex/vdex compress blocks
allowxperm system_server dalvikcache_data_file:file ioctl {
0xf512
0x80086601
};
# When running system server under --invoke-with, we'll try to load the boot image under the
# system server domain, following links to the system partition.
# /data/resource-cache
allow system_server resourcecache_data_file:file { getattr open read ioctl lock map watch watch_reads };
allow system_server resourcecache_data_file:dir { open getattr read search ioctl lock watch watch_reads };
# ptrace to processes in the same domain for debugging crashes.
allow system_server self:process ptrace;
# Child of the zygote.
allow system_server zygote:fd use;
allow system_server zygote:process sigchld;
# May kill zygote (or its child processes) on crashes.
allow system_server {
app_zygote
crash_dump
crosvm
virtualizationmanager
webview_zygote
zygote
}:process { getpgid sigkill signull };
# Read /system/bin/app_process.
allow system_server zygote_exec:file { getattr open read ioctl lock map watch watch_reads };
# Needed to close the zygote socket, which involves getopt / getattr
allow system_server zygote:unix_stream_socket { getopt getattr };
# system server gets network and bluetooth permissions.
#line 122
typeattribute system_server netdomain;
#line 122
# in addition to ioctls allowlisted for all domains, also allow system_server
# to use privileged ioctls commands. Needed to set up VPNs.
allowxperm system_server self:udp_socket ioctl
#line 125
{
#line 125
# qualcomm rmnet ioctls
#line 125
0x00006900 0x00006902
#line 125
# socket ioctls
#line 125
0x0000890b 0x0000890c 0x0000890d 0x00008911 0x00008914 0x00008916
#line 125
0x00008918 0x0000891a 0x0000891c 0x0000891d 0x0000891e 0x0000891f
#line 125
0x00008920 0x00008922 0x00008923 0x00008924 0x00008925 0x00008926
#line 125
0x00008927 0x00008929 0x00008930 0x00008931 0x00008932
#line 125
0x00008934 0x00008935 0x00008936 0x00008937 0x00008939 0x00008940 0x00008941
#line 125
0x00008943 0x00008946 0x00008947 0x00008948 0x00008949 0x0000894a
#line 125
0x0000894b 0x00008953 0x00008954 0x00008955 0x00008960 0x00008961 0x00008962 0x00008970
#line 125
0x00008971 0x00008980 0x00008981 0x00008982 0x00008983 0x00008990
#line 125
0x00008991 0x00008992 0x00008993 0x00008994
#line 125
0x00008995 0x000089a0 0x000089a1 0x000089a2 0x000089a3 0x000089b0
#line 125
# device and protocol specific ioctls
#line 125
0x000089f0-0x000089ff
#line 125
0x000089e0-0x000089ef
#line 125
# Wireless extension ioctls
#line 125
0x00008b00 0x00008b02 0x00008b04 0x00008b06 0x00008b08 0x00008b0a
#line 125
0x00008b0c 0x00008b0e 0x00008b10 0x00008b14 0x00008b15 0x00008b16 0x00008b17
#line 125
0x00008b18 0x00008b19 0x00008b1a 0x00008b1b 0x00008b1c 0x00008b1d
#line 125
0x00008b20 0x00008b22 0x00008b24 0x00008b26 0x00008b28 0x00008b2a
#line 125
0x00008b2b 0x00008b2c 0x00008b30 0x00008b31 0x00008b32 0x00008b33
#line 125
0x00008b34 0x00008b35 0x00008b36
#line 125
# Dev private ioctl i.e. hardware specific ioctls
#line 125
0x00008be0-0x00008bff
#line 125
};
#line 126
typeattribute system_server bluetoothdomain;
#line 126
# Allow setup of tcp keepalive offload. This gives system_server the permission to
# call ioctl on app domains' tcp sockets. Additional ioctl commands still need to
# be granted individually, except for a small set of safe values allowlisted in
# public/domain.te.
allow system_server appdomain:tcp_socket ioctl;
# These are the capabilities assigned by the zygote to the
# system server.
allow system_server self:{ capability cap_userns } {
ipc_lock
kill
net_admin
net_bind_service
net_broadcast
net_raw
sys_boot
sys_nice
sys_ptrace
sys_time
sys_tty_config
};
# Allow alarmtimers to be set
allow system_server self:{ capability2 cap2_userns } wake_alarm;
# Create and share netlink_netfilter_sockets for tetheroffload.
allow system_server self:netlink_netfilter_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# Create/use netlink_tcpdiag_socket for looking up connection UIDs for VPN apps.
allow system_server self:netlink_tcpdiag_socket
{ { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } } nlmsg_read nlmsg_write };
# Use netlink uevent sockets.
allow system_server self:netlink_kobject_uevent_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow system_server self:netlink_nflog_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# Use generic netlink sockets.
allow system_server self:netlink_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
allow system_server self:netlink_generic_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# libvintf reads the kernel config to verify vendor interface compatibility.
allow system_server config_gz:file { read open };
# Use generic "sockets" where the address family is not known
# to the kernel. The ioctl permission is specifically omitted here, but may
# be added to device specific policy along with the ioctl commands to be
# allowlisted.
allow system_server self:socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# Set and get routes directly via netlink.
allow system_server self:netlink_route_socket nlmsg_write;
# Use XFRM (IPsec) netlink sockets
allow system_server self:netlink_xfrm_socket { { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } } nlmsg_write nlmsg_read };
# Kill apps.
allow system_server appdomain:process { getpgid sigkill signal };
# signull allowed for kill(pid, 0) existence test.
allow system_server appdomain:process { signull };
# Set scheduling info for apps.
allow system_server appdomain:process { getsched setsched };
allow system_server audioserver:process { getsched setsched };
allow system_server hal_audio:process { getsched setsched };
allow system_server hal_bluetooth:process { getsched setsched };
allow system_server hal_codec2_server:process { getsched setsched };
allow system_server hal_omx_server:process { getsched setsched };
allow system_server mediaswcodec:process { getsched setsched };
allow system_server cameraserver:process { getsched setsched };
allow system_server hal_camera:process { getsched setsched };
allow system_server mediaserver:process { getsched setsched };
allow system_server bootanim:process { getsched setsched };
# Set scheduling info for psi monitor thread.
# TODO: delete this line b/131761776
allow system_server kernel:process { getsched setsched };
# Allow system_server to write to /proc/<pid>/*
allow system_server domain:file { open append write lock map };
# Read /proc/pid data for all domains. This is used by ProcessCpuTracker
# within system_server to keep track of memory and CPU usage for
# all processes on the device. In addition, /proc/pid files access is needed
# for dumping stack traces of native processes.
#line 213
allow system_server domain:dir { open getattr read search ioctl lock watch watch_reads };
#line 213
allow system_server domain:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 213
# Write /proc/uid_cputime/remove_uid_range.
allow system_server proc_uid_cputime_removeuid:file { { open append write lock map } getattr };
# Write /proc/uid_procstat/set.
allow system_server proc_uid_procstat_set:file { { open append write lock map } getattr };
# Write to /proc/sysrq-trigger.
allow system_server proc_sysrq:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Delete /data/misc/stats-service/ directories.
allow system_server stats_config_data_file:dir { open read remove_name search write };
allow system_server stats_config_data_file:file unlink;
# Read metric file & upload to statsd
allow system_server odsign_data_file:dir search;
allow system_server odsign_metrics_file:dir { { open getattr read search ioctl lock watch watch_reads } write remove_name };
allow system_server odsign_metrics_file:file { { getattr open read ioctl lock map watch watch_reads } unlink };
# Read /sys/kernel/debug/wakeup_sources.
#line 234
allow system_server debugfs_wakeup_sources:file { getattr open read ioctl lock map watch watch_reads };
#line 236
# Read /sys/kernel/ion/*.
allow system_server sysfs_ion:file { getattr open read ioctl lock map watch watch_reads };
# Read /sys/kernel/dma_heap/*.
allow system_server sysfs_dma_heap:file { getattr open read ioctl lock map watch watch_reads };
# Allow reading DMA-BUF sysfs stats from /sys/kernel/dmabuf.
allow system_server sysfs_dmabuf_stats:dir { open getattr read search ioctl lock watch watch_reads };
allow system_server sysfs_dmabuf_stats:file { getattr open read ioctl lock map watch watch_reads };
# Allow ActivityManager to look at the list of DMA-BUF heaps from /dev/dma_heap
# for dumpsys meminfo
allow system_server dmabuf_heap_device:dir { open getattr read search ioctl lock watch watch_reads };
# Allow reading /proc/vmstat for the oom kill count
allow system_server proc_vmstat:file { getattr open read ioctl lock map watch watch_reads };
# The DhcpClient and WifiWatchdog use packet_sockets
allow system_server self:packet_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# 3rd party VPN clients require a tun_socket to be created
allow system_server self:tun_socket { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } };
# Talk to init and various daemons via sockets.
#line 262
allow system_server lmkd_socket:sock_file write;
#line 262
allow system_server lmkd:unix_stream_socket connectto;
#line 262
#line 263
allow system_server zygote_socket:sock_file write;
#line 263
allow system_server zygote:unix_stream_socket connectto;
#line 263
#line 264
allow system_server uncrypt_socket:sock_file write;
#line 264
allow system_server uncrypt:unix_stream_socket connectto;
#line 264
# Allow system_server to write to statsd.
#line 267
allow system_server statsdw_socket:sock_file write;
#line 267
allow system_server statsd:unix_dgram_socket sendto;
#line 267
# Communicate over a socket created by surfaceflinger.
allow system_server surfaceflinger:unix_stream_socket { read write setopt };
allow system_server gpuservice:unix_stream_socket { read write setopt };
# Communicate over a socket created by webview_zygote.
allow system_server webview_zygote:unix_stream_socket { read write connectto setopt };
# Communicate over a socket created by app_zygote.
allow system_server app_zygote:unix_stream_socket { read write connectto setopt };
# Perform Binder IPC.
#line 281
# Call the servicemanager and transfer references to it.
#line 281
allow system_server servicemanager:binder { call transfer };
#line 281
# Allow servicemanager to send out callbacks
#line 281
allow servicemanager system_server:binder { call transfer };
#line 281
# servicemanager performs getpidcon on clients.
#line 281
allow servicemanager system_server:dir search;
#line 281
allow servicemanager system_server:file { read open };
#line 281
allow servicemanager system_server:process getattr;
#line 281
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 281
# all domains in domain.te.
#line 281
#line 282
# Call the server domain and optionally transfer references to it.
#line 282
allow system_server appdomain:binder { call transfer };
#line 282
# Allow the serverdomain to transfer references to the client on the reply.
#line 282
allow appdomain system_server:binder transfer;
#line 282
# Receive and use open files from the server.
#line 282
allow system_server appdomain:fd use;
#line 282
#line 283
# Call the server domain and optionally transfer references to it.
#line 283
allow system_server artd:binder { call transfer };
#line 283
# Allow the serverdomain to transfer references to the client on the reply.
#line 283
allow artd system_server:binder transfer;
#line 283
# Receive and use open files from the server.
#line 283
allow system_server artd:fd use;
#line 283
#line 284
# Call the server domain and optionally transfer references to it.
#line 284
allow system_server binderservicedomain:binder { call transfer };
#line 284
# Allow the serverdomain to transfer references to the client on the reply.
#line 284
allow binderservicedomain system_server:binder transfer;
#line 284
# Receive and use open files from the server.
#line 284
allow system_server binderservicedomain:fd use;
#line 284
#line 285
# Call the server domain and optionally transfer references to it.
#line 285
allow system_server composd:binder { call transfer };
#line 285
# Allow the serverdomain to transfer references to the client on the reply.
#line 285
allow composd system_server:binder transfer;
#line 285
# Receive and use open files from the server.
#line 285
allow system_server composd:fd use;
#line 285
#line 286
# Call the server domain and optionally transfer references to it.
#line 286
allow system_server dexopt_chroot_setup:binder { call transfer };
#line 286
# Allow the serverdomain to transfer references to the client on the reply.
#line 286
allow dexopt_chroot_setup system_server:binder transfer;
#line 286
# Receive and use open files from the server.
#line 286
allow system_server dexopt_chroot_setup:fd use;
#line 286
#line 287
# Call the server domain and optionally transfer references to it.
#line 287
allow system_server dumpstate:binder { call transfer };
#line 287
# Allow the serverdomain to transfer references to the client on the reply.
#line 287
allow dumpstate system_server:binder transfer;
#line 287
# Receive and use open files from the server.
#line 287
allow system_server dumpstate:fd use;
#line 287
#line 288
# Call the server domain and optionally transfer references to it.
#line 288
allow system_server fingerprintd:binder { call transfer };
#line 288
# Allow the serverdomain to transfer references to the client on the reply.
#line 288
allow fingerprintd system_server:binder transfer;
#line 288
# Receive and use open files from the server.
#line 288
allow system_server fingerprintd:fd use;
#line 288
#line 289
# Call the server domain and optionally transfer references to it.
#line 289
allow system_server gatekeeperd:binder { call transfer };
#line 289
# Allow the serverdomain to transfer references to the client on the reply.
#line 289
allow gatekeeperd system_server:binder transfer;
#line 289
# Receive and use open files from the server.
#line 289
allow system_server gatekeeperd:fd use;
#line 289
#line 290
# Call the server domain and optionally transfer references to it.
#line 290
allow system_server gpuservice:binder { call transfer };
#line 290
# Allow the serverdomain to transfer references to the client on the reply.
#line 290
allow gpuservice system_server:binder transfer;
#line 290
# Receive and use open files from the server.
#line 290
allow system_server gpuservice:fd use;
#line 290
#line 291
# Call the server domain and optionally transfer references to it.
#line 291
allow system_server idmap:binder { call transfer };
#line 291
# Allow the serverdomain to transfer references to the client on the reply.
#line 291
allow idmap system_server:binder transfer;
#line 291
# Receive and use open files from the server.
#line 291
allow system_server idmap:fd use;
#line 291
#line 292
# Call the server domain and optionally transfer references to it.
#line 292
allow system_server installd:binder { call transfer };
#line 292
# Allow the serverdomain to transfer references to the client on the reply.
#line 292
allow installd system_server:binder transfer;
#line 292
# Receive and use open files from the server.
#line 292
allow system_server installd:fd use;
#line 292
#line 293
# Call the server domain and optionally transfer references to it.
#line 293
allow system_server incidentd:binder { call transfer };
#line 293
# Allow the serverdomain to transfer references to the client on the reply.
#line 293
allow incidentd system_server:binder transfer;
#line 293
# Receive and use open files from the server.
#line 293
allow system_server incidentd:fd use;
#line 293
#line 294
# Call the server domain and optionally transfer references to it.
#line 294
allow system_server netd:binder { call transfer };
#line 294
# Allow the serverdomain to transfer references to the client on the reply.
#line 294
allow netd system_server:binder transfer;
#line 294
# Receive and use open files from the server.
#line 294
allow system_server netd:fd use;
#line 294
#line 295
# Call the server domain and optionally transfer references to it.
#line 295
allow system_server ot_daemon:binder { call transfer };
#line 295
# Allow the serverdomain to transfer references to the client on the reply.
#line 295
allow ot_daemon system_server:binder transfer;
#line 295
# Receive and use open files from the server.
#line 295
allow system_server ot_daemon:fd use;
#line 295
#line 297
# Call the server domain and optionally transfer references to it.
#line 297
allow system_server statsd:binder { call transfer };
#line 297
# Allow the serverdomain to transfer references to the client on the reply.
#line 297
allow statsd system_server:binder transfer;
#line 297
# Receive and use open files from the server.
#line 297
allow system_server statsd:fd use;
#line 297
#line 298
# Call the server domain and optionally transfer references to it.
#line 298
allow system_server storaged:binder { call transfer };
#line 298
# Allow the serverdomain to transfer references to the client on the reply.
#line 298
allow storaged system_server:binder transfer;
#line 298
# Receive and use open files from the server.
#line 298
allow system_server storaged:fd use;
#line 298
#line 299
# Call the server domain and optionally transfer references to it.
#line 299
allow system_server update_engine:binder { call transfer };
#line 299
# Allow the serverdomain to transfer references to the client on the reply.
#line 299
allow update_engine system_server:binder transfer;
#line 299
# Receive and use open files from the server.
#line 299
allow system_server update_engine:fd use;
#line 299
#line 300
# Call the server domain and optionally transfer references to it.
#line 300
allow system_server virtual_camera:binder { call transfer };
#line 300
# Allow the serverdomain to transfer references to the client on the reply.
#line 300
allow virtual_camera system_server:binder transfer;
#line 300
# Receive and use open files from the server.
#line 300
allow system_server virtual_camera:fd use;
#line 300
#line 301
# Call the server domain and optionally transfer references to it.
#line 301
allow system_server vold:binder { call transfer };
#line 301
# Allow the serverdomain to transfer references to the client on the reply.
#line 301
allow vold system_server:binder transfer;
#line 301
# Receive and use open files from the server.
#line 301
allow system_server vold:fd use;
#line 301
#line 302
# Call the server domain and optionally transfer references to it.
#line 302
allow system_server logd:binder { call transfer };
#line 302
# Allow the serverdomain to transfer references to the client on the reply.
#line 302
allow logd system_server:binder transfer;
#line 302
# Receive and use open files from the server.
#line 302
allow system_server logd:fd use;
#line 302
#line 303
# Call the server domain and optionally transfer references to it.
#line 303
allow system_server wificond:binder { call transfer };
#line 303
# Allow the serverdomain to transfer references to the client on the reply.
#line 303
allow wificond system_server:binder transfer;
#line 303
# Receive and use open files from the server.
#line 303
allow system_server wificond:fd use;
#line 303
#line 304
# Call the server domain and optionally transfer references to it.
#line 304
allow system_server uprobestats:binder { call transfer };
#line 304
# Allow the serverdomain to transfer references to the client on the reply.
#line 304
allow uprobestats system_server:binder transfer;
#line 304
# Receive and use open files from the server.
#line 304
allow system_server uprobestats:fd use;
#line 304
#line 305
typeattribute system_server binderservicedomain;
#line 305
# Use HALs
#line 308
typeattribute system_server halclientdomain;
#line 308
typeattribute system_server hal_allocator_client;
#line 308
#line 308
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 308
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 308
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 308
#line 308
typeattribute system_server hal_allocator;
#line 308
# Find passthrough HAL implementations
#line 308
allow hal_allocator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 308
allow hal_allocator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 308
allow hal_allocator vendor_file:file { read open getattr execute map };
#line 308
#line 308
#line 309
typeattribute system_server halclientdomain;
#line 309
typeattribute system_server hal_audio_client;
#line 309
#line 309
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 309
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 309
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 309
#line 309
typeattribute system_server hal_audio;
#line 309
# Find passthrough HAL implementations
#line 309
allow hal_audio system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 309
allow hal_audio vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 309
allow hal_audio vendor_file:file { read open getattr execute map };
#line 309
#line 309
#line 310
typeattribute system_server halclientdomain;
#line 310
typeattribute system_server hal_authgraph_client;
#line 310
#line 310
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 310
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 310
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 310
#line 310
typeattribute system_server hal_authgraph;
#line 310
# Find passthrough HAL implementations
#line 310
allow hal_authgraph system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 310
allow hal_authgraph vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 310
allow hal_authgraph vendor_file:file { read open getattr execute map };
#line 310
#line 310
#line 311
typeattribute system_server halclientdomain;
#line 311
typeattribute system_server hal_authsecret_client;
#line 311
#line 311
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 311
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 311
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 311
#line 311
typeattribute system_server hal_authsecret;
#line 311
# Find passthrough HAL implementations
#line 311
allow hal_authsecret system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 311
allow hal_authsecret vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 311
allow hal_authsecret vendor_file:file { read open getattr execute map };
#line 311
#line 311
#line 312
typeattribute system_server halclientdomain;
#line 312
typeattribute system_server hal_bluetooth_client;
#line 312
#line 312
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 312
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 312
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 312
#line 312
typeattribute system_server hal_bluetooth;
#line 312
# Find passthrough HAL implementations
#line 312
allow hal_bluetooth system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 312
allow hal_bluetooth vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 312
allow hal_bluetooth vendor_file:file { read open getattr execute map };
#line 312
#line 312
#line 313
typeattribute system_server halclientdomain;
#line 313
typeattribute system_server hal_broadcastradio_client;
#line 313
#line 313
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 313
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 313
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 313
#line 313
typeattribute system_server hal_broadcastradio;
#line 313
# Find passthrough HAL implementations
#line 313
allow hal_broadcastradio system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 313
allow hal_broadcastradio vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 313
allow hal_broadcastradio vendor_file:file { read open getattr execute map };
#line 313
#line 313
#line 314
typeattribute system_server halclientdomain;
#line 314
typeattribute system_server hal_codec2_client;
#line 314
#line 314
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 314
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 314
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 314
#line 314
typeattribute system_server hal_codec2;
#line 314
# Find passthrough HAL implementations
#line 314
allow hal_codec2 system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 314
allow hal_codec2 vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 314
allow hal_codec2 vendor_file:file { read open getattr execute map };
#line 314
#line 314
#line 315
typeattribute system_server halclientdomain;
#line 315
typeattribute system_server hal_configstore_client;
#line 315
#line 315
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 315
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 315
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 315
#line 315
typeattribute system_server hal_configstore;
#line 315
# Find passthrough HAL implementations
#line 315
allow hal_configstore system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 315
allow hal_configstore vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 315
allow hal_configstore vendor_file:file { read open getattr execute map };
#line 315
#line 315
#line 316
typeattribute system_server halclientdomain;
#line 316
typeattribute system_server hal_contexthub_client;
#line 316
#line 316
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 316
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 316
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 316
#line 316
typeattribute system_server hal_contexthub;
#line 316
# Find passthrough HAL implementations
#line 316
allow hal_contexthub system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 316
allow hal_contexthub vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 316
allow hal_contexthub vendor_file:file { read open getattr execute map };
#line 316
#line 316
#line 317
typeattribute system_server halclientdomain;
#line 317
typeattribute system_server hal_face_client;
#line 317
#line 317
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 317
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 317
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 317
#line 317
typeattribute system_server hal_face;
#line 317
# Find passthrough HAL implementations
#line 317
allow hal_face system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 317
allow hal_face vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 317
allow hal_face vendor_file:file { read open getattr execute map };
#line 317
#line 317
#line 318
typeattribute system_server halclientdomain;
#line 318
typeattribute system_server hal_fingerprint_client;
#line 318
#line 318
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 318
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 318
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 318
#line 318
typeattribute system_server hal_fingerprint;
#line 318
# Find passthrough HAL implementations
#line 318
allow hal_fingerprint system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 318
allow hal_fingerprint vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 318
allow hal_fingerprint vendor_file:file { read open getattr execute map };
#line 318
#line 318
#line 319
typeattribute system_server halclientdomain;
#line 319
typeattribute system_server hal_gnss_client;
#line 319
#line 319
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 319
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 319
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 319
#line 319
typeattribute system_server hal_gnss;
#line 319
# Find passthrough HAL implementations
#line 319
allow hal_gnss system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 319
allow hal_gnss vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 319
allow hal_gnss vendor_file:file { read open getattr execute map };
#line 319
#line 319
#line 320
typeattribute system_server halclientdomain;
#line 320
typeattribute system_server hal_graphics_allocator_client;
#line 320
#line 320
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 320
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 320
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 320
#line 320
typeattribute system_server hal_graphics_allocator;
#line 320
# Find passthrough HAL implementations
#line 320
allow hal_graphics_allocator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 320
allow hal_graphics_allocator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 320
allow hal_graphics_allocator vendor_file:file { read open getattr execute map };
#line 320
#line 320
#line 321
typeattribute system_server halclientdomain;
#line 321
typeattribute system_server hal_health_client;
#line 321
#line 321
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 321
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 321
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 321
#line 321
typeattribute system_server hal_health;
#line 321
# Find passthrough HAL implementations
#line 321
allow hal_health system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 321
allow hal_health vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 321
allow hal_health vendor_file:file { read open getattr execute map };
#line 321
#line 321
#line 322
typeattribute system_server halclientdomain;
#line 322
typeattribute system_server hal_input_classifier_client;
#line 322
#line 322
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 322
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 322
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 322
#line 322
typeattribute system_server hal_input_classifier;
#line 322
# Find passthrough HAL implementations
#line 322
allow hal_input_classifier system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 322
allow hal_input_classifier vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 322
allow hal_input_classifier vendor_file:file { read open getattr execute map };
#line 322
#line 322
#line 323
typeattribute system_server halclientdomain;
#line 323
typeattribute system_server hal_input_processor_client;
#line 323
#line 323
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 323
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 323
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 323
#line 323
typeattribute system_server hal_input_processor;
#line 323
# Find passthrough HAL implementations
#line 323
allow hal_input_processor system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 323
allow hal_input_processor vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 323
allow hal_input_processor vendor_file:file { read open getattr execute map };
#line 323
#line 323
#line 324
typeattribute system_server halclientdomain;
#line 324
typeattribute system_server hal_ir_client;
#line 324
#line 324
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 324
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 324
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 324
#line 324
typeattribute system_server hal_ir;
#line 324
# Find passthrough HAL implementations
#line 324
allow hal_ir system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 324
allow hal_ir vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 324
allow hal_ir vendor_file:file { read open getattr execute map };
#line 324
#line 324
#line 325
typeattribute system_server halclientdomain;
#line 325
typeattribute system_server hal_keymint_client;
#line 325
#line 325
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 325
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 325
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 325
#line 325
typeattribute system_server hal_keymint;
#line 325
# Find passthrough HAL implementations
#line 325
allow hal_keymint system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 325
allow hal_keymint vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 325
allow hal_keymint vendor_file:file { read open getattr execute map };
#line 325
#line 325
#line 326
typeattribute system_server halclientdomain;
#line 326
typeattribute system_server hal_light_client;
#line 326
#line 326
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 326
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 326
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 326
#line 326
typeattribute system_server hal_light;
#line 326
# Find passthrough HAL implementations
#line 326
allow hal_light system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 326
allow hal_light vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 326
allow hal_light vendor_file:file { read open getattr execute map };
#line 326
#line 326
#line 327
typeattribute system_server halclientdomain;
#line 327
typeattribute system_server hal_memtrack_client;
#line 327
#line 327
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 327
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 327
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 327
#line 327
typeattribute system_server hal_memtrack;
#line 327
# Find passthrough HAL implementations
#line 327
allow hal_memtrack system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 327
allow hal_memtrack vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 327
allow hal_memtrack vendor_file:file { read open getattr execute map };
#line 327
#line 327
#line 328
typeattribute system_server halclientdomain;
#line 328
typeattribute system_server hal_neuralnetworks_client;
#line 328
#line 328
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 328
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 328
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 328
#line 328
typeattribute system_server hal_neuralnetworks;
#line 328
# Find passthrough HAL implementations
#line 328
allow hal_neuralnetworks system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 328
allow hal_neuralnetworks vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 328
allow hal_neuralnetworks vendor_file:file { read open getattr execute map };
#line 328
#line 328
#line 329
typeattribute system_server halclientdomain;
#line 329
typeattribute system_server hal_oemlock_client;
#line 329
#line 329
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 329
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 329
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 329
#line 329
typeattribute system_server hal_oemlock;
#line 329
# Find passthrough HAL implementations
#line 329
allow hal_oemlock system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 329
allow hal_oemlock vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 329
allow hal_oemlock vendor_file:file { read open getattr execute map };
#line 329
#line 329
#line 330
typeattribute system_server halclientdomain;
#line 330
typeattribute system_server hal_omx_client;
#line 330
#line 330
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 330
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 330
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 330
#line 330
typeattribute system_server hal_omx;
#line 330
# Find passthrough HAL implementations
#line 330
allow hal_omx system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 330
allow hal_omx vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 330
allow hal_omx vendor_file:file { read open getattr execute map };
#line 330
#line 330
#line 331
typeattribute system_server halclientdomain;
#line 331
typeattribute system_server hal_power_client;
#line 331
#line 331
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 331
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 331
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 331
#line 331
typeattribute system_server hal_power;
#line 331
# Find passthrough HAL implementations
#line 331
allow hal_power system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 331
allow hal_power vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 331
allow hal_power vendor_file:file { read open getattr execute map };
#line 331
#line 331
#line 332
typeattribute system_server halclientdomain;
#line 332
typeattribute system_server hal_power_stats_client;
#line 332
#line 332
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 332
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 332
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 332
#line 332
typeattribute system_server hal_power_stats;
#line 332
# Find passthrough HAL implementations
#line 332
allow hal_power_stats system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 332
allow hal_power_stats vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 332
allow hal_power_stats vendor_file:file { read open getattr execute map };
#line 332
#line 332
#line 333
typeattribute system_server halclientdomain;
#line 333
typeattribute system_server hal_rebootescrow_client;
#line 333
#line 333
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 333
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 333
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 333
#line 333
typeattribute system_server hal_rebootescrow;
#line 333
# Find passthrough HAL implementations
#line 333
allow hal_rebootescrow system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 333
allow hal_rebootescrow vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 333
allow hal_rebootescrow vendor_file:file { read open getattr execute map };
#line 333
#line 333
#line 334
typeattribute system_server halclientdomain;
#line 334
typeattribute system_server hal_remotelyprovisionedcomponent_avf_client;
#line 334
#line 334
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 334
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 334
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 334
#line 334
typeattribute system_server hal_remotelyprovisionedcomponent_avf;
#line 334
# Find passthrough HAL implementations
#line 334
allow hal_remotelyprovisionedcomponent_avf system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 334
allow hal_remotelyprovisionedcomponent_avf vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 334
allow hal_remotelyprovisionedcomponent_avf vendor_file:file { read open getattr execute map };
#line 334
#line 334
#line 335
typeattribute system_server halclientdomain;
#line 335
typeattribute system_server hal_sensors_client;
#line 335
#line 335
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 335
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 335
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 335
#line 335
typeattribute system_server hal_sensors;
#line 335
# Find passthrough HAL implementations
#line 335
allow hal_sensors system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 335
allow hal_sensors vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 335
allow hal_sensors vendor_file:file { read open getattr execute map };
#line 335
#line 335
#line 336
typeattribute system_server halclientdomain;
#line 336
typeattribute system_server hal_tetheroffload_client;
#line 336
#line 336
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 336
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 336
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 336
#line 336
typeattribute system_server hal_tetheroffload;
#line 336
# Find passthrough HAL implementations
#line 336
allow hal_tetheroffload system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 336
allow hal_tetheroffload vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 336
allow hal_tetheroffload vendor_file:file { read open getattr execute map };
#line 336
#line 336
#line 337
typeattribute system_server halclientdomain;
#line 337
typeattribute system_server hal_thermal_client;
#line 337
#line 337
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 337
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 337
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 337
#line 337
typeattribute system_server hal_thermal;
#line 337
# Find passthrough HAL implementations
#line 337
allow hal_thermal system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 337
allow hal_thermal vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 337
allow hal_thermal vendor_file:file { read open getattr execute map };
#line 337
#line 337
#line 338
typeattribute system_server halclientdomain;
#line 338
typeattribute system_server hal_threadnetwork_client;
#line 338
#line 338
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 338
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 338
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 338
#line 338
typeattribute system_server hal_threadnetwork;
#line 338
# Find passthrough HAL implementations
#line 338
allow hal_threadnetwork system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 338
allow hal_threadnetwork vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 338
allow hal_threadnetwork vendor_file:file { read open getattr execute map };
#line 338
#line 338
#line 339
typeattribute system_server halclientdomain;
#line 339
typeattribute system_server hal_tv_cec_client;
#line 339
#line 339
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 339
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 339
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 339
#line 339
typeattribute system_server hal_tv_cec;
#line 339
# Find passthrough HAL implementations
#line 339
allow hal_tv_cec system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 339
allow hal_tv_cec vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 339
allow hal_tv_cec vendor_file:file { read open getattr execute map };
#line 339
#line 339
#line 340
typeattribute system_server halclientdomain;
#line 340
typeattribute system_server hal_tv_hdmi_cec_client;
#line 340
#line 340
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 340
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 340
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 340
#line 340
typeattribute system_server hal_tv_hdmi_cec;
#line 340
# Find passthrough HAL implementations
#line 340
allow hal_tv_hdmi_cec system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 340
allow hal_tv_hdmi_cec vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 340
allow hal_tv_hdmi_cec vendor_file:file { read open getattr execute map };
#line 340
#line 340
#line 341
typeattribute system_server halclientdomain;
#line 341
typeattribute system_server hal_tv_hdmi_connection_client;
#line 341
#line 341
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 341
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 341
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 341
#line 341
typeattribute system_server hal_tv_hdmi_connection;
#line 341
# Find passthrough HAL implementations
#line 341
allow hal_tv_hdmi_connection system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 341
allow hal_tv_hdmi_connection vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 341
allow hal_tv_hdmi_connection vendor_file:file { read open getattr execute map };
#line 341
#line 341
#line 342
typeattribute system_server halclientdomain;
#line 342
typeattribute system_server hal_tv_hdmi_earc_client;
#line 342
#line 342
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 342
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 342
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 342
#line 342
typeattribute system_server hal_tv_hdmi_earc;
#line 342
# Find passthrough HAL implementations
#line 342
allow hal_tv_hdmi_earc system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 342
allow hal_tv_hdmi_earc vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 342
allow hal_tv_hdmi_earc vendor_file:file { read open getattr execute map };
#line 342
#line 342
#line 343
typeattribute system_server halclientdomain;
#line 343
typeattribute system_server hal_tv_input_client;
#line 343
#line 343
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 343
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 343
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 343
#line 343
typeattribute system_server hal_tv_input;
#line 343
# Find passthrough HAL implementations
#line 343
allow hal_tv_input system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 343
allow hal_tv_input vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 343
allow hal_tv_input vendor_file:file { read open getattr execute map };
#line 343
#line 343
#line 344
typeattribute system_server halclientdomain;
#line 344
typeattribute system_server hal_usb_client;
#line 344
#line 344
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 344
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 344
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 344
#line 344
typeattribute system_server hal_usb;
#line 344
# Find passthrough HAL implementations
#line 344
allow hal_usb system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 344
allow hal_usb vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 344
allow hal_usb vendor_file:file { read open getattr execute map };
#line 344
#line 344
#line 345
typeattribute system_server halclientdomain;
#line 345
typeattribute system_server hal_usb_gadget_client;
#line 345
#line 345
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 345
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 345
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 345
#line 345
typeattribute system_server hal_usb_gadget;
#line 345
# Find passthrough HAL implementations
#line 345
allow hal_usb_gadget system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 345
allow hal_usb_gadget vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 345
allow hal_usb_gadget vendor_file:file { read open getattr execute map };
#line 345
#line 345
#line 346
typeattribute system_server halclientdomain;
#line 346
typeattribute system_server hal_uwb_client;
#line 346
#line 346
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 346
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 346
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 346
#line 346
typeattribute system_server hal_uwb;
#line 346
# Find passthrough HAL implementations
#line 346
allow hal_uwb system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 346
allow hal_uwb vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 346
allow hal_uwb vendor_file:file { read open getattr execute map };
#line 346
#line 346
#line 347
typeattribute system_server halclientdomain;
#line 347
typeattribute system_server hal_vibrator_client;
#line 347
#line 347
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 347
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 347
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 347
#line 347
typeattribute system_server hal_vibrator;
#line 347
# Find passthrough HAL implementations
#line 347
allow hal_vibrator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 347
allow hal_vibrator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 347
allow hal_vibrator vendor_file:file { read open getattr execute map };
#line 347
#line 347
#line 348
typeattribute system_server halclientdomain;
#line 348
typeattribute system_server hal_vr_client;
#line 348
#line 348
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 348
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 348
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 348
#line 348
typeattribute system_server hal_vr;
#line 348
# Find passthrough HAL implementations
#line 348
allow hal_vr system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 348
allow hal_vr vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 348
allow hal_vr vendor_file:file { read open getattr execute map };
#line 348
#line 348
#line 349
typeattribute system_server halclientdomain;
#line 349
typeattribute system_server hal_weaver_client;
#line 349
#line 349
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 349
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 349
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 349
#line 349
typeattribute system_server hal_weaver;
#line 349
# Find passthrough HAL implementations
#line 349
allow hal_weaver system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 349
allow hal_weaver vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 349
allow hal_weaver vendor_file:file { read open getattr execute map };
#line 349
#line 349
#line 350
typeattribute system_server halclientdomain;
#line 350
typeattribute system_server hal_wifi_client;
#line 350
#line 350
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 350
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 350
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 350
#line 350
typeattribute system_server hal_wifi;
#line 350
# Find passthrough HAL implementations
#line 350
allow hal_wifi system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 350
allow hal_wifi vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 350
allow hal_wifi vendor_file:file { read open getattr execute map };
#line 350
#line 350
#line 351
typeattribute system_server halclientdomain;
#line 351
typeattribute system_server hal_wifi_hostapd_client;
#line 351
#line 351
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 351
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 351
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 351
#line 351
typeattribute system_server hal_wifi_hostapd;
#line 351
# Find passthrough HAL implementations
#line 351
allow hal_wifi_hostapd system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 351
allow hal_wifi_hostapd vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 351
allow hal_wifi_hostapd vendor_file:file { read open getattr execute map };
#line 351
#line 351
#line 352
typeattribute system_server halclientdomain;
#line 352
typeattribute system_server hal_wifi_supplicant_client;
#line 352
#line 352
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 352
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 352
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 352
#line 352
typeattribute system_server hal_wifi_supplicant;
#line 352
# Find passthrough HAL implementations
#line 352
allow hal_wifi_supplicant system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 352
allow hal_wifi_supplicant vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 352
allow hal_wifi_supplicant vendor_file:file { read open getattr execute map };
#line 352
#line 352
# The bootctl is a pass through HAL mode under recovery mode. So we skip the
# permission for recovery in order not to give system server the access to
# the low level block devices.
#line 356
typeattribute system_server halclientdomain;
#line 356
typeattribute system_server hal_bootctl_client;
#line 356
#line 356
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 356
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 356
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 356
#line 356
typeattribute system_server hal_bootctl;
#line 356
# Find passthrough HAL implementations
#line 356
allow hal_bootctl system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 356
allow hal_bootctl vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 356
allow hal_bootctl vendor_file:file { read open getattr execute map };
#line 356
#line 356
# Talk with graphics composer fences
allow system_server hal_graphics_composer:fd use;
# Use RenderScript always-passthrough HAL
allow system_server hal_renderscript_hwservice:hwservice_manager find;
allow system_server same_process_hal_file:file { execute read open getattr map };
# Talk to tombstoned to get ANR traces.
#line 366
allow system_server tombstoned_intercept_socket:sock_file write;
#line 366
allow system_server tombstoned:unix_stream_socket connectto;
#line 366
# List HAL interfaces to get ANR traces.
allow system_server hwservicemanager:hwservice_manager list;
allow system_server servicemanager:service_manager list;
# Send signals to trigger ANR traces.
allow system_server {
# This is derived from the list that system server defines as interesting native processes
# to dump during ANRs or watchdog aborts, defined in NATIVE_STACKS_OF_INTEREST in
# frameworks/base/services/core/java/com/android/server/Watchdog.java.
artd
audioserver
cameraserver
drmserver
gpuservice
inputflinger
keystore
mediadrmserver
mediaextractor
mediametrics
mediaserver
mediaswcodec
mediatranscoding
mediatuner
netd
sdcardd
servicemanager
statsd
surfaceflinger
vold
# This list comes from HAL_INTERFACES_OF_INTEREST in
# frameworks/base/services/core/java/com/android/server/Watchdog.java.
hal_audio_server
hal_bluetooth_server
hal_camera_server
hal_codec2_server
hal_face_server
hal_fingerprint_server
hal_gnss_server
hal_graphics_allocator_server
hal_graphics_composer_server
hal_health_server
hal_input_processor_server
hal_light_server
hal_neuralnetworks_server
hal_omx_server
hal_power_server
hal_power_stats_server
hal_sensors_server
hal_vibrator_server
hal_vr_server
system_suspend_server
}:process { signal };
# Use sockets received over binder from various services.
allow system_server audioserver:tcp_socket { ioctl read getattr write setattr lock append bind connect getopt setopt shutdown map };
allow system_server audioserver:udp_socket { ioctl read getattr write setattr lock append bind connect getopt setopt shutdown map };
allow system_server mediaserver:tcp_socket { ioctl read getattr write setattr lock append bind connect getopt setopt shutdown map };
allow system_server mediaserver:udp_socket { ioctl read getattr write setattr lock append bind connect getopt setopt shutdown map };
# Use sockets received over binder from various services.
allow system_server mediadrmserver:tcp_socket { ioctl read getattr write setattr lock append bind connect getopt setopt shutdown map };
allow system_server mediadrmserver:udp_socket { ioctl read getattr write setattr lock append bind connect getopt setopt shutdown map };
# Write trace data to the Perfetto traced daemon. This requires connecting to
# its producer socket and obtaining a (per-process) tmpfs fd.
#line 434
allow system_server traced:fd use;
#line 434
allow system_server traced_tmpfs:file { read write getattr map };
#line 434
#line 434
allow system_server traced_producer_socket:sock_file write;
#line 434
allow system_server traced:unix_stream_socket connectto;
#line 434
#line 434
#line 434
# Also allow the service to use the producer file descriptors. This is
#line 434
# necessary when the producer is creating the shared memory, as it will be
#line 434
# passed to the service as a file descriptor (obtained from memfd_create).
#line 434
allow traced system_server:fd use;
#line 434
# Get file context
allow system_server file_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
# access for mac_permissions
allow system_server mac_perms_file: file { getattr open read ioctl lock map watch watch_reads };
# Check SELinux permissions.
#line 441
#line 441
allow system_server selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 441
allow system_server selinuxfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 441
#line 441
allow system_server selinuxfs:file { open append write lock map };
#line 441
allow system_server kernel:security compute_av;
#line 441
allow system_server self:netlink_selinux_socket { read write create getattr setattr lock relabelfrom relabelto append bind connect listen accept getopt setopt shutdown recvfrom sendto name_bind };
#line 441
allow system_server sysfs_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 445
allow system_server sysfs_android_usb:dir { open getattr read search ioctl lock watch watch_reads };
#line 445
allow system_server sysfs_android_usb:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 445
allow system_server sysfs_android_usb:file { open append write lock map };
#line 448
allow system_server sysfs_extcon:dir { open getattr read search ioctl lock watch watch_reads };
#line 448
allow system_server sysfs_extcon:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 448
#line 450
allow system_server sysfs_ipv4:dir { open getattr read search ioctl lock watch watch_reads };
#line 450
allow system_server sysfs_ipv4:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 450
allow system_server sysfs_ipv4:file { open append write lock map };
#line 453
allow system_server sysfs_rtc:dir { open getattr read search ioctl lock watch watch_reads };
#line 453
allow system_server sysfs_rtc:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 453
#line 454
allow system_server sysfs_switch:dir { open getattr read search ioctl lock watch watch_reads };
#line 454
allow system_server sysfs_switch:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 454
allow system_server sysfs_nfc_power_writable:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow system_server sysfs_power:dir search;
allow system_server sysfs_power:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow system_server sysfs_thermal:dir search;
allow system_server sysfs_thermal:file { getattr open read ioctl lock map watch watch_reads };
allow system_server sysfs_uhid:dir { open getattr read search ioctl lock watch watch_reads };
allow system_server sysfs_uhid:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# TODO: Remove when HALs are forced into separate processes
allow system_server sysfs_vibrator:file { write append };
# TODO: added to match above sysfs rule. Remove me?
allow system_server sysfs_usb:file { open append write lock map };
# Access devices.
allow system_server device:dir { open getattr read search ioctl lock watch watch_reads };
allow system_server mdns_socket:sock_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow system_server gpu_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow system_server gpu_device:dir { open getattr read search ioctl lock watch watch_reads };
allow system_server sysfs_gpu:file { getattr open read ioctl lock map watch watch_reads };
allow system_server input_device:dir { open getattr read search ioctl lock watch watch_reads };
allow system_server input_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow system_server tty_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow system_server usbaccessory_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow system_server video_device:dir { open getattr read search ioctl lock watch watch_reads };
allow system_server video_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow system_server adbd_socket:sock_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow system_server rtc_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow system_server audio_device:dir { open getattr read search ioctl lock watch watch_reads };
allow system_server uhid_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow system_server hidraw_device:dir { open getattr read search ioctl lock watch watch_reads };
allow system_server hidraw_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# write access to ALSA interfaces (/dev/snd/*) needed for MIDI
allow system_server audio_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# tun device used for 3rd party vpn apps and test network manager
allow system_server tun_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allowxperm system_server tun_device:chr_file ioctl { 0x800454d2 0x400454ca 0x400454cd 0x400454e2 };
# Manage data/ota_package
allow system_server ota_package_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow system_server ota_package_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Manage system data files.
allow system_server system_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server system_data_file:{ file lnk_file sock_file fifo_file } { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow system_server packages_list_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow system_server game_mode_intervention_list_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow system_server keychain_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server keychain_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow system_server keychain_data_file:lnk_file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Read the user parent directories like /data/user. Don't allow write access,
# as vold is responsible for creating and deleting the subdirectories.
allow system_server system_userdir_file:dir { open getattr read search ioctl lock watch watch_reads };
# Manage /data/app.
allow system_server apk_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server apk_data_file:{ file lnk_file } { { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } } link };
allow system_server apk_tmp_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server apk_tmp_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Access input configuration files in the /vendor directory
#line 520
allow system_server vendor_keylayout_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 520
allow system_server vendor_keylayout_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 520
#line 521
allow system_server vendor_keychars_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 521
allow system_server vendor_keychars_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 521
#line 522
allow system_server vendor_idc_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 522
allow system_server vendor_idc_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 522
#line 523
allow system_server input_device_config_prop:file { getattr open read map };
#line 523
# Access /vendor/{app,framework,overlay}
#line 526
allow system_server vendor_app_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 526
allow system_server vendor_app_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 526
#line 527
allow system_server vendor_framework_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 527
allow system_server vendor_framework_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 527
#line 528
allow system_server vendor_overlay_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 528
allow system_server vendor_overlay_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 528
# Manage /data/app-private.
allow system_server apk_private_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server apk_private_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow system_server apk_private_tmp_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server apk_private_tmp_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Manage files within asec containers.
allow system_server asec_apk_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server asec_apk_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow system_server asec_public_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Manage /data/anr.
#
# TODO: Some of these permissions can be withdrawn once we've switched to the
# new stack dumping mechanism, see b/32064548 and the rules below. In particular,
# the system_server should never need to create a new anr_data_file:file or write
# to one, but it will still need to read and append to existing files.
allow system_server anr_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server anr_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# New stack dumping scheme : request an output FD from tombstoned via a unix
# domain socket.
#
# Allow system_server to connect and write to the tombstoned java trace socket in
# order to dump its traces. Also allow the system server to write its traces to
# dumpstate during bugreport capture and incidentd during incident collection.
#line 556
allow system_server tombstoned_java_trace_socket:sock_file write;
#line 556
allow system_server tombstoned:unix_stream_socket connectto;
#line 556
allow system_server tombstoned:fd use;
allow system_server dumpstate:fifo_file append;
allow system_server incidentd:fifo_file append;
# Write to a pipe created from `adb shell` (for debuggerd -j `pidof system_server`)
#line 563
# Allow system_server to read pipes from incidentd (used to deliver incident reports
# to dropbox)
allow system_server incidentd:fifo_file read;
# Read /data/misc/incidents - only read. The fd will be sent over binder,
# with no DAC access to it, for dropbox to read.
allow system_server incident_data_file:file read;
# Manage /data/misc/prereboot.
allow system_server prereboot_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow system_server prereboot_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow tracing proxy service to read traces. Only the fd is sent over
# binder.
allow system_server perfetto_traces_data_file:file { read getattr };
allow system_server perfetto:fd use;
# Allow system_server to exec the perfetto cmdline client and pass it a trace config
#line 583
# Allow the necessary permissions.
#line 583
#line 583
# Old domain may exec the file and transition to the new domain.
#line 583
allow system_server perfetto_exec:file { getattr open read execute map };
#line 583
allow system_server perfetto:process transition;
#line 583
# New domain is entered by executing the file.
#line 583
allow perfetto perfetto_exec:file { entrypoint open read execute getattr map };
#line 583
# New domain can send SIGCHLD to its caller.
#line 583
allow perfetto system_server:process sigchld;
#line 583
# Enable AT_SECURE, i.e. libc secure mode.
#line 583
dontaudit system_server perfetto:process noatsecure;
#line 583
# XXX dontaudit candidate but requires further study.
#line 583
allow system_server perfetto:process { siginh rlimitinh };
#line 583
#line 583
# Make the transition occur by default.
#line 583
type_transition system_server perfetto_exec:process perfetto;
#line 583
;
allow system_server perfetto:fifo_file { read write };
# Allow system server to manage perfetto traces for ProfilingService.
allow system_server perfetto_traces_profiling_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow system_server perfetto_traces_profiling_data_file:file { { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } unlink };
allow system_server perfetto_traces_data_file:dir search;
# Manage /data/backup.
allow system_server backup_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server backup_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Write to /data/system/dropbox
allow system_server dropbox_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server dropbox_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Write to /data/system/heapdump
allow system_server heapdump_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow system_server heapdump_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Manage /data/misc/adb.
allow system_server adb_keys_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server adb_keys_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Manage /data/misc/appcompat.
allow system_server appcompat_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow system_server appcompat_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Manage /data/misc/emergencynumberdb
allow system_server emergency_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server emergency_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Manage /data/misc/network_watchlist
allow system_server network_watchlist_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server network_watchlist_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Manage /data/misc/sms.
# TODO: Split into a separate type?
allow system_server radio_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server radio_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Manage /data/misc/systemkeys.
allow system_server systemkeys_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server systemkeys_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Manage /data/misc/textclassifier.
allow system_server textclassifier_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server textclassifier_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Manage /data/tombstones.
allow system_server tombstone_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow system_server tombstone_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Manage /data/misc/vpn.
allow system_server vpn_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server vpn_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Manage /data/misc/wifi.
allow system_server wifi_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server wifi_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Manage /data/app-staging.
allow system_server staging_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server staging_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Manage /data/rollback.
allow system_server staging_data_file:{ file lnk_file } { { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } } link };
# Walk /data/data subdirectories.
allow system_server app_data_file_type:dir { getattr read search };
# Also permit for unlabeled /data/data subdirectories and
# for unlabeled asec containers on upgrades from 4.2.
allow system_server unlabeled:dir { open getattr read search ioctl lock watch watch_reads };
# Read pkg.apk file before it has been relabeled by vold.
allow system_server unlabeled:file { getattr open read ioctl lock map watch watch_reads };
# Populate com.android.providers.settings/databases/settings.db.
allow system_server system_app_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server system_app_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Receive and use open app data files passed over binder IPC.
allow system_server app_data_file_type:file { getattr read write append map };
# Access to /data/media for measuring disk usage.
allow system_server media_rw_data_file:dir { search getattr open read };
# Receive and use open /data/media files passed over binder IPC.
# Also used for measuring disk usage.
allow system_server media_rw_data_file:file { getattr read write append };
# System server needs to setfscreate to packages_list_file when writing
# /data/system/packages.list
allow system_server system_server:process setfscreate;
# Relabel apk files.
allow system_server { apk_tmp_file apk_private_tmp_file }:{ dir file } { relabelfrom relabelto };
allow system_server { apk_data_file apk_private_data_file }:{ dir file } { relabelfrom relabelto };
# Allow PackageManager to:
# 1. rename file from /data/app-staging folder to /data/app
# 2. relabel files (linked to /data/rollback) under /data/app-staging
# during staged apk/apex install.
allow system_server { staging_data_file }:{ dir 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 { { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } rename unlink };
# Backup of wallpaper imagery uses temporary hard links to avoid data churn
allow system_server { system_data_file wallpaper_file }:file link;
# ShortcutManager icons
allow system_server system_data_file:dir relabelfrom;
allow system_server shortcut_manager_icons:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } relabelto };
allow system_server shortcut_manager_icons:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Manage ringtones.
allow system_server ringtone_file:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } relabelto };
allow system_server ringtone_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Relabel icon file.
allow system_server icon_file:file relabelto;
allow system_server icon_file:file { { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } unlink };
# FingerprintService.java does a restorecon of the directory /data/system/users/[0-9]+/fpdata(/.*)?
allow system_server system_data_file:dir relabelfrom;
# server_configurable_flags_data_file is used for storing server configurable flags which
# have been reset during current booting. system_server needs to read the data to perform related
# disaster recovery actions.
allow system_server server_configurable_flags_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow system_server server_configurable_flags_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Property Service write
#line 718
#line 718
allow system_server property_socket:sock_file write;
#line 718
allow system_server init:unix_stream_socket connectto;
#line 718
#line 718
allow system_server system_prop:property_service set;
#line 718
#line 718
allow system_server system_prop:file { getattr open read map };
#line 718
#line 718
#line 719
#line 719
allow system_server property_socket:sock_file write;
#line 719
allow system_server init:unix_stream_socket connectto;
#line 719
#line 719
allow system_server bootanim_system_prop:property_service set;
#line 719
#line 719
allow system_server bootanim_system_prop:file { getattr open read map };
#line 719
#line 719
#line 720
#line 720
allow system_server property_socket:sock_file write;
#line 720
allow system_server init:unix_stream_socket connectto;
#line 720
#line 720
allow system_server bluetooth_prop:property_service set;
#line 720
#line 720
allow system_server bluetooth_prop:file { getattr open read map };
#line 720
#line 720
#line 721
#line 721
allow system_server property_socket:sock_file write;
#line 721
allow system_server init:unix_stream_socket connectto;
#line 721
#line 721
allow system_server exported_system_prop:property_service set;
#line 721
#line 721
allow system_server exported_system_prop:file { getattr open read map };
#line 721
#line 721
#line 722
#line 722
allow system_server property_socket:sock_file write;
#line 722
allow system_server init:unix_stream_socket connectto;
#line 722
#line 722
allow system_server exported3_system_prop:property_service set;
#line 722
#line 722
allow system_server exported3_system_prop:file { getattr open read map };
#line 722
#line 722
#line 723
#line 723
allow system_server property_socket:sock_file write;
#line 723
allow system_server init:unix_stream_socket connectto;
#line 723
#line 723
allow system_server safemode_prop:property_service set;
#line 723
#line 723
allow system_server safemode_prop:file { getattr open read map };
#line 723
#line 723
#line 724
#line 724
allow system_server property_socket:sock_file write;
#line 724
allow system_server init:unix_stream_socket connectto;
#line 724
#line 724
allow system_server theme_prop:property_service set;
#line 724
#line 724
allow system_server theme_prop:file { getattr open read map };
#line 724
#line 724
#line 725
#line 725
allow system_server property_socket:sock_file write;
#line 725
allow system_server init:unix_stream_socket connectto;
#line 725
#line 725
allow system_server dhcp_prop:property_service set;
#line 725
#line 725
allow system_server dhcp_prop:file { getattr open read map };
#line 725
#line 725
#line 726
#line 726
allow system_server property_socket:sock_file write;
#line 726
allow system_server init:unix_stream_socket connectto;
#line 726
#line 726
allow system_server net_connectivity_prop:property_service set;
#line 726
#line 726
allow system_server net_connectivity_prop:file { getattr open read map };
#line 726
#line 726
#line 727
#line 727
allow system_server property_socket:sock_file write;
#line 727
allow system_server init:unix_stream_socket connectto;
#line 727
#line 727
allow system_server net_radio_prop:property_service set;
#line 727
#line 727
allow system_server net_radio_prop:file { getattr open read map };
#line 727
#line 727
#line 728
#line 728
allow system_server property_socket:sock_file write;
#line 728
allow system_server init:unix_stream_socket connectto;
#line 728
#line 728
allow system_server net_dns_prop:property_service set;
#line 728
#line 728
allow system_server net_dns_prop:file { getattr open read map };
#line 728
#line 728
#line 729
#line 729
allow system_server property_socket:sock_file write;
#line 729
allow system_server init:unix_stream_socket connectto;
#line 729
#line 729
allow system_server usb_control_prop:property_service set;
#line 729
#line 729
allow system_server usb_control_prop:file { getattr open read map };
#line 729
#line 729
#line 730
#line 730
allow system_server property_socket:sock_file write;
#line 730
allow system_server init:unix_stream_socket connectto;
#line 730
#line 730
allow system_server usb_prop:property_service set;
#line 730
#line 730
allow system_server usb_prop:file { getattr open read map };
#line 730
#line 730
#line 731
#line 731
allow system_server property_socket:sock_file write;
#line 731
allow system_server init:unix_stream_socket connectto;
#line 731
#line 731
allow system_server debug_prop:property_service set;
#line 731
#line 731
allow system_server debug_prop:file { getattr open read map };
#line 731
#line 731
#line 732
#line 732
allow system_server property_socket:sock_file write;
#line 732
allow system_server init:unix_stream_socket connectto;
#line 732
#line 732
allow system_server powerctl_prop:property_service set;
#line 732
#line 732
allow system_server powerctl_prop:file { getattr open read map };
#line 732
#line 732
#line 733
#line 733
allow system_server property_socket:sock_file write;
#line 733
allow system_server init:unix_stream_socket connectto;
#line 733
#line 733
allow system_server fingerprint_prop:property_service set;
#line 733
#line 733
allow system_server fingerprint_prop:file { getattr open read map };
#line 733
#line 733
#line 734
#line 734
allow system_server property_socket:sock_file write;
#line 734
allow system_server init:unix_stream_socket connectto;
#line 734
#line 734
allow system_server device_logging_prop:property_service set;
#line 734
#line 734
allow system_server device_logging_prop:file { getattr open read map };
#line 734
#line 734
#line 735
#line 735
allow system_server property_socket:sock_file write;
#line 735
allow system_server init:unix_stream_socket connectto;
#line 735
#line 735
allow system_server dumpstate_options_prop:property_service set;
#line 735
#line 735
allow system_server dumpstate_options_prop:file { getattr open read map };
#line 735
#line 735
#line 736
#line 736
allow system_server property_socket:sock_file write;
#line 736
allow system_server init:unix_stream_socket connectto;
#line 736
#line 736
allow system_server overlay_prop:property_service set;
#line 736
#line 736
allow system_server overlay_prop:file { getattr open read map };
#line 736
#line 736
#line 737
#line 737
allow system_server property_socket:sock_file write;
#line 737
allow system_server init:unix_stream_socket connectto;
#line 737
#line 737
allow system_server exported_overlay_prop:property_service set;
#line 737
#line 737
allow system_server exported_overlay_prop:file { getattr open read map };
#line 737
#line 737
#line 738
#line 738
allow system_server property_socket:sock_file write;
#line 738
allow system_server init:unix_stream_socket connectto;
#line 738
#line 738
allow system_server pm_prop:property_service set;
#line 738
#line 738
allow system_server pm_prop:file { getattr open read map };
#line 738
#line 738
#line 739
#line 739
allow system_server property_socket:sock_file write;
#line 739
allow system_server init:unix_stream_socket connectto;
#line 739
#line 739
allow system_server exported_pm_prop:property_service set;
#line 739
#line 739
allow system_server exported_pm_prop:file { getattr open read map };
#line 739
#line 739
#line 740
#line 740
allow system_server property_socket:sock_file write;
#line 740
allow system_server init:unix_stream_socket connectto;
#line 740
#line 740
allow system_server socket_hook_prop:property_service set;
#line 740
#line 740
allow system_server socket_hook_prop:file { getattr open read map };
#line 740
#line 740
#line 741
#line 741
allow system_server property_socket:sock_file write;
#line 741
allow system_server init:unix_stream_socket connectto;
#line 741
#line 741
allow system_server audio_prop:property_service set;
#line 741
#line 741
allow system_server audio_prop:file { getattr open read map };
#line 741
#line 741
#line 742
#line 742
allow system_server property_socket:sock_file write;
#line 742
allow system_server init:unix_stream_socket connectto;
#line 742
#line 742
allow system_server boot_status_prop:property_service set;
#line 742
#line 742
allow system_server boot_status_prop:file { getattr open read map };
#line 742
#line 742
#line 743
#line 743
allow system_server property_socket:sock_file write;
#line 743
allow system_server init:unix_stream_socket connectto;
#line 743
#line 743
allow system_server surfaceflinger_color_prop:property_service set;
#line 743
#line 743
allow system_server surfaceflinger_color_prop:file { getattr open read map };
#line 743
#line 743
#line 744
#line 744
allow system_server property_socket:sock_file write;
#line 744
allow system_server init:unix_stream_socket connectto;
#line 744
#line 744
allow system_server provisioned_prop:property_service set;
#line 744
#line 744
allow system_server provisioned_prop:file { getattr open read map };
#line 744
#line 744
#line 745
#line 745
allow system_server property_socket:sock_file write;
#line 745
allow system_server init:unix_stream_socket connectto;
#line 745
#line 745
allow system_server retaildemo_prop:property_service set;
#line 745
#line 745
allow system_server retaildemo_prop:file { getattr open read map };
#line 745
#line 745
#line 746
#line 746
allow system_server property_socket:sock_file write;
#line 746
allow system_server init:unix_stream_socket connectto;
#line 746
#line 746
allow system_server dmesgd_start_prop:property_service set;
#line 746
#line 746
allow system_server dmesgd_start_prop:file { getattr open read map };
#line 746
#line 746
#line 747
#line 747
allow system_server property_socket:sock_file write;
#line 747
allow system_server init:unix_stream_socket connectto;
#line 747
#line 747
allow system_server locale_prop:property_service set;
#line 747
#line 747
allow system_server locale_prop:file { getattr open read map };
#line 747
#line 747
#line 748
#line 748
allow system_server property_socket:sock_file write;
#line 748
allow system_server init:unix_stream_socket connectto;
#line 748
#line 748
allow system_server timezone_metadata_prop:property_service set;
#line 748
#line 748
allow system_server timezone_metadata_prop:file { getattr open read map };
#line 748
#line 748
#line 749
#line 749
allow system_server property_socket:sock_file write;
#line 749
allow system_server init:unix_stream_socket connectto;
#line 749
#line 749
allow system_server timezone_prop:property_service set;
#line 749
#line 749
allow system_server timezone_prop:file { getattr open read map };
#line 749
#line 749
#line 750
#line 750
allow system_server property_socket:sock_file write;
#line 750
allow system_server init:unix_stream_socket connectto;
#line 750
#line 750
allow system_server crashrecovery_prop:property_service set;
#line 750
#line 750
allow system_server crashrecovery_prop:file { getattr open read map };
#line 750
#line 750
# ctl interface
#line 755
#line 755
allow system_server property_socket:sock_file write;
#line 755
allow system_server init:unix_stream_socket connectto;
#line 755
#line 755
allow system_server ctl_default_prop:property_service set;
#line 755
#line 755
allow system_server ctl_default_prop:file { getattr open read map };
#line 755
#line 755
#line 756
#line 756
allow system_server property_socket:sock_file write;
#line 756
allow system_server init:unix_stream_socket connectto;
#line 756
#line 756
allow system_server ctl_bugreport_prop:property_service set;
#line 756
#line 756
allow system_server ctl_bugreport_prop:file { getattr open read map };
#line 756
#line 756
#line 757
#line 757
allow system_server property_socket:sock_file write;
#line 757
allow system_server init:unix_stream_socket connectto;
#line 757
#line 757
allow system_server ctl_gsid_prop:property_service set;
#line 757
#line 757
allow system_server ctl_gsid_prop:file { getattr open read map };
#line 757
#line 757
# cppreopt property
#line 760
#line 760
allow system_server property_socket:sock_file write;
#line 760
allow system_server init:unix_stream_socket connectto;
#line 760
#line 760
allow system_server cppreopt_prop:property_service set;
#line 760
#line 760
allow system_server cppreopt_prop:file { getattr open read map };
#line 760
#line 760
# server configurable flags properties
#line 763
#line 763
allow system_server property_socket:sock_file write;
#line 763
allow system_server init:unix_stream_socket connectto;
#line 763
#line 763
allow system_server device_config_core_experiments_team_internal_prop:property_service set;
#line 763
#line 763
allow system_server device_config_core_experiments_team_internal_prop:file { getattr open read map };
#line 763
#line 763
#line 764
#line 764
allow system_server property_socket:sock_file write;
#line 764
allow system_server init:unix_stream_socket connectto;
#line 764
#line 764
allow system_server device_config_edgetpu_native_prop:property_service set;
#line 764
#line 764
allow system_server device_config_edgetpu_native_prop:file { getattr open read map };
#line 764
#line 764
#line 765
#line 765
allow system_server property_socket:sock_file write;
#line 765
allow system_server init:unix_stream_socket connectto;
#line 765
#line 765
allow system_server device_config_input_native_boot_prop:property_service set;
#line 765
#line 765
allow system_server device_config_input_native_boot_prop:file { getattr open read map };
#line 765
#line 765
#line 766
#line 766
allow system_server property_socket:sock_file write;
#line 766
allow system_server init:unix_stream_socket connectto;
#line 766
#line 766
allow system_server device_config_netd_native_prop:property_service set;
#line 766
#line 766
allow system_server device_config_netd_native_prop:file { getattr open read map };
#line 766
#line 766
#line 767
#line 767
allow system_server property_socket:sock_file write;
#line 767
allow system_server init:unix_stream_socket connectto;
#line 767
#line 767
allow system_server device_config_nnapi_native_prop:property_service set;
#line 767
#line 767
allow system_server device_config_nnapi_native_prop:file { getattr open read map };
#line 767
#line 767
#line 768
#line 768
allow system_server property_socket:sock_file write;
#line 768
allow system_server init:unix_stream_socket connectto;
#line 768
#line 768
allow system_server device_config_activity_manager_native_boot_prop:property_service set;
#line 768
#line 768
allow system_server device_config_activity_manager_native_boot_prop:file { getattr open read map };
#line 768
#line 768
#line 769
#line 769
allow system_server property_socket:sock_file write;
#line 769
allow system_server init:unix_stream_socket connectto;
#line 769
#line 769
allow system_server device_config_runtime_native_boot_prop:property_service set;
#line 769
#line 769
allow system_server device_config_runtime_native_boot_prop:file { getattr open read map };
#line 769
#line 769
#line 770
#line 770
allow system_server property_socket:sock_file write;
#line 770
allow system_server init:unix_stream_socket connectto;
#line 770
#line 770
allow system_server device_config_runtime_native_prop:property_service set;
#line 770
#line 770
allow system_server device_config_runtime_native_prop:file { getattr open read map };
#line 770
#line 770
#line 771
#line 771
allow system_server property_socket:sock_file write;
#line 771
allow system_server init:unix_stream_socket connectto;
#line 771
#line 771
allow system_server device_config_lmkd_native_prop:property_service set;
#line 771
#line 771
allow system_server device_config_lmkd_native_prop:file { getattr open read map };
#line 771
#line 771
#line 772
#line 772
allow system_server property_socket:sock_file write;
#line 772
allow system_server init:unix_stream_socket connectto;
#line 772
#line 772
allow system_server device_config_media_native_prop:property_service set;
#line 772
#line 772
allow system_server device_config_media_native_prop:file { getattr open read map };
#line 772
#line 772
#line 773
#line 773
allow system_server property_socket:sock_file write;
#line 773
allow system_server init:unix_stream_socket connectto;
#line 773
#line 773
allow system_server device_config_camera_native_prop:property_service set;
#line 773
#line 773
allow system_server device_config_camera_native_prop:file { getattr open read map };
#line 773
#line 773
#line 774
#line 774
allow system_server property_socket:sock_file write;
#line 774
allow system_server init:unix_stream_socket connectto;
#line 774
#line 774
allow system_server device_config_mglru_native_prop:property_service set;
#line 774
#line 774
allow system_server device_config_mglru_native_prop:file { getattr open read map };
#line 774
#line 774
#line 775
#line 775
allow system_server property_socket:sock_file write;
#line 775
allow system_server init:unix_stream_socket connectto;
#line 775
#line 775
allow system_server device_config_profcollect_native_boot_prop:property_service set;
#line 775
#line 775
allow system_server device_config_profcollect_native_boot_prop:file { getattr open read map };
#line 775
#line 775
#line 776
#line 776
allow system_server property_socket:sock_file write;
#line 776
allow system_server init:unix_stream_socket connectto;
#line 776
#line 776
allow system_server device_config_statsd_native_prop:property_service set;
#line 776
#line 776
allow system_server device_config_statsd_native_prop:file { getattr open read map };
#line 776
#line 776
#line 777
#line 777
allow system_server property_socket:sock_file write;
#line 777
allow system_server init:unix_stream_socket connectto;
#line 777
#line 777
allow system_server device_config_statsd_native_boot_prop:property_service set;
#line 777
#line 777
allow system_server device_config_statsd_native_boot_prop:file { getattr open read map };
#line 777
#line 777
#line 778
#line 778
allow system_server property_socket:sock_file write;
#line 778
allow system_server init:unix_stream_socket connectto;
#line 778
#line 778
allow system_server device_config_storage_native_boot_prop:property_service set;
#line 778
#line 778
allow system_server device_config_storage_native_boot_prop:file { getattr open read map };
#line 778
#line 778
#line 779
#line 779
allow system_server property_socket:sock_file write;
#line 779
allow system_server init:unix_stream_socket connectto;
#line 779
#line 779
allow system_server device_config_swcodec_native_prop:property_service set;
#line 779
#line 779
allow system_server device_config_swcodec_native_prop:file { getattr open read map };
#line 779
#line 779
#line 780
#line 780
allow system_server property_socket:sock_file write;
#line 780
allow system_server init:unix_stream_socket connectto;
#line 780
#line 780
allow system_server device_config_sys_traced_prop:property_service set;
#line 780
#line 780
allow system_server device_config_sys_traced_prop:file { getattr open read map };
#line 780
#line 780
#line 781
#line 781
allow system_server property_socket:sock_file write;
#line 781
allow system_server init:unix_stream_socket connectto;
#line 781
#line 781
allow system_server device_config_window_manager_native_boot_prop:property_service set;
#line 781
#line 781
allow system_server device_config_window_manager_native_boot_prop:file { getattr open read map };
#line 781
#line 781
#line 782
#line 782
allow system_server property_socket:sock_file write;
#line 782
allow system_server init:unix_stream_socket connectto;
#line 782
#line 782
allow system_server device_config_configuration_prop:property_service set;
#line 782
#line 782
allow system_server device_config_configuration_prop:file { getattr open read map };
#line 782
#line 782
#line 783
#line 783
allow system_server property_socket:sock_file write;
#line 783
allow system_server init:unix_stream_socket connectto;
#line 783
#line 783
allow system_server device_config_connectivity_prop:property_service set;
#line 783
#line 783
allow system_server device_config_connectivity_prop:file { getattr open read map };
#line 783
#line 783
#line 784
#line 784
allow system_server property_socket:sock_file write;
#line 784
allow system_server init:unix_stream_socket connectto;
#line 784
#line 784
allow system_server device_config_surface_flinger_native_boot_prop:property_service set;
#line 784
#line 784
allow system_server device_config_surface_flinger_native_boot_prop:file { getattr open read map };
#line 784
#line 784
#line 785
#line 785
allow system_server property_socket:sock_file write;
#line 785
allow system_server init:unix_stream_socket connectto;
#line 785
#line 785
allow system_server device_config_aconfig_flags_prop:property_service set;
#line 785
#line 785
allow system_server device_config_aconfig_flags_prop:file { getattr open read map };
#line 785
#line 785
#line 786
#line 786
allow system_server property_socket:sock_file write;
#line 786
allow system_server init:unix_stream_socket connectto;
#line 786
#line 786
allow system_server device_config_vendor_system_native_prop:property_service set;
#line 786
#line 786
allow system_server device_config_vendor_system_native_prop:file { getattr open read map };
#line 786
#line 786
#line 787
#line 787
allow system_server property_socket:sock_file write;
#line 787
allow system_server init:unix_stream_socket connectto;
#line 787
#line 787
allow system_server device_config_vendor_system_native_boot_prop:property_service set;
#line 787
#line 787
allow system_server device_config_vendor_system_native_boot_prop:file { getattr open read map };
#line 787
#line 787
#line 788
#line 788
allow system_server property_socket:sock_file write;
#line 788
allow system_server init:unix_stream_socket connectto;
#line 788
#line 788
allow system_server device_config_virtualization_framework_native_prop:property_service set;
#line 788
#line 788
allow system_server device_config_virtualization_framework_native_prop:file { getattr open read map };
#line 788
#line 788
#line 789
#line 789
allow system_server property_socket:sock_file write;
#line 789
allow system_server init:unix_stream_socket connectto;
#line 789
#line 789
allow system_server device_config_memory_safety_native_boot_prop:property_service set;
#line 789
#line 789
allow system_server device_config_memory_safety_native_boot_prop:file { getattr open read map };
#line 789
#line 789
#line 790
#line 790
allow system_server property_socket:sock_file write;
#line 790
allow system_server init:unix_stream_socket connectto;
#line 790
#line 790
allow system_server device_config_memory_safety_native_prop:property_service set;
#line 790
#line 790
allow system_server device_config_memory_safety_native_prop:file { getattr open read map };
#line 790
#line 790
#line 791
#line 791
allow system_server property_socket:sock_file write;
#line 791
allow system_server init:unix_stream_socket connectto;
#line 791
#line 791
allow system_server device_config_remote_key_provisioning_native_prop:property_service set;
#line 791
#line 791
allow system_server device_config_remote_key_provisioning_native_prop:file { getattr open read map };
#line 791
#line 791
#line 792
#line 792
allow system_server property_socket:sock_file write;
#line 792
allow system_server init:unix_stream_socket connectto;
#line 792
#line 792
allow system_server device_config_tethering_u_or_later_native_prop:property_service set;
#line 792
#line 792
allow system_server device_config_tethering_u_or_later_native_prop:file { getattr open read map };
#line 792
#line 792
#line 793
#line 793
allow system_server property_socket:sock_file write;
#line 793
allow system_server init:unix_stream_socket connectto;
#line 793
#line 793
allow system_server smart_idle_maint_enabled_prop:property_service set;
#line 793
#line 793
allow system_server smart_idle_maint_enabled_prop:file { getattr open read map };
#line 793
#line 793
#line 794
#line 794
allow system_server property_socket:sock_file write;
#line 794
allow system_server init:unix_stream_socket connectto;
#line 794
#line 794
allow system_server arm64_memtag_prop:property_service set;
#line 794
#line 794
allow system_server arm64_memtag_prop:file { getattr open read map };
#line 794
#line 794
# staged flag properties
#line 797
#line 797
allow system_server property_socket:sock_file write;
#line 797
allow system_server init:unix_stream_socket connectto;
#line 797
#line 797
allow system_server next_boot_prop:property_service set;
#line 797
#line 797
allow system_server next_boot_prop:file { getattr open read map };
#line 797
#line 797
# Allow query ART device config properties
#line 800
allow system_server device_config_runtime_native_boot_prop:file { getattr open read map };
#line 800
#line 801
allow system_server device_config_runtime_native_prop:file { getattr open read map };
#line 801
# BootReceiver to read ro.boot.bootreason
#line 804
allow system_server bootloader_boot_reason_prop:file { getattr open read map };
#line 804
# PowerManager to read sys.boot.reason
#line 806
allow system_server system_boot_reason_prop:file { getattr open read map };
#line 806
# Collect metrics on boot time created by init
#line 809
allow system_server boottime_prop:file { getattr open read map };
#line 809
# Read device's serial number from system properties
#line 812
allow system_server serialno_prop:file { getattr open read map };
#line 812
# Read/write the property which keeps track of whether this is the first start of system_server
#line 815
#line 815
allow system_server property_socket:sock_file write;
#line 815
allow system_server init:unix_stream_socket connectto;
#line 815
#line 815
allow system_server firstboot_prop:property_service set;
#line 815
#line 815
allow system_server firstboot_prop:file { getattr open read map };
#line 815
#line 815
# Audio service in system server can read audio config properties,
# such as camera shutter enforcement
#line 819
allow system_server audio_config_prop:file { getattr open read map };
#line 819
# StorageManager service reads media config while checking if transcoding is supported.
#line 822
allow system_server media_config_prop:file { getattr open read map };
#line 822
# system server reads this property to keep track of whether server configurable flags have been
# reset during current boot.
#line 826
allow system_server device_config_reset_performed_prop:file { getattr open read map };
#line 826
# Read/write the property that enables Test Harness Mode
#line 829
#line 829
allow system_server property_socket:sock_file write;
#line 829
allow system_server init:unix_stream_socket connectto;
#line 829
#line 829
allow system_server test_harness_prop:property_service set;
#line 829
#line 829
allow system_server test_harness_prop:file { getattr open read map };
#line 829
#line 829
# Read gsid.image_running.
#line 832
allow system_server gsid_prop:file { getattr open read map };
#line 832
# Read the property that mocks an OTA
#line 835
allow system_server mock_ota_prop:file { getattr open read map };
#line 835
# Read the property as feature flag for protecting apks with fs-verity.
#line 838
allow system_server apk_verity_prop:file { getattr open read map };
#line 838
# Read wifi.interface
#line 841
allow system_server wifi_prop:file { getattr open read map };
#line 841
# Read the vendor property that indicates if Incremental features is enabled
#line 844
allow system_server incremental_prop:file { getattr open read map };
#line 844
# Read ro.zram. properties
#line 847
allow system_server zram_config_prop:file { getattr open read map };
#line 847
# Read/write persist.sys.zram_enabled
#line 850
#line 850
allow system_server property_socket:sock_file write;
#line 850
allow system_server init:unix_stream_socket connectto;
#line 850
#line 850
allow system_server zram_control_prop:property_service set;
#line 850
#line 850
allow system_server zram_control_prop:file { getattr open read map };
#line 850
#line 850
# Read/write persist.sys.dalvik.vm.lib.2
#line 853
#line 853
allow system_server property_socket:sock_file write;
#line 853
allow system_server init:unix_stream_socket connectto;
#line 853
#line 853
allow system_server dalvik_runtime_prop:property_service set;
#line 853
#line 853
allow system_server dalvik_runtime_prop:file { getattr open read map };
#line 853
#line 853
# Read ro.control_privapp_permissions and ro.cp_system_other_odex
#line 856
allow system_server packagemanager_config_prop:file { getattr open read map };
#line 856
# Read the net.464xlat.cellular.enabled property (written by init).
#line 859
allow system_server net_464xlat_fromvendor_prop:file { getattr open read map };
#line 859
# Read hypervisor capabilities ro.boot.hypervisor.*
#line 862
allow system_server hypervisor_prop:file { getattr open read map };
#line 862
# Read persist.wm.debug. properties
#line 865
allow system_server persist_wm_debug_prop:file { getattr open read map };
#line 865
# Read persist.sysui.notification.builder_extras_override property
#line 868
allow system_server persist_sysui_builder_extras_prop:file { getattr open read map };
#line 868
# Read persist.sysui.notification.ranking_update_ashmem property
#line 870
allow system_server persist_sysui_ranking_update_prop:file { getattr open read map };
#line 870
# Read ro.tuner.lazyhal
#line 873
allow system_server tuner_config_prop:file { getattr open read map };
#line 873
# Write tuner.server.enable
#line 875
#line 875
allow system_server property_socket:sock_file write;
#line 875
allow system_server init:unix_stream_socket connectto;
#line 875
#line 875
allow system_server tuner_server_ctl_prop:property_service set;
#line 875
#line 875
allow system_server tuner_server_ctl_prop:file { getattr open read map };
#line 875
#line 875
# Allow the heap dump ART plugin to the count of sessions waiting for OOME
#line 878
allow system_server traced_oome_heap_session_count_prop:file { getattr open read map };
#line 878
# Allow the sensor service (running in the system service) to read sensor
# configuration properties
#line 882
allow system_server sensors_config_prop:file { getattr open read map };
#line 882
# Create a socket for connections from debuggerd.
allow system_server system_ndebug_socket:sock_file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Create a socket for connections from zygotes.
allow system_server system_unsolzygote_socket:sock_file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Manage cache files.
allow system_server cache_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
allow system_server { cache_file cache_recovery_file }:dir { relabelfrom { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } };
allow system_server { cache_file cache_recovery_file }:file { relabelfrom { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } } };
allow system_server { cache_file cache_recovery_file }:fifo_file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow system_server system_file:dir { open getattr read search ioctl lock watch watch_reads };
allow system_server system_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
# ART locks profile files.
allow system_server system_file:file lock;
# LocationManager(e.g, GPS) needs to read and write
# to uart driver and ctrl proc entry
allow system_server gps_control:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Allow system_server to use app-created sockets and pipes.
allow system_server appdomain:{ tcp_socket udp_socket } { getattr getopt setopt read write shutdown };
allow system_server appdomain:{ fifo_file unix_stream_socket } { getattr read write };
# BackupManagerService needs to manipulate backup data files
allow system_server cache_backup_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow system_server cache_backup_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# LocalTransport works inside /cache/backup
allow system_server cache_private_backup_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server cache_private_backup_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow system to talk to usb device
allow system_server usb_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow system_server usb_device:dir { open getattr read search ioctl lock watch watch_reads };
# Read and delete files under /dev/fscklogs.
#line 922
allow system_server fscklogs:dir { open getattr read search ioctl lock watch watch_reads };
#line 922
allow system_server fscklogs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 922
allow system_server fscklogs:dir { write remove_name add_name };
allow system_server fscklogs:file rename;
# logd access, system_server inherit logd write socket
# (urge is to deprecate this long term)
allow system_server zygote:unix_dgram_socket write;
# Read from log daemon.
#line 931
allow system_server logcat_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
#line 931
#line 931
allow system_server logdr_socket:sock_file write;
#line 931
allow system_server logd:unix_stream_socket connectto;
#line 931
#line 931
#line 932
allow system_server runtime_event_log_tags_file:file { getattr open read ioctl lock map watch watch_reads };
#line 932
# Be consistent with DAC permissions. Allow system_server to write to
# /sys/module/lowmemorykiller/parameters/adj
# /sys/module/lowmemorykiller/parameters/minfree
allow system_server sysfs_lowmemorykiller:file { getattr { open append write lock map } };
# Read /sys/fs/pstore/console-ramoops
# Don't worry about overly broad permissions for now, as there's
# only one file in /sys/fs/pstore
allow system_server pstorefs:dir { open getattr read search ioctl lock watch watch_reads };
allow system_server pstorefs:file { getattr open read ioctl lock map watch watch_reads };
# /sys access
allow system_server sysfs_zram:dir search;
allow system_server sysfs_zram:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Read /sys/fs/selinux/policy
allow system_server kernel:security read_policy;
#line 952
allow system_server system_server_service:service_manager { add find };
#line 952
neverallow { domain -system_server } system_server_service:service_manager add;
#line 952
#line 952
# On debug builds with root, allow binder services to use binder over TCP.
#line 952
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 952
#line 952
;
allow system_server artd_service:service_manager find;
allow system_server artd_pre_reboot_service:service_manager find;
allow system_server audioserver_service:service_manager find;
allow system_server authorization_service:service_manager find;
allow system_server batteryproperties_service:service_manager find;
allow system_server cameraserver_service:service_manager find;
allow system_server compos_service:service_manager find;
allow system_server dataloader_manager_service:service_manager find;
allow system_server dexopt_chroot_setup_service:service_manager find;
allow system_server dnsresolver_service:service_manager find;
allow system_server drmserver_service:service_manager find;
allow system_server dumpstate_service:service_manager find;
allow system_server fingerprintd_service:service_manager find;
allow system_server gatekeeper_service:service_manager find;
allow system_server gpu_service:service_manager find;
allow system_server gsi_service:service_manager find;
allow system_server idmap_service:service_manager find;
allow system_server incident_service:service_manager find;
allow system_server incremental_service:service_manager find;
allow system_server installd_service:service_manager find;
allow system_server keystore_maintenance_service:service_manager find;
allow system_server keystore_metrics_service:service_manager find;
allow system_server keystore_service:service_manager find;
allow system_server mdns_service:service_manager find;
allow system_server mediaserver_service:service_manager find;
allow system_server mediametrics_service:service_manager find;
allow system_server mediaextractor_service:service_manager find;
allow system_server mediadrmserver_service:service_manager find;
allow system_server mediatuner_service:service_manager find;
allow system_server netd_service:service_manager find;
allow system_server nfc_service:service_manager find;
allow system_server ot_daemon_service:service_manager find;
allow system_server radio_service:service_manager find;
allow system_server stats_service:service_manager find;
allow system_server storaged_service:service_manager find;
allow system_server surfaceflinger_service:service_manager find;
allow system_server update_engine_service:service_manager find;
allow system_server virtual_camera_service:service_manager find;
#line 993
allow system_server vold_service:service_manager find;
allow system_server wifinl80211_service:service_manager find;
allow system_server logd_service:service_manager find;
#line 999
#line 1001
allow system_server batteryproperties_service:service_manager { add find };
#line 1001
neverallow { domain -system_server } batteryproperties_service:service_manager add;
#line 1001
#line 1001
# On debug builds with root, allow binder services to use binder over TCP.
#line 1001
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 1001
#line 1001
allow system_server keystore:keystore2 {
add_auth
change_password
change_user
clear_ns
clear_uid
get_last_auth_time
lock
pull_metrics
reset
unlock
};
allow system_server keystore:keystore2_key {
delete
use_dev_id
grant
get_info
rebind
update
use
};
# Allow Wifi module to manage Wi-Fi keys.
allow system_server wifi_key:keystore2_key {
delete
get_info
rebind
update
use
};
# Allow lock_settings service to manage RoR keys.
allow system_server resume_on_reboot_key:keystore2_key {
delete
get_info
rebind
update
use
};
# Allow lock_settings service to manage locksettings keys (e.g. the synthetic password key).
allow system_server locksettings_key:keystore2_key {
delete
get_info
rebind
update
use
};
# Allow system server to search and write to the persistent factory reset
# protection partition. This block device does not get wiped in a factory reset.
allow system_server block_device:dir search;
allow system_server frp_block_device:blk_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allowxperm system_server frp_block_device:blk_file ioctl { 0x0000127d 0x00001277 };
# Create new process groups and clean up old cgroups
allow system_server cgroup:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server cgroup:file setattr;
allow system_server cgroup_v2:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server cgroup_v2:file { { getattr open read ioctl lock map watch watch_reads } setattr };
# /oem access
#line 1067
allow system_server oemfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 1067
allow system_server oemfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 1067
# Allow resolving per-user storage symlinks
allow system_server { mnt_user_file storage_file }:dir { getattr search };
allow system_server { mnt_user_file storage_file }:lnk_file { getattr read };
# Allow statfs() on storage devices, which happens fast enough that
# we shouldn't be killed during unsafe removal
allow system_server { sdcard_type fuse }:dir { getattr search };
# Traverse into expanded storage
allow system_server mnt_expand_file:dir { open getattr read search ioctl lock watch watch_reads };
# Allow system process to relabel the fingerprint directory after mkdir
# and delete the directory and files when no longer needed
allow system_server fingerprintd_data_file:dir { { open getattr read search ioctl lock watch watch_reads } remove_name rmdir relabelto write };
allow system_server fingerprintd_data_file:file { getattr unlink };
#line 1100
# For AppFuse.
allow system_server vold:fd use;
allow system_server fuse_device:chr_file { read write ioctl getattr };
allow system_server app_fuse_file:file { read write getattr };
# For configuring sdcardfs
allow system_server configfs:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } };
allow system_server configfs:file { getattr open create unlink write };
# Connect to adbd and use a socket transferred from it.
# Used for e.g. jdwp.
allow system_server adbd:unix_stream_socket connectto;
allow system_server adbd:fd use;
allow system_server adbd:unix_stream_socket { getattr getopt ioctl read write shutdown };
# Read service.adb.tls.port, persist.adb.wifi. properties
#line 1118
allow system_server adbd_prop:file { getattr open read map };
#line 1118
# Set persist.adb.tls_server.enable property
#line 1121
#line 1121
allow system_server property_socket:sock_file write;
#line 1121
allow system_server init:unix_stream_socket connectto;
#line 1121
#line 1121
allow system_server system_adbd_prop:property_service set;
#line 1121
#line 1121
allow system_server system_adbd_prop:file { getattr open read map };
#line 1121
#line 1121
# Allow invoking tools like "timeout"
allow system_server toolbox_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Allow system process to setup fs-verity
allowxperm system_server { apk_data_file apk_tmp_file system_data_file apex_system_server_data_file }:file ioctl 0x6685;
# Allow system process to measure fs-verity for apps, including those being installed
allowxperm system_server { apk_data_file apk_tmp_file }:file ioctl 0x6686;
allowxperm system_server apk_tmp_file:file ioctl 0x40086602;
# Postinstall
#
# For OTA dexopt, allow calls coming from postinstall.
#line 1136
# Call the server domain and optionally transfer references to it.
#line 1136
allow system_server postinstall:binder { call transfer };
#line 1136
# Allow the serverdomain to transfer references to the client on the reply.
#line 1136
allow postinstall system_server:binder transfer;
#line 1136
# Receive and use open files from the server.
#line 1136
allow system_server postinstall:fd use;
#line 1136
allow system_server postinstall:fifo_file write;
allow system_server update_engine:fd use;
allow system_server update_engine:fifo_file write;
# Access to /data/preloads
allow system_server preloads_data_file:file { { getattr open read ioctl lock map watch watch_reads } unlink };
allow system_server preloads_data_file:dir { { open getattr read search ioctl lock watch watch_reads } write remove_name rmdir };
allow system_server preloads_media_file:file { { getattr open read ioctl lock map watch watch_reads } unlink };
allow system_server preloads_media_file:dir { { open getattr read search ioctl lock watch watch_reads } write remove_name rmdir };
#line 1148
allow system_server cgroup:dir { open getattr read search ioctl lock watch watch_reads };
#line 1148
allow system_server cgroup:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 1148
#line 1149
allow system_server cgroup_v2:dir { open getattr read search ioctl lock watch watch_reads };
#line 1149
allow system_server cgroup_v2:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 1149
allow system_server ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
# Access to /dev/dma_heap/system
allow system_server dmabuf_system_heap_device:chr_file { getattr open read ioctl lock map watch watch_reads };
# Access to /dev/dma_heap/system-secure
allow system_server dmabuf_system_secure_heap_device:chr_file { getattr open read ioctl lock map watch watch_reads };
#line 1157
allow system_server proc_asound:dir { open getattr read search ioctl lock watch watch_reads };
#line 1157
allow system_server proc_asound:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 1157
#line 1158
allow system_server proc_net_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 1158
allow system_server proc_net_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 1158
#line 1159
allow system_server proc_qtaguid_stat:dir { open getattr read search ioctl lock watch watch_reads };
#line 1159
allow system_server proc_qtaguid_stat:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 1159
allow system_server {
proc_cmdline
proc_loadavg
proc_locks
proc_meminfo
proc_pagetypeinfo
proc_pipe_conf
proc_stat
proc_uid_cputime_showstat
proc_uid_io_stats
proc_uid_time_in_state
proc_uid_concurrent_active_time
proc_uid_concurrent_policy_time
proc_version
proc_vmallocinfo
}:file { getattr open read ioctl lock map watch watch_reads };
allow system_server proc_uid_time_in_state:dir { open getattr read search ioctl lock watch watch_reads };
allow system_server proc_uid_cpupower:file { getattr open read ioctl lock map watch watch_reads };
#line 1180
allow system_server rootfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 1180
allow system_server rootfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 1180
# Allow WifiService to start, stop, and read wifi-specific trace events.
allow system_server debugfs_tracing_instances:dir search;
allow system_server debugfs_wifi_tracing:dir search;
allow system_server debugfs_wifi_tracing:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Allow BootReceiver to watch trace error_report events.
allow system_server debugfs_bootreceiver_tracing:dir search;
allow system_server debugfs_bootreceiver_tracing:file { getattr open read ioctl lock map watch watch_reads };
# Allow system_server to read tracepoint ids in order to attach BPF programs to them.
allow system_server debugfs_tracing:file { getattr open read ioctl lock map watch watch_reads };
# allow system_server to exec shell, asanwrapper & zygote(app_process) on ASAN builds. Needed to run
# asanwrapper.
#line 1200
# allow system_server to read the eBPF maps that stores the traffic stats information and update
# the map after snapshot is recorded, and to read, update and run the maps and programs used for
# time in state accounting
allow system_server { fs_bpf fs_bpf_net_shared fs_bpf_netd_readonly fs_bpf_netd_shared }:dir search;
allow system_server { fs_bpf fs_bpf_net_shared fs_bpf_netd_readonly fs_bpf_netd_shared }:file { getattr read write };
allow system_server bpfloader:bpf { map_read map_write prog_run };
# in order to invoke side effect of close() on such a socket calling synchronize_rcu()
allow system_server self:key_socket create;
# Java's Os.close() in libcore/luni/src/main/java/libcore/io/BlockGuardOs.java;l=100
# calls if (fd.isSocket$()) if (isLingerSocket(fd)) ...
dontaudit system_server self:key_socket getopt;
# Allow system_server to start clatd in its own domain and kill it.
#line 1215
# Allow the necessary permissions.
#line 1215
#line 1215
# Old domain may exec the file and transition to the new domain.
#line 1215
allow system_server clatd_exec:file { getattr open read execute map };
#line 1215
allow system_server clatd:process transition;
#line 1215
# New domain is entered by executing the file.
#line 1215
allow clatd clatd_exec:file { entrypoint open read execute getattr map };
#line 1215
# New domain can send SIGCHLD to its caller.
#line 1215
allow clatd system_server:process sigchld;
#line 1215
# Enable AT_SECURE, i.e. libc secure mode.
#line 1215
dontaudit system_server clatd:process noatsecure;
#line 1215
# XXX dontaudit candidate but requires further study.
#line 1215
allow system_server clatd:process { siginh rlimitinh };
#line 1215
#line 1215
# Make the transition occur by default.
#line 1215
type_transition system_server clatd_exec:process clatd;
#line 1215
allow system_server clatd:process { sigkill signal };
# ART Profiles.
# Allow system_server to open profile snapshots for read.
# System server never reads the actual content. It passes the descriptor to
# to privileged apps which acquire the permissions to inspect the profiles.
allow system_server { user_profile_root_file user_profile_data_file}:dir { getattr search };
allow system_server user_profile_data_file:file { getattr open read };
# System server may dump profile data for debuggable apps in the /data/misc/profman.
# As such it needs to be able create files but it should never read from them.
# It also needs to stat the directory to check if it has the right permissions.
allow system_server profman_dump_data_file:file { create getattr setattr { open append write lock map }};
allow system_server profman_dump_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
# On userdebug build we may profile system server. Allow it to write and create its own profile.
#line 1235
# Allow system server to load JVMTI agents under control of a property.
#line 1237
allow system_server system_jvmti_agent_prop:file { getattr open read map };
#line 1237
# UsbDeviceManager uses /dev/usb-ffs
allow system_server functionfs:dir search;
allow system_server functionfs:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# system_server contains time / time zone detection logic so reads the associated properties.
#line 1244
allow system_server time_prop:file { getattr open read map };
#line 1244
# system_server reads this property to know it should expect the lmkd sends notification to it
# on low memory kills.
#line 1248
allow system_server system_lmk_prop:file { getattr open read map };
#line 1248
#line 1250
allow system_server wifi_config_prop:file { getattr open read map };
#line 1250
# Only system server can access BINDER_FREEZE and BINDER_GET_FROZEN_INFO
allowxperm system_server binder_device:chr_file ioctl { 0x400c620e 0xc00c620f };
# Watchdog prints debugging log to /dev/kmsg_debug.
#line 1258
# Watchdog reads sysprops framework_watchdog.fatal_* to handle watchdog timeout loop.
#line 1260
allow system_server framework_watchdog_config_prop:file { getattr open read map };
#line 1260
# Font files are written by system server
allow system_server font_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow system_server font_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
# Allow system process to setup and measure fs-verity for font files
allowxperm system_server font_data_file:file ioctl { 0x6685 0x6686 };
# Read qemu.hw.mainkeys property
#line 1270
allow system_server qemu_hw_prop:file { getattr open read map };
#line 1270
# Allow system server to read profcollectd reports for upload.
###
### Neverallow rules
###
### system_server should NEVER do any of this
# Do not allow opening files from external storage as unsafe ejection
# could cause the kernel to kill the system_server.
neverallow system_server { sdcard_type fuse }:dir { open read write };
neverallow system_server { sdcard_type fuse }:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# system server should never be operating on zygote spawned app data
# files directly. Rather, they should always be passed via a
# file descriptor.
# Exclude those types that system_server needs to open directly.
neverallow system_server {
app_data_file_type
-system_app_data_file
-radio_data_file
}:file { open create unlink link };
# Forking and execing is inherently dangerous and racy. See, for
# example, https://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-them
# Prevent the addition of new file execs to stop the problem from
# getting worse. b/28035297
neverallow system_server {
file_type
-toolbox_exec
-logcat_exec
}:file execute_no_trans;
# Ensure that system_server doesn't perform any domain transitions other than
# transitioning to the crash_dump domain when a crash occurs or fork clatd.
neverallow system_server { domain -clatd -crash_dump -perfetto }:process transition;
neverallow system_server *:process dyntransition;
# Ensure that system_server doesn't access anything but search in perfetto_traces_data_file:dir.
neverallow system_server perfetto_traces_data_file:dir ~search;
# Only allow crash_dump to connect to system_ndebug_socket.
neverallow { domain -init -system_server -crash_dump } system_ndebug_socket:sock_file { open write };
# Only allow zygotes to connect to system_unsolzygote_socket.
neverallow {
domain
-init
-system_server
-zygote
-app_zygote
-webview_zygote
} system_unsolzygote_socket:sock_file { open write };
# Only allow init, system_server, flags_health_check to set properties for server configurable flags
neverallow {
domain
-init
-system_server
-flags_health_check
} {
device_config_core_experiments_team_internal_prop
device_config_activity_manager_native_boot_prop
device_config_connectivity_prop
device_config_input_native_boot_prop
device_config_lmkd_native_prop
device_config_netd_native_prop
device_config_nnapi_native_prop
device_config_edgetpu_native_prop
device_config_runtime_native_boot_prop
device_config_runtime_native_prop
device_config_media_native_prop
device_config_mglru_native_prop
device_config_remote_key_provisioning_native_prop
device_config_storage_native_boot_prop
device_config_surface_flinger_native_boot_prop
device_config_sys_traced_prop
device_config_swcodec_native_prop
device_config_aconfig_flags_prop
device_config_window_manager_native_boot_prop
device_config_tethering_u_or_later_native_prop
next_boot_prop
}:property_service set;
# Only allow system_server and init to set tuner_server_ctl_prop
neverallow {
domain
-system_server
-init
} tuner_server_ctl_prop:property_service set;
# system_server should never be executing dex2oat. This is either
# a bug (for example, bug 16317188), or represents an attempt by
# system server to dynamically load a dex file, something we do not
# want to allow.
neverallow system_server dex2oat_exec:file { execute execute_no_trans };
# system_server should never execute or load executable shared libraries
# in /data. Executable files in /data are a persistence vector.
# https://bugs.chromium.org/p/project-zero/issues/detail?id=955 for example.
neverallow system_server data_file_type:file { execute execute_no_trans };
# The only block device system_server should be writing to is
# the frp_block_device. This helps avoid a system_server to root
# escalation by writing to raw block devices.
# The system_server may need to read from vd_device if it uses
# block apexes.
neverallow system_server { dev_type -frp_block_device }:blk_file { append create link unlink relabelfrom rename setattr write };
neverallow system_server { dev_type -frp_block_device -vd_device }:blk_file { getattr open read ioctl lock map watch watch_reads };
# system_server should never use JIT functionality
# See https://googleprojectzero.blogspot.com/2016/12/bitunmap-attacking-android-ashmem.html
# in the section titled "A Short ROP Chain" for why.
# However, in emulator builds without OpenGL passthrough, we use software
# rendering via SwiftShader, which requires JIT support. These builds are
# never shipped to users.
neverallow system_server self:process execmem;
#line 1392
neverallow system_server { ashmem_device ashmem_libcutils_device }:chr_file execute;
# TODO: deal with tmpfs_domain pub/priv split properly
neverallow system_server system_server_tmpfs:file execute;
# Resources handed off by system_server_startup
allow system_server system_server_startup:fd use;
allow system_server system_server_startup_tmpfs:file { read write map };
allow system_server system_server_startup:unix_dgram_socket write;
# Allow system server to communicate to apexd
allow system_server apex_service:service_manager find;
allow system_server apexd:binder call;
# Allow system server to scan /apex for flattened APEXes
allow system_server apex_mnt_dir:dir { open getattr read search ioctl lock watch watch_reads };
# Allow system server to read /apex/apex-info-list.xml
allow system_server apex_info_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow system server to communicate to system-suspend's control interface
allow system_server system_suspend_control_internal_service:service_manager find;
allow system_server system_suspend_control_service:service_manager find;
#line 1415
# Call the server domain and optionally transfer references to it.
#line 1415
allow system_server system_suspend:binder { call transfer };
#line 1415
# Allow the serverdomain to transfer references to the client on the reply.
#line 1415
allow system_suspend system_server:binder transfer;
#line 1415
# Receive and use open files from the server.
#line 1415
allow system_server system_suspend:fd use;
#line 1415
#line 1416
# Call the server domain and optionally transfer references to it.
#line 1416
allow system_suspend system_server:binder { call transfer };
#line 1416
# Allow the serverdomain to transfer references to the client on the reply.
#line 1416
allow system_server system_suspend:binder transfer;
#line 1416
# Receive and use open files from the server.
#line 1416
allow system_suspend system_server:fd use;
#line 1416
# Allow system server to communicate to system-suspend's wakelock interface
#line 1419
# TODO(b/115946999): Remove /sys/power/* permissions once CONFIG_PM_WAKELOCKS is
#line 1419
# deprecated.
#line 1419
# Access /sys/power/wake_lock and /sys/power/wake_unlock
#line 1419
allow system_server sysfs_wake_lock:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 1419
# Accessing these files requires CAP_BLOCK_SUSPEND
#line 1419
allow system_server self:{ capability2 cap2_userns } block_suspend;
#line 1419
# system_suspend permissions
#line 1419
#line 1419
# Call the server domain and optionally transfer references to it.
#line 1419
allow system_server system_suspend_server:binder { call transfer };
#line 1419
# Allow the serverdomain to transfer references to the client on the reply.
#line 1419
allow system_suspend_server system_server:binder transfer;
#line 1419
# Receive and use open files from the server.
#line 1419
allow system_server system_suspend_server:fd use;
#line 1419
#line 1419
allow system_server system_suspend_hwservice:hwservice_manager find;
#line 1419
# halclientdomain permissions
#line 1419
#line 1419
# Call the hwservicemanager and transfer references to it.
#line 1419
allow system_server hwservicemanager:binder { call transfer };
#line 1419
# Allow hwservicemanager to send out callbacks
#line 1419
allow hwservicemanager system_server:binder { call transfer };
#line 1419
# hwservicemanager performs getpidcon on clients.
#line 1419
allow hwservicemanager system_server:dir search;
#line 1419
allow hwservicemanager system_server:file { read open map };
#line 1419
allow hwservicemanager system_server:process getattr;
#line 1419
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 1419
# all domains in domain.te.
#line 1419
#line 1419
#line 1419
allow system_server hwservicemanager_prop:file { getattr open read map };
#line 1419
#line 1419
allow system_server hidl_manager_hwservice:hwservice_manager find;
#line 1419
# AIDL suspend hal permissions
#line 1419
allow system_server hal_system_suspend_service:service_manager find;
#line 1419
#line 1419
# Call the servicemanager and transfer references to it.
#line 1419
allow system_server servicemanager:binder { call transfer };
#line 1419
# Allow servicemanager to send out callbacks
#line 1419
allow servicemanager system_server:binder { call transfer };
#line 1419
# servicemanager performs getpidcon on clients.
#line 1419
allow servicemanager system_server:dir search;
#line 1419
allow servicemanager system_server:file { read open };
#line 1419
allow servicemanager system_server:process getattr;
#line 1419
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 1419
# all domains in domain.te.
#line 1419
#line 1419
# Allow the system server to read files under /data/apex. The system_server
# needs these privileges to compare file signatures while processing installs.
#
# Only apexd is allowed to create new entries or write to any file under /data/apex.
allow system_server apex_data_file:dir { getattr search };
allow system_server apex_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow the system server to read files under /vendor/apex. This is where
# vendor APEX packages might be installed and system_server needs to parse
# these packages to inspect the signatures and other metadata.
allow system_server vendor_apex_file:dir { getattr search };
allow system_server vendor_apex_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow the system server to manage relevant apex module data files.
allow system_server apex_module_data_file:dir { getattr search };
# These are modules where the code runs in system_server, so we need full access.
allow system_server apex_system_server_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server apex_system_server_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow system_server apex_tethering_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server apex_tethering_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Legacy labels that we still need to support (b/217581286)
allow system_server {
apex_appsearch_data_file
apex_permission_data_file
apex_scheduling_data_file
apex_wifi_data_file
}:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server {
apex_appsearch_data_file
apex_permission_data_file
apex_scheduling_data_file
apex_wifi_data_file
}:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow PasswordSlotManager rw access to /metadata/password_slots, so GSIs and the host image can
# communicate which slots are available for use.
allow system_server metadata_file:dir search;
allow system_server password_slot_metadata_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow system_server password_slot_metadata_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow system_server userspace_reboot_metadata_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server userspace_reboot_metadata_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow system server rw access to files in /metadata/staged-install folder
allow system_server staged_install_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow system_server staged_install_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow system_server watchdog_metadata_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow system_server watchdog_metadata_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow system_server aconfig_storage_flags_metadata_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow system_server aconfig_storage_flags_metadata_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow system_server repair_mode_metadata_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow system_server repair_mode_metadata_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow system_server gsi_persistent_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow system_server gsi_persistent_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow system server read and remove files under /data/misc/odrefresh
allow system_server odrefresh_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow system_server odrefresh_data_file:file { { getattr open read ioctl lock map watch watch_reads } unlink };
# Allow system server r access to /system/bin/surfaceflinger for PinnerService.
allow system_server surfaceflinger_exec:file { getattr open read ioctl lock map watch watch_reads };
# Allow init to set sysprop used to compute stats about userspace reboot.
#line 1488
#line 1488
allow system_server property_socket:sock_file write;
#line 1488
allow system_server init:unix_stream_socket connectto;
#line 1488
#line 1488
allow system_server userspace_reboot_log_prop:property_service set;
#line 1488
#line 1488
allow system_server userspace_reboot_log_prop:file { getattr open read map };
#line 1488
#line 1488
# JVMTI agent settings are only readable from the system server.
neverallow {
domain
-system_server
-dumpstate
-init
-vendor_init
} {
system_jvmti_agent_prop
}:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Read/Write /proc/pressure/memory
allow system_server proc_pressure_mem:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Read /proc/pressure/cpu and /proc/pressure/io
allow system_server { proc_pressure_cpu proc_pressure_io }:file { getattr open read ioctl lock map watch watch_reads };
# dexoptanalyzer is currently used only for secondary dex files which
# system_server should never access.
neverallow system_server dexoptanalyzer_exec:file { execute execute_no_trans };
# No ptracing others
neverallow system_server { domain -system_server }:process ptrace;
# CAP_SYS_RESOURCE was traditionally needed for sensitive /proc/PID
# file read access. However, that is now unnecessary (b/34951864)
neverallow system_server system_server:{ capability cap_userns } sys_resource;
# Only system_server/init should access /metadata/password_slots.
neverallow { domain -init -system_server } password_slot_metadata_file:dir *;
neverallow {
domain
-init
-system_server
} password_slot_metadata_file:{ file lnk_file sock_file fifo_file } ~{ relabelto getattr };
neverallow { domain -init -system_server } password_slot_metadata_file:{ file lnk_file sock_file fifo_file } *;
# Only system_server/init should access /metadata/userspacereboot.
neverallow { domain -init -system_server } userspace_reboot_metadata_file:dir *;
neverallow { domain -init -system_server } userspace_reboot_metadata_file:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Only system server should access /metadata/aconfig
neverallow { domain -init -system_server -aconfigd } aconfig_storage_flags_metadata_file:dir *;
neverallow { domain -init -system_server -aconfigd } aconfig_storage_flags_metadata_file:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Allow systemserver to read/write the invalidation property
#line 1535
#line 1535
allow system_server property_socket:sock_file write;
#line 1535
allow system_server init:unix_stream_socket connectto;
#line 1535
#line 1535
allow system_server binder_cache_system_server_prop:property_service set;
#line 1535
#line 1535
allow system_server binder_cache_system_server_prop:file { getattr open read map };
#line 1535
#line 1535
neverallow { domain -system_server -init }
binder_cache_system_server_prop:property_service set;
# Allow system server to attach BPF programs to tracepoints. Deny read permission so that
# system_server cannot use this access to read perf event data like process stacks.
allow system_server self:perf_event { open write cpu kernel };
neverallow system_server self:perf_event ~{ open write cpu kernel };
# Allow writing files under /data/system/shutdown-checkpoints/
allow system_server shutdown_checkpoints_system_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow system_server shutdown_checkpoints_system_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Do not allow any domain other than init or system server to set the property
neverallow { domain -init -system_server } socket_hook_prop:property_service set;
neverallow { domain -init -system_server } boot_status_prop:property_service set;
neverallow {
domain
-init
-vendor_init
-dumpstate
-system_server
} wifi_config_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Only allow system server to write uhid sysfs files
neverallow {
domain
-init
-system_server
-ueventd
-vendor_init
} sysfs_uhid:file { append create link unlink relabelfrom rename setattr write };
# BINDER_FREEZE is used to block ipc transactions to frozen processes, so it
# can be accessed by system_server only (b/143717177)
# BINDER_GET_FROZEN_INFO is used by system_server to determine the state of a frozen binder
# interface
neverallowxperm { domain -system_server } binder_device:chr_file ioctl { 0x400c620e 0xc00c620f };
# Only system server can write the font files.
neverallow { domain -init -system_server } font_data_file:file { append create link unlink relabelfrom rename setattr write };
neverallow { domain -init -system_server } font_data_file:dir { add_name create link relabelfrom remove_name rename reparent rmdir setattr write };
# Allow reading /system/etc/font_fallback.xml
allow system_server system_font_fallback_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow system server to set dynamic ART properties.
#line 1584
#line 1584
allow system_server property_socket:sock_file write;
#line 1584
allow system_server init:unix_stream_socket connectto;
#line 1584
#line 1584
allow system_server dalvik_dynamic_config_prop:property_service set;
#line 1584
#line 1584
allow system_server dalvik_dynamic_config_prop:file { getattr open read map };
#line 1584
#line 1584
# Allow system server to read binderfs
allow system_server binderfs_logs:dir { open getattr read search ioctl lock watch watch_reads };
allow system_server binderfs_logs_stats:file { getattr open read ioctl lock map watch watch_reads };
# Allow GameManagerService to read and write persist.graphics.game_default_frame_rate.enabled
#line 1591
#line 1591
allow system_server property_socket:sock_file write;
#line 1591
allow system_server init:unix_stream_socket connectto;
#line 1591
#line 1591
allow system_server game_manager_config_prop:property_service set;
#line 1591
#line 1591
allow system_server game_manager_config_prop:file { getattr open read map };
#line 1591
#line 1591
# ThreadNetworkService reads Thread Network properties
#line 1594
allow system_server threadnetwork_config_prop:file { getattr open read map };
#line 1594
# Do not allow any domain other than init and system server to set the property
neverallow {
domain
-init
-vendor_init
-dumpstate
-system_server
} threadnetwork_config_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Allow system server to read pm.archiving.enabled prop
# TODO(azilio): Remove system property after archiving testing is completed.
#line 1607
allow system_server pm_archiving_enabled_prop:file { getattr open read map };
#line 1607
# Do not allow any domain other than init or system server to get or set the property
neverallow { domain -init -system_server } crashrecovery_prop:property_service set;
neverallow { domain -init -dumpstate -system_server } crashrecovery_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 1 "system/sepolicy/private/system_server_startup.te"
type system_server_startup, domain, coredomain;
type system_server_startup_tmpfs, file_type;
#line 4
type_transition system_server_startup tmpfs:file system_server_startup_tmpfs;
#line 4
allow system_server_startup system_server_startup_tmpfs:file { read write getattr map };
#line 4
# Create JIT memory
allow system_server_startup self:process execmem;
allow system_server_startup system_server_startup_tmpfs:file { execute read write open map };
# Allow to pick up integrity-checked artifacts from the ART APEX dalvik cache.
allow system_server_startup apex_art_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow system_server_startup apex_art_data_file:file { { getattr open read ioctl lock map watch watch_reads } execute };
# Allow system_server_startup to run setcon() and enter the
# system_server domain
allow system_server_startup self:process setcurrent;
allow system_server_startup system_server:process dyntransition;
# Child of the zygote.
allow system_server_startup zygote:process sigchld;
# Allow query ART device config properties
#line 23
allow system_server_startup device_config_runtime_native_boot_prop:file { getattr open read map };
#line 23
#line 24
allow system_server_startup device_config_runtime_native_prop:file { getattr open read map };
#line 24
#line 1 "system/sepolicy/private/system_suspend.te"
type system_suspend, domain, coredomain, system_suspend_server, system_suspend_internal_server;
type system_suspend_exec, system_file_type, exec_type, file_type;
#line 4
#line 4
# Allow the necessary permissions.
#line 4
#line 4
# Old domain may exec the file and transition to the new domain.
#line 4
allow init system_suspend_exec:file { getattr open read execute map };
#line 4
allow init system_suspend:process transition;
#line 4
# New domain is entered by executing the file.
#line 4
allow system_suspend system_suspend_exec:file { entrypoint open read execute getattr map };
#line 4
# New domain can send SIGCHLD to its caller.
#line 4
#line 4
# Enable AT_SECURE, i.e. libc secure mode.
#line 4
dontaudit init system_suspend:process noatsecure;
#line 4
# XXX dontaudit candidate but requires further study.
#line 4
allow init system_suspend:process { siginh rlimitinh };
#line 4
#line 4
# Make the transition occur by default.
#line 4
type_transition init system_suspend_exec:process system_suspend;
#line 4
#line 4
# To serve ISuspendControlService.
#line 7
# Call the servicemanager and transfer references to it.
#line 7
allow system_suspend servicemanager:binder { call transfer };
#line 7
# Allow servicemanager to send out callbacks
#line 7
allow servicemanager system_suspend:binder { call transfer };
#line 7
# servicemanager performs getpidcon on clients.
#line 7
allow servicemanager system_suspend:dir search;
#line 7
allow servicemanager system_suspend:file { read open };
#line 7
allow servicemanager system_suspend:process getattr;
#line 7
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 7
# all domains in domain.te.
#line 7
#line 8
allow system_suspend system_suspend_control_service:service_manager { add find };
#line 8
neverallow { domain -system_suspend } system_suspend_control_service:service_manager add;
#line 8
#line 8
# On debug builds with root, allow binder services to use binder over TCP.
#line 8
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 8
#line 8
#line 10
allow system_suspend hal_system_suspend_service:service_manager { add find };
#line 10
neverallow { domain -system_suspend } hal_system_suspend_service:service_manager add;
#line 10
#line 10
# On debug builds with root, allow binder services to use binder over TCP.
#line 10
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 10
#line 10
# Access to /sys/power/{ wakeup_count, state } suspend interface.
allow system_suspend sysfs_power:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# Access to wakeup, suspend stats, and wakeup reasons.
#line 16
allow system_suspend sysfs_suspend_stats:dir { open getattr read search ioctl lock watch watch_reads };
#line 16
allow system_suspend sysfs_suspend_stats:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 16
#line 17
allow system_suspend sysfs_wakeup:dir { open getattr read search ioctl lock watch watch_reads };
#line 17
allow system_suspend sysfs_wakeup:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 17
#line 18
allow system_suspend sysfs_wakeup_reasons:dir { open getattr read search ioctl lock watch watch_reads };
#line 18
allow system_suspend sysfs_wakeup_reasons:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 18
# To resolve arbitrary sysfs paths from /sys/class/wakeup/* symlinks.
allow system_suspend sysfs_type:dir search;
# Access to suspend_hal system properties
#line 23
allow system_suspend suspend_prop:file { getattr open read map };
#line 23
# Access to system_suspend debug system properties
#line 28
# To call BTAA registered callbacks
allow system_suspend bluetooth:binder call;
# For adding `dumpsys syspend_control` output to bugreport
allow system_suspend dumpstate:fd use;
allow system_suspend dumpstate:fifo_file write;
# Allow init to take kernel wakelock and system suspend to
# remove kenel wakelocks and the capability to access these
# files
allow init sysfs_wake_lock:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow init self:{ capability2 cap2_userns } block_suspend;
allow system_suspend sysfs_wake_lock:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow system_suspend self:{ capability2 cap2_userns } block_suspend;
# Allow init to set /sys/power/sync_on_suspend.
allow init sysfs_sync_on_suspend:file { open append write lock map };
neverallow {
domain
-atrace # tracing
-bluetooth # support Bluetooth activity attribution (BTAA)
-dumpstate # bug reports
-system_suspend # implements system_suspend_control_service
-system_server # configures system_suspend via ISuspendControlService
-traceur_app # tracing
} system_suspend_control_service:service_manager find;
#line 1 "system/sepolicy/private/tombstoned.te"
typeattribute tombstoned coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init tombstoned_exec:file { getattr open read execute map };
#line 3
allow init tombstoned:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow tombstoned tombstoned_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init tombstoned:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init tombstoned:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init tombstoned_exec:process tombstoned;
#line 3
#line 3
#line 5
allow tombstoned tombstone_config_prop:file { getattr open read map };
#line 5
neverallow {
domain
-init
-vendor_init
-dumpstate
-tombstoned
} tombstone_config_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 1 "system/sepolicy/private/toolbox.te"
typeattribute toolbox coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init toolbox_exec:file { getattr open read execute map };
#line 3
allow init toolbox:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow toolbox toolbox_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init toolbox:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init toolbox:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init toolbox_exec:process toolbox;
#line 3
#line 3
# rm -rf in /data/misc/virtualizationservice
allow toolbox virtualizationservice_data_file:dir { rmdir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow toolbox virtualizationservice_data_file:file { getattr unlink };
# If we can't remove these directories we try to chmod them. That
# doesn't work, but it doesn't matter as virtualizationservice itself
# will delete them when it starts. See b/235338094#comment39
dontaudit toolbox virtualizationservice_data_file:dir setattr;
#line 1 "system/sepolicy/private/traced.te"
# Perfetto user-space tracing daemon (unprivileged)
type traced_exec, system_file_type, exec_type, file_type;
# Allow init to exec the daemon.
#line 5
#line 5
# Allow the necessary permissions.
#line 5
#line 5
# Old domain may exec the file and transition to the new domain.
#line 5
allow init traced_exec:file { getattr open read execute map };
#line 5
allow init traced:process transition;
#line 5
# New domain is entered by executing the file.
#line 5
allow traced traced_exec:file { entrypoint open read execute getattr map };
#line 5
# New domain can send SIGCHLD to its caller.
#line 5
#line 5
# Enable AT_SECURE, i.e. libc secure mode.
#line 5
dontaudit init traced:process noatsecure;
#line 5
# XXX dontaudit candidate but requires further study.
#line 5
allow init traced:process { siginh rlimitinh };
#line 5
#line 5
# Make the transition occur by default.
#line 5
type_transition init traced_exec:process traced;
#line 5
#line 5
#line 6
type_transition traced tmpfs:file traced_tmpfs;
#line 6
allow traced traced_tmpfs:file { read write getattr map };
#line 6
# Allow apps in other MLS contexts (for multi-user) to access
# share memory buffers created by traced.
typeattribute traced_tmpfs mlstrustedobject;
# Allow traced to start with a lower scheduling class and change
# class accordingly to what defined in the config provided by
# the privileged process that controls it.
allow traced self:{ capability cap_userns } { sys_nice };
# Allow to pass a file descriptor for the output trace from "perfetto" (the
# cmdline client) and other shell binaries to traced and let traced write
# directly into that (rather than returning the trace contents over the socket).
allow traced perfetto:fd use;
allow traced shell:fd use;
allow traced shell:fifo_file { read write };
# Allow the service to create new files within /data/misc/perfetto-traces.
allow traced perfetto_traces_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow traced perfetto_traces_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
# Allow traceur to pass open file descriptors to traced, so traced can directly
# write into the output file without doing roundtrips over IPC.
allow traced traceur_app:fd use;
allow traced trace_data_file:file { read write };
# Allow perfetto to access the proxy service for notifying Traceur.
allow traced tracingproxy_service:service_manager find;
#line 35
# Call the servicemanager and transfer references to it.
#line 35
allow traced servicemanager:binder { call transfer };
#line 35
# Allow servicemanager to send out callbacks
#line 35
allow servicemanager traced:binder { call transfer };
#line 35
# servicemanager performs getpidcon on clients.
#line 35
allow servicemanager traced:dir search;
#line 35
allow servicemanager traced:file { read open };
#line 35
allow servicemanager traced:process getattr;
#line 35
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 35
# all domains in domain.te.
#line 35
;
#line 36
# Call the server domain and optionally transfer references to it.
#line 36
allow traced system_server:binder { call transfer };
#line 36
# Allow the serverdomain to transfer references to the client on the reply.
#line 36
allow system_server traced:binder transfer;
#line 36
# Receive and use open files from the server.
#line 36
allow traced system_server:fd use;
#line 36
;
# Allow traced to use shared memory supplied by producers. Typically, traced
# (i.e. the tracing service) creates the shared memory used for data transfer
# from the producer. This rule allows an alternative scheme, where the producer
# creates the shared memory, that is then adopted by traced (after validating
# that it is appropriately sealed).
# This list has to replicate the tmpfs domains of all applicable domains that
# have perfetto_producer() macro applied to them.
# perfetto_tmpfs excluded as it should never need to use the producer-supplied
# shared memory scheme.
allow traced {
appdomain_tmpfs
heapprofd_tmpfs
surfaceflinger_tmpfs
traced_probes_tmpfs
}:file { getattr map read write };
# Allow setting debug properties which guard initialization of the Perfetto SDK
# in SurfaceFlinger and HWUI's copy of Skia.
# Required for the android.sdk_sysprop_guard data source.
# TODO(b/281329340): remove this when no longer needed.
#line 59
#line 59
allow traced property_socket:sock_file write;
#line 59
allow traced init:unix_stream_socket connectto;
#line 59
#line 59
allow traced debug_prop:property_service set;
#line 59
#line 59
allow traced debug_prop:file { getattr open read map };
#line 59
#line 59
# Allow traced to notify Traceur when a trace ends by setting the
# sys.trace.trace_end_signal property.
#line 62
#line 62
allow traced property_socket:sock_file write;
#line 62
allow traced init:unix_stream_socket connectto;
#line 62
#line 62
allow traced system_trace_prop:property_service set;
#line 62
#line 62
allow traced system_trace_prop:file { getattr open read map };
#line 62
#line 62
# Allow to lazily start producers.
#line 64
#line 64
allow traced property_socket:sock_file write;
#line 64
allow traced init:unix_stream_socket connectto;
#line 64
#line 64
allow traced traced_lazy_prop:property_service set;
#line 64
#line 64
allow traced traced_lazy_prop:file { getattr open read map };
#line 64
#line 64
# Allow tracking the count of sessions intercepting Java OutOfMemoryError
# If there are such tracing sessions and an OutOfMemoryError is thrown by ART,
# the hprof plugin intercepts the error, lazily registers a data source to
# traced and collects a heap dump.
#line 69
#line 69
allow traced property_socket:sock_file write;
#line 69
allow traced init:unix_stream_socket connectto;
#line 69
#line 69
allow traced traced_oome_heap_session_count_prop:property_service set;
#line 69
#line 69
allow traced traced_oome_heap_session_count_prop:file { getattr open read map };
#line 69
#line 69
# Allow traced to talk to statsd for logging metrics.
#line 72
allow traced statsdw_socket:sock_file write;
#line 72
allow traced statsd:unix_dgram_socket sendto;
#line 72
###
### Neverallow rules
###
### traced should NEVER do any of this
# Disallow mapping executable memory (execstack and exec are already disallowed
# globally in domain.te).
neverallow traced self:process execmem;
# Block device access.
neverallow traced dev_type:blk_file { read write };
# ptrace any other process
neverallow traced domain:process ptrace;
# Disallows access to /data files, still allowing to write to file descriptors
# passed through the socket.
neverallow traced {
data_file_type
-perfetto_traces_data_file
-system_data_file
-system_data_root_file
-media_userdir_file
-system_userdir_file
-vendor_userdir_file
# TODO(b/72998741) Remove vendor_data_file exemption. Further restricted in a
# subsequent neverallow. Currently only getattr and search are allowed.
-vendor_data_file
}:dir *;
neverallow traced { system_data_file }:dir ~{ getattr search };
neverallow traced {
data_file_type
-perfetto_traces_data_file
-trace_data_file
}:file ~write;
# Only init is allowed to enter the traced domain via exec()
neverallow { domain -init } traced:process transition;
neverallow * traced:process dyntransition;
# Limit the processes that can access tracingproxy_service.
neverallow {
domain
-traced
-dumpstate
-traceur_app
-shell
-system_server
-perfetto
} tracingproxy_service:service_manager find;
#line 1 "system/sepolicy/private/traced_perf.te"
# Performance profiler, backed by perf_event_open(2).
# See go/perfetto-perf-android.
typeattribute traced_perf coredomain;
typeattribute traced_perf mlstrustedsubject;
type traced_perf_exec, system_file_type, exec_type, file_type;
#line 8
#line 8
# Allow the necessary permissions.
#line 8
#line 8
# Old domain may exec the file and transition to the new domain.
#line 8
allow init traced_perf_exec:file { getattr open read execute map };
#line 8
allow init traced_perf:process transition;
#line 8
# New domain is entered by executing the file.
#line 8
allow traced_perf traced_perf_exec:file { entrypoint open read execute getattr map };
#line 8
# New domain can send SIGCHLD to its caller.
#line 8
#line 8
# Enable AT_SECURE, i.e. libc secure mode.
#line 8
dontaudit init traced_perf:process noatsecure;
#line 8
# XXX dontaudit candidate but requires further study.
#line 8
allow init traced_perf:process { siginh rlimitinh };
#line 8
#line 8
# Make the transition occur by default.
#line 8
type_transition init traced_perf_exec:process traced_perf;
#line 8
#line 8
#line 9
allow traced_perf traced:fd use;
#line 9
allow traced_perf traced_tmpfs:file { read write getattr map };
#line 9
#line 9
allow traced_perf traced_producer_socket:sock_file write;
#line 9
allow traced_perf traced:unix_stream_socket connectto;
#line 9
#line 9
#line 9
# Also allow the service to use the producer file descriptors. This is
#line 9
# necessary when the producer is creating the shared memory, as it will be
#line 9
# passed to the service as a file descriptor (obtained from memfd_create).
#line 9
allow traced traced_perf:fd use;
#line 9
# Allow traced_perf full use of perf_event_open(2). It will perform cpu-wide
# profiling, but retain samples only for profileable processes.
# Thread-specific profiling is still disallowed due to a PTRACE_MODE_ATTACH
# check (which would require a process:attach SELinux allow-rule).
allow traced_perf self:perf_event { open cpu kernel read write tracepoint };
# Allow CAP_KILL for delivery of dedicated signal to obtain proc-fds from a
# process. Allow CAP_DAC_READ_SEARCH for stack unwinding and symbolization of
# sampled stacks, which requires opening the backing libraries/executables (as
# symbols are usually not mapped into the process space). Not all such files
# are world-readable, e.g. odex files that included user profiles during
# profile-guided optimization.
allow traced_perf self:capability { kill dac_read_search };
# Allow reading /system/data/packages.list.
allow traced_perf packages_list_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow reading files for stack unwinding and symbolization.
#line 29
allow traced_perf nativetest_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 29
allow traced_perf nativetest_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 29
#line 30
allow traced_perf system_file_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 30
allow traced_perf system_file_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 30
#line 31
allow traced_perf apk_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 31
allow traced_perf apk_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 31
#line 32
allow traced_perf dalvikcache_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 32
allow traced_perf dalvikcache_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 32
#line 33
allow traced_perf vendor_file_type:dir { open getattr read search ioctl lock watch watch_reads };
#line 33
allow traced_perf vendor_file_type:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 33
# ART apex files and directory access to the containing /data/misc/apexdata.
#line 35
allow traced_perf apex_art_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 35
allow traced_perf apex_art_data_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 35
allow traced_perf apex_module_data_file:dir { getattr search };
# Allow to temporarily lift the kptr_restrict setting and build a symbolization
# map reading /proc/kallsyms.
allow traced_perf proc_kallsyms:file { getattr open read ioctl lock map watch watch_reads };
# Allow reading tracefs files to get the format and numeric ids of tracepoints.
allow traced_perf debugfs_tracing:dir { open getattr read search ioctl lock watch watch_reads };
allow traced_perf debugfs_tracing:file { getattr open read ioctl lock map watch watch_reads };
#line 49
# Do not audit the cases where traced_perf attempts to access /proc/[pid] for
# domains that it cannot read.
dontaudit traced_perf domain:dir { search getattr open };
# Do not audit failures to signal a process, as there are cases when this is
# expected (native processes on debug builds use the policy for enforcing which
# processes are profileable).
dontaudit traced_perf domain:process signal;
# Never allow access to app data files
neverallow traced_perf app_data_file_type:file *;
# Never allow profiling privileged or otherwise incompatible domains.
# Corresponding allow-rule is in private/domain.te.
#line 65
neverallow traced_perf {
#line 65
apexd
#line 65
app_zygote
#line 65
bpfloader
#line 65
hal_configstore_server
#line 65
init
#line 65
kernel
#line 65
keystore
#line 65
llkd
#line 65
logd
#line 65
ueventd
#line 65
vendor_init
#line 65
vold
#line 65
webview_zygote
#line 65
zygote
#line 65
}:file read;
#line 65
neverallow traced_perf {
#line 65
apexd
#line 65
app_zygote
#line 65
bpfloader
#line 65
hal_configstore_server
#line 65
init
#line 65
kernel
#line 65
keystore
#line 65
llkd
#line 65
logd
#line 65
ueventd
#line 65
vendor_init
#line 65
vold
#line 65
webview_zygote
#line 65
zygote
#line 65
}:process signal;
#line 80
#line 1 "system/sepolicy/private/traced_probes.te"
# Perfetto tracing probes, has tracefs access.
type traced_probes_exec, system_file_type, exec_type, file_type;
type traced_probes_tmpfs, file_type;
# Allow init to exec the daemon.
#line 6
#line 6
# Allow the necessary permissions.
#line 6
#line 6
# Old domain may exec the file and transition to the new domain.
#line 6
allow init traced_probes_exec:file { getattr open read execute map };
#line 6
allow init traced_probes:process transition;
#line 6
# New domain is entered by executing the file.
#line 6
allow traced_probes traced_probes_exec:file { entrypoint open read execute getattr map };
#line 6
# New domain can send SIGCHLD to its caller.
#line 6
#line 6
# Enable AT_SECURE, i.e. libc secure mode.
#line 6
dontaudit init traced_probes:process noatsecure;
#line 6
# XXX dontaudit candidate but requires further study.
#line 6
allow init traced_probes:process { siginh rlimitinh };
#line 6
#line 6
# Make the transition occur by default.
#line 6
type_transition init traced_probes_exec:process traced_probes;
#line 6
#line 6
#line 7
type_transition traced_probes tmpfs:file traced_probes_tmpfs;
#line 7
allow traced_probes traced_probes_tmpfs:file { read write getattr map };
#line 7
# Write trace data to the Perfetto traced damon. This requires connecting to its
# producer socket and obtaining a (per-process) tmpfs fd.
#line 11
allow traced_probes traced:fd use;
#line 11
allow traced_probes traced_tmpfs:file { read write getattr map };
#line 11
#line 11
allow traced_probes traced_producer_socket:sock_file write;
#line 11
allow traced_probes traced:unix_stream_socket connectto;
#line 11
#line 11
#line 11
# Also allow the service to use the producer file descriptors. This is
#line 11
# necessary when the producer is creating the shared memory, as it will be
#line 11
# passed to the service as a file descriptor (obtained from memfd_create).
#line 11
allow traced traced_probes:fd use;
#line 11
# Allow traced_probes to access tracefs.
allow traced_probes debugfs_tracing:dir { open getattr read search ioctl lock watch watch_reads };
allow traced_probes debugfs_tracing:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow traced_probes debugfs_trace_marker:file getattr;
allow traced_probes debugfs_tracing_printk_formats:file { getattr open read ioctl lock map watch watch_reads };
# Allow traced_probes to access mm_events trace instance
allow traced_probes debugfs_tracing_instances:dir search;
allow traced_probes debugfs_mm_events_tracing:dir search;
allow traced_probes debugfs_mm_events_tracing:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# TODO(primiano): temporarily I/O tracing categories are still
# userdebug only until we nail down the denylist/allowlist.
#line 29
# Allow traced_probes to start with a higher scheduling class and then downgrade
# itself.
allow traced_probes self:{ capability cap_userns } { sys_nice };
# Allow procfs access
#line 36
allow traced_probes domain:dir { open getattr read search ioctl lock watch watch_reads };
#line 36
allow traced_probes domain:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 36
# Allow to temporarily lift the kptr_restrict setting and build a symbolization
# map reading /proc/kallsyms.
allow traced_probes proc_kallsyms:file { getattr open read ioctl lock map watch watch_reads };
# Allow to read packages.list file.
allow traced_probes packages_list_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow to read game_mode_intervention.list file.
allow traced_probes game_mode_intervention_list_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow to log to kernel dmesg when starting / stopping ftrace.
allow traced_probes kmsg_device:chr_file write;
# Allow traced_probes to list the system partition.
allow traced_probes system_file:dir { open read };
# Allow traced_probes to list some of the data partition.
allow traced_probes self:{ capability cap_userns } dac_read_search;
allow traced_probes apk_data_file:dir { getattr open read search };
allow traced_probes { apex_art_data_file apex_module_data_file }:dir { getattr open read search };
allow traced_probes dalvikcache_data_file:dir { getattr open read search };
#line 64
allow traced_probes system_app_data_file:dir { getattr open read search };
allow traced_probes backup_data_file:dir { getattr open read search };
allow traced_probes bootstat_data_file:dir { getattr open read search };
allow traced_probes update_engine_data_file:dir { getattr open read search };
allow traced_probes update_engine_log_data_file:dir { getattr open read search };
allow traced_probes { user_profile_root_file user_profile_data_file}:dir { getattr open read search };
# Allow traced_probes to run atrace. atrace pokes at system services to enable
# their userspace TRACE macros.
#line 74
# Allow the necessary permissions.
#line 74
#line 74
# Old domain may exec the file and transition to the new domain.
#line 74
allow traced_probes atrace_exec:file { getattr open read execute map };
#line 74
allow traced_probes atrace:process transition;
#line 74
# New domain is entered by executing the file.
#line 74
allow atrace atrace_exec:file { entrypoint open read execute getattr map };
#line 74
# New domain can send SIGCHLD to its caller.
#line 74
allow atrace traced_probes:process sigchld;
#line 74
# Enable AT_SECURE, i.e. libc secure mode.
#line 74
dontaudit traced_probes atrace:process noatsecure;
#line 74
# XXX dontaudit candidate but requires further study.
#line 74
allow traced_probes atrace:process { siginh rlimitinh };
#line 74
#line 74
# Make the transition occur by default.
#line 74
type_transition traced_probes atrace_exec:process atrace;
#line 74
;
# Allow traced_probes to kill atrace on timeout.
allow traced_probes atrace:process sigkill;
# Allow traced_probes to access /proc files for system stats.
# Note: trace data is NOT exposed to anything other than shell and privileged
# system apps that have access to the traced consumer socket.
allow traced_probes {
proc_meminfo
proc_vmstat
proc_stat
proc_buddyinfo
proc_pressure_cpu
proc_pressure_io
proc_pressure_mem
}:file { getattr open read ioctl lock map watch watch_reads };
# Allow access to read /sys/class/devfreq/ and /$DEVICE/cur_freq files
allow traced_probes sysfs_devfreq_dir:dir { open getattr read search ioctl lock watch watch_reads };
allow traced_probes sysfs_devfreq_cur:file { getattr open read ioctl lock map watch watch_reads };
# Allow access to read /proc/diskstats for I/O profiling.
allow traced_probes proc_diskstats:file { getattr open read ioctl lock map watch watch_reads };
# Allow access to the IHealth and IPowerStats HAL service for tracing battery counters.
#line 100
typeattribute traced_probes halclientdomain;
#line 100
typeattribute traced_probes hal_health_client;
#line 100
#line 100
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 100
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 100
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 100
#line 100
typeattribute traced_probes hal_health;
#line 100
# Find passthrough HAL implementations
#line 100
allow hal_health system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 100
allow hal_health vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 100
allow hal_health vendor_file:file { read open getattr execute map };
#line 100
#line 100
#line 101
typeattribute traced_probes halclientdomain;
#line 101
typeattribute traced_probes hal_power_stats_client;
#line 101
#line 101
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 101
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 101
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 101
#line 101
typeattribute traced_probes hal_power_stats;
#line 101
# Find passthrough HAL implementations
#line 101
allow hal_power_stats system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 101
allow hal_power_stats vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 101
allow hal_power_stats vendor_file:file { read open getattr execute map };
#line 101
#line 101
# Allow access to Atrace HAL for enabling vendor/device specific tracing categories.
#line 104
typeattribute traced_probes halclientdomain;
#line 104
typeattribute traced_probes hal_atrace_client;
#line 104
#line 104
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 104
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 104
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 104
#line 104
typeattribute traced_probes hal_atrace;
#line 104
# Find passthrough HAL implementations
#line 104
allow hal_atrace system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 104
allow hal_atrace vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 104
allow hal_atrace vendor_file:file { read open getattr execute map };
#line 104
#line 104
# On debug builds allow to ingest system logs into the trace.
# Allow traced_probes to talk to statsd for logging metrics and recording atoms.
#line 110
allow traced_probes statsdw_socket:sock_file write;
#line 110
allow traced_probes statsd:unix_dgram_socket sendto;
#line 110
#line 111
# Call the server domain and optionally transfer references to it.
#line 111
allow traced_probes statsd:binder { call transfer };
#line 111
# Allow the serverdomain to transfer references to the client on the reply.
#line 111
allow statsd traced_probes:binder transfer;
#line 111
# Receive and use open files from the server.
#line 111
allow traced_probes statsd:fd use;
#line 111
allow traced_probes stats_service:service_manager find;
###
### Neverallow rules
###
### traced_probes should NEVER do any of this
# Disallow mapping executable memory (execstack and exec are already disallowed
# globally in domain.te).
neverallow traced_probes self:process execmem;
# Block device access.
neverallow traced_probes dev_type:blk_file { read write };
# ptrace any other app
neverallow traced_probes domain:process ptrace;
# Disallows access to /data files.
neverallow traced_probes {
data_file_type
-apex_module_data_file
-apex_art_data_file
-apk_data_file
-dalvikcache_data_file
-system_data_file
-system_data_root_file
-media_userdir_file
-system_userdir_file
-vendor_userdir_file
-system_app_data_file
-backup_data_file
-bootstat_data_file
-update_engine_data_file
-update_engine_log_data_file
-user_profile_root_file
-user_profile_data_file
# TODO(b/72998741) Remove vendor_data_file exemption. Further restricted in a
# subsequent neverallow. Currently only getattr and search are allowed.
-vendor_data_file
}:dir *;
neverallow traced_probes system_data_file:dir ~{ getattr search };
neverallow traced_probes {
data_file_type
-packages_list_file
-game_mode_intervention_list_file
}:file *;
# Only init is allowed to enter the traced_probes domain via exec()
neverallow { domain -init } traced_probes:process transition;
neverallow * traced_probes:process dyntransition;
#line 1 "system/sepolicy/private/traceur_app.te"
typeattribute traceur_app coredomain;
#line 3
typeattribute traceur_app appdomain;
#line 3
# Label tmpfs objects for all apps.
#line 3
type_transition traceur_app tmpfs:file appdomain_tmpfs;
#line 3
#line 3
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 3
type traceur_app_userfaultfd;
#line 3
type_transition traceur_app traceur_app:anon_inode traceur_app_userfaultfd "[userfaultfd]";
#line 3
# Allow domain to create/use userfaultfd anon_inode.
#line 3
allow traceur_app traceur_app_userfaultfd:anon_inode { create ioctl read };
#line 3
# Suppress errors generate during bugreport
#line 3
dontaudit su traceur_app_userfaultfd:anon_inode *;
#line 3
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 3
neverallow { domain -traceur_app } traceur_app_userfaultfd:anon_inode *;
#line 3
#line 3
allow traceur_app appdomain_tmpfs:file { execute getattr map read write };
#line 3
neverallow { traceur_app -runas_app -shell -simpleperf } { domain -traceur_app }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 3
neverallow { appdomain -runas_app -shell -simpleperf -traceur_app } traceur_app:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 3
# The Android security model guarantees the confidentiality and integrity
#line 3
# of application data and execution state. Ptrace bypasses those
#line 3
# confidentiality guarantees. Disallow ptrace access from system components to
#line 3
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 3
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 3
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 3
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 3
# live lock conditions.
#line 3
neverallow { domain -traceur_app -crash_dump -runas_app -simpleperf } traceur_app:process ptrace;
#line 3
;
allow traceur_app debugfs_tracing:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow traceur_app debugfs_tracing_debug:dir { open getattr read search ioctl lock watch watch_reads };
#line 9
allow traceur_app trace_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow traceur_app trace_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow traceur_app wm_trace_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow traceur_app wm_trace_data_file:file { getattr { getattr open read ioctl lock map watch watch_reads } unlink };
allow traceur_app atrace_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# To exec the perfetto cmdline client and pass it the trace config on
# stdint through a pipe.
allow traceur_app perfetto_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Allow to access traced's privileged consumer socket.
#line 22
allow traceur_app traced_consumer_socket:sock_file write;
#line 22
allow traceur_app traced:unix_stream_socket connectto;
#line 22
dontaudit traceur_app debugfs_tracing_debug:file audit_access;
#line 26
#line 26
allow traceur_app property_socket:sock_file write;
#line 26
allow traceur_app init:unix_stream_socket connectto;
#line 26
#line 26
allow traceur_app debug_prop:property_service set;
#line 26
#line 26
allow traceur_app debug_prop:file { getattr open read map };
#line 26
#line 26
#line 1 "system/sepolicy/private/ueventd.te"
typeattribute ueventd coredomain;
#line 3
type_transition ueventd tmpfs:file ueventd_tmpfs;
#line 3
allow ueventd ueventd_tmpfs:file { read write getattr map };
#line 3
# ueventd can set properties, particularly it sets ro.cold_boot_done to signal
# to init that cold boot has completed.
#line 7
#line 7
allow ueventd property_socket:sock_file write;
#line 7
allow ueventd init:unix_stream_socket connectto;
#line 7
#line 7
allow ueventd cold_boot_done_prop:property_service set;
#line 7
#line 7
allow ueventd cold_boot_done_prop:file { getattr open read map };
#line 7
#line 7
#line 1 "system/sepolicy/private/uncrypt.te"
typeattribute uncrypt coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init uncrypt_exec:file { getattr open read execute map };
#line 3
allow init uncrypt:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow uncrypt uncrypt_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init uncrypt:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init uncrypt:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init uncrypt_exec:process uncrypt;
#line 3
#line 3
# Set a property to reboot the device.
#line 6
#line 6
allow uncrypt property_socket:sock_file write;
#line 6
allow uncrypt init:unix_stream_socket connectto;
#line 6
#line 6
allow uncrypt powerctl_prop:property_service set;
#line 6
#line 6
allow uncrypt powerctl_prop:file { getattr open read map };
#line 6
#line 6
#line 1 "system/sepolicy/private/untrusted_app.te"
###
### Untrusted apps.
###
### This file defines the rules for untrusted apps running with
### targetSdkVersion >= 34.
###
### See public/untrusted_app.te for more information about which apps are
### placed in this selinux domain.
###
typeattribute untrusted_app coredomain;
#line 13
typeattribute untrusted_app appdomain;
#line 13
# Label tmpfs objects for all apps.
#line 13
type_transition untrusted_app tmpfs:file appdomain_tmpfs;
#line 13
#line 13
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 13
type untrusted_app_userfaultfd;
#line 13
type_transition untrusted_app untrusted_app:anon_inode untrusted_app_userfaultfd "[userfaultfd]";
#line 13
# Allow domain to create/use userfaultfd anon_inode.
#line 13
allow untrusted_app untrusted_app_userfaultfd:anon_inode { create ioctl read };
#line 13
# Suppress errors generate during bugreport
#line 13
dontaudit su untrusted_app_userfaultfd:anon_inode *;
#line 13
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 13
neverallow { domain -untrusted_app } untrusted_app_userfaultfd:anon_inode *;
#line 13
#line 13
allow untrusted_app appdomain_tmpfs:file { execute getattr map read write };
#line 13
neverallow { untrusted_app -runas_app -shell -simpleperf } { domain -untrusted_app }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 13
neverallow { appdomain -runas_app -shell -simpleperf -untrusted_app } untrusted_app:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 13
# The Android security model guarantees the confidentiality and integrity
#line 13
# of application data and execution state. Ptrace bypasses those
#line 13
# confidentiality guarantees. Disallow ptrace access from system components to
#line 13
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 13
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 13
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 13
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 13
# live lock conditions.
#line 13
neverallow { domain -untrusted_app -crash_dump -runas_app -simpleperf } untrusted_app:process ptrace;
#line 13
#line 14
typeattribute untrusted_app untrusted_app_all;
#line 14
#line 15
typeattribute untrusted_app netdomain;
#line 15
#line 16
typeattribute untrusted_app bluetoothdomain;
#line 16
# Allow webview to access fd shared by sdksandbox for experiments data
# TODO(b/229249719): Will not be supported in Android U
allow untrusted_app sdk_sandbox_data_file:fd use;
allow untrusted_app sdk_sandbox_data_file:file write;
neverallow untrusted_app sdk_sandbox_data_file:file { open create };
#line 1 "system/sepolicy/private/untrusted_app_25.te"
###
### Untrusted_app_25
###
### This file defines the rules for untrusted apps running with
### targetSdkVersion <= 25.
###
### See public/untrusted_app.te for more information about which apps are
### placed in this selinux domain.
###
typeattribute untrusted_app_25 coredomain;
#line 13
typeattribute untrusted_app_25 appdomain;
#line 13
# Label tmpfs objects for all apps.
#line 13
type_transition untrusted_app_25 tmpfs:file appdomain_tmpfs;
#line 13
#line 13
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 13
type untrusted_app_25_userfaultfd;
#line 13
type_transition untrusted_app_25 untrusted_app_25:anon_inode untrusted_app_25_userfaultfd "[userfaultfd]";
#line 13
# Allow domain to create/use userfaultfd anon_inode.
#line 13
allow untrusted_app_25 untrusted_app_25_userfaultfd:anon_inode { create ioctl read };
#line 13
# Suppress errors generate during bugreport
#line 13
dontaudit su untrusted_app_25_userfaultfd:anon_inode *;
#line 13
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 13
neverallow { domain -untrusted_app_25 } untrusted_app_25_userfaultfd:anon_inode *;
#line 13
#line 13
allow untrusted_app_25 appdomain_tmpfs:file { execute getattr map read write };
#line 13
neverallow { untrusted_app_25 -runas_app -shell -simpleperf } { domain -untrusted_app_25 }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 13
neverallow { appdomain -runas_app -shell -simpleperf -untrusted_app_25 } untrusted_app_25:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 13
# The Android security model guarantees the confidentiality and integrity
#line 13
# of application data and execution state. Ptrace bypasses those
#line 13
# confidentiality guarantees. Disallow ptrace access from system components to
#line 13
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 13
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 13
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 13
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 13
# live lock conditions.
#line 13
neverallow { domain -untrusted_app_25 -crash_dump -runas_app -simpleperf } untrusted_app_25:process ptrace;
#line 13
#line 14
typeattribute untrusted_app_25 untrusted_app_all;
#line 14
#line 15
typeattribute untrusted_app_25 netdomain;
#line 15
#line 16
typeattribute untrusted_app_25 bluetoothdomain;
#line 16
# b/35917228 - /proc/misc access
# This will go away in a future Android release
allow untrusted_app_25 proc_misc:file { getattr open read ioctl lock map watch watch_reads };
# Access to /proc/tty/drivers, to allow apps to determine if they
# are running in an emulated environment.
# b/33214085 b/33814662 b/33791054 b/33211769
# https://github.com/strazzere/anti-emulator/blob/master/AntiEmulator/src/diff/strazzere/anti/emulator/FindEmulator.java
# This will go away in a future Android release
allow untrusted_app_25 proc_tty_drivers:file { getattr open read ioctl lock map watch watch_reads };
# Text relocation support for API < 23. This is now disallowed for targetSdkVersion>=Q.
# https://android.googlesource.com/platform/bionic/+/master/android-changes-for-ndk-developers.md#text-relocations-enforced-for-api-level-23
allow untrusted_app_25 { apk_data_file app_data_file asec_public_file }:file execmod;
# The ability to call exec() on files in the apps home directories
# for targetApi<=25. This is also allowed for targetAPIs 26, 27,
# and 28 in untrusted_app_27.te.
allow untrusted_app_25 app_data_file:file execute_no_trans;
auditallow untrusted_app_25 app_data_file:file { execute execute_no_trans };
# The ability to invoke dex2oat. Historically required by ART, now only
# allowed for targetApi<=28 for compat reasons.
allow untrusted_app_25 dex2oat_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# The ability to talk to /dev/ashmem directly. targetApi>=29 must use
# ASharedMemory instead.
allow untrusted_app_25 ashmem_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
auditallow untrusted_app_25 ashmem_device:chr_file open;
# Read /mnt/sdcard symlink.
allow untrusted_app_25 mnt_sdcard_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
# allow sending RTM_GETNEIGH{TBL} messages.
allow untrusted_app_25 self:netlink_route_socket nlmsg_getneigh;
auditallow untrusted_app_25 self:netlink_route_socket nlmsg_getneigh;
# Connect to mdnsd via mdnsd socket.
#line 57
allow untrusted_app_25 mdnsd_socket:sock_file write;
#line 57
allow untrusted_app_25 mdnsd:unix_stream_socket connectto;
#line 57
#line 61
# Allow calling inotify on APKs for backwards compatibility. This is disallowed
# for targetSdkVersion>=34 to remove a sidechannel.
allow untrusted_app_25 apk_data_file:dir { watch watch_reads };
allow untrusted_app_25 apk_data_file:file { watch watch_reads };
#line 70
#line 1 "system/sepolicy/private/untrusted_app_27.te"
###
### Untrusted_27.
###
### This file defines the rules for untrusted apps running with
### 25 < targetSdkVersion <= 28.
###
### See public/untrusted_app.te for more information about which apps are
### placed in this selinux domain.
###
typeattribute untrusted_app_27 coredomain;
#line 13
typeattribute untrusted_app_27 appdomain;
#line 13
# Label tmpfs objects for all apps.
#line 13
type_transition untrusted_app_27 tmpfs:file appdomain_tmpfs;
#line 13
#line 13
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 13
type untrusted_app_27_userfaultfd;
#line 13
type_transition untrusted_app_27 untrusted_app_27:anon_inode untrusted_app_27_userfaultfd "[userfaultfd]";
#line 13
# Allow domain to create/use userfaultfd anon_inode.
#line 13
allow untrusted_app_27 untrusted_app_27_userfaultfd:anon_inode { create ioctl read };
#line 13
# Suppress errors generate during bugreport
#line 13
dontaudit su untrusted_app_27_userfaultfd:anon_inode *;
#line 13
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 13
neverallow { domain -untrusted_app_27 } untrusted_app_27_userfaultfd:anon_inode *;
#line 13
#line 13
allow untrusted_app_27 appdomain_tmpfs:file { execute getattr map read write };
#line 13
neverallow { untrusted_app_27 -runas_app -shell -simpleperf } { domain -untrusted_app_27 }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 13
neverallow { appdomain -runas_app -shell -simpleperf -untrusted_app_27 } untrusted_app_27:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 13
# The Android security model guarantees the confidentiality and integrity
#line 13
# of application data and execution state. Ptrace bypasses those
#line 13
# confidentiality guarantees. Disallow ptrace access from system components to
#line 13
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 13
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 13
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 13
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 13
# live lock conditions.
#line 13
neverallow { domain -untrusted_app_27 -crash_dump -runas_app -simpleperf } untrusted_app_27:process ptrace;
#line 13
#line 14
typeattribute untrusted_app_27 untrusted_app_all;
#line 14
#line 15
typeattribute untrusted_app_27 netdomain;
#line 15
#line 16
typeattribute untrusted_app_27 bluetoothdomain;
#line 16
# Text relocation support for API < 23. This is now disallowed for targetSdkVersion>=Q.
# https://android.googlesource.com/platform/bionic/+/master/android-changes-for-ndk-developers.md#text-relocations-enforced-for-api-level-23
allow untrusted_app_27 { apk_data_file app_data_file asec_public_file }:file execmod;
# The ability to call exec() on files in the apps home directories
# for targetApi 26, 27, and 28.
allow untrusted_app_27 app_data_file:file execute_no_trans;
auditallow untrusted_app_27 app_data_file:file { execute execute_no_trans };
# The ability to invoke dex2oat. Historically required by ART, now only
# allowed for targetApi<=28 for compat reasons.
allow untrusted_app_27 dex2oat_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# The ability to talk to /dev/ashmem directly. targetApi>=29 must use
# ASharedMemory instead.
allow untrusted_app_27 ashmem_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
auditallow untrusted_app_27 ashmem_device:chr_file open;
# Read /mnt/sdcard symlink.
allow untrusted_app_27 mnt_sdcard_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
# allow sending RTM_GETNEIGH{TBL} messages.
allow untrusted_app_27 self:netlink_route_socket nlmsg_getneigh;
auditallow untrusted_app_27 self:netlink_route_socket nlmsg_getneigh;
# Connect to mdnsd via mdnsd socket.
#line 45
allow untrusted_app_27 mdnsd_socket:sock_file write;
#line 45
allow untrusted_app_27 mdnsd:unix_stream_socket connectto;
#line 45
#line 49
# Allow calling inotify on APKs for backwards compatibility. This is disallowed
# for targetSdkVersion>=34 to remove a sidechannel.
allow untrusted_app_27 apk_data_file:dir { watch watch_reads };
allow untrusted_app_27 apk_data_file:file { watch watch_reads };
#line 58
#line 1 "system/sepolicy/private/untrusted_app_29.te"
###
### Untrusted_29.
###
### This file defines the rules for untrusted apps running with
### targetSdkVersion = 29.
###
### See public/untrusted_app.te for more information about which apps are
### placed in this selinux domain.
###
typeattribute untrusted_app_29 coredomain;
#line 13
typeattribute untrusted_app_29 appdomain;
#line 13
# Label tmpfs objects for all apps.
#line 13
type_transition untrusted_app_29 tmpfs:file appdomain_tmpfs;
#line 13
#line 13
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 13
type untrusted_app_29_userfaultfd;
#line 13
type_transition untrusted_app_29 untrusted_app_29:anon_inode untrusted_app_29_userfaultfd "[userfaultfd]";
#line 13
# Allow domain to create/use userfaultfd anon_inode.
#line 13
allow untrusted_app_29 untrusted_app_29_userfaultfd:anon_inode { create ioctl read };
#line 13
# Suppress errors generate during bugreport
#line 13
dontaudit su untrusted_app_29_userfaultfd:anon_inode *;
#line 13
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 13
neverallow { domain -untrusted_app_29 } untrusted_app_29_userfaultfd:anon_inode *;
#line 13
#line 13
allow untrusted_app_29 appdomain_tmpfs:file { execute getattr map read write };
#line 13
neverallow { untrusted_app_29 -runas_app -shell -simpleperf } { domain -untrusted_app_29 }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 13
neverallow { appdomain -runas_app -shell -simpleperf -untrusted_app_29 } untrusted_app_29:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 13
# The Android security model guarantees the confidentiality and integrity
#line 13
# of application data and execution state. Ptrace bypasses those
#line 13
# confidentiality guarantees. Disallow ptrace access from system components to
#line 13
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 13
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 13
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 13
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 13
# live lock conditions.
#line 13
neverallow { domain -untrusted_app_29 -crash_dump -runas_app -simpleperf } untrusted_app_29:process ptrace;
#line 13
#line 14
typeattribute untrusted_app_29 untrusted_app_all;
#line 14
#line 15
typeattribute untrusted_app_29 netdomain;
#line 15
#line 16
typeattribute untrusted_app_29 bluetoothdomain;
#line 16
# allow sending RTM_GETNEIGH{TBL} messages.
allow untrusted_app_29 self:netlink_route_socket nlmsg_getneigh;
auditallow untrusted_app_29 self:netlink_route_socket nlmsg_getneigh;
# Connect to mdnsd via mdnsd socket.
#line 23
allow untrusted_app_29 mdnsd_socket:sock_file write;
#line 23
allow untrusted_app_29 mdnsd:unix_stream_socket connectto;
#line 23
#line 27
# Allow calling inotify on APKs for backwards compatibility. This is disallowed
# for targetSdkVersion>=34 to remove a sidechannel.
allow untrusted_app_29 apk_data_file:dir { watch watch_reads };
allow untrusted_app_29 apk_data_file:file { watch watch_reads };
#line 36
#line 1 "system/sepolicy/private/untrusted_app_30.te"
###
### Untrusted apps.
###
### This file defines the rules for untrusted apps running with
### 29 < targetSdkVersion <= 31.
###
### See public/untrusted_app.te for more information about which apps are
### placed in this selinux domain.
###
### TODO(b/192334803): Merge this policy into untrusted_app_29 when possible
###
typeattribute untrusted_app_30 coredomain;
#line 15
typeattribute untrusted_app_30 appdomain;
#line 15
# Label tmpfs objects for all apps.
#line 15
type_transition untrusted_app_30 tmpfs:file appdomain_tmpfs;
#line 15
#line 15
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 15
type untrusted_app_30_userfaultfd;
#line 15
type_transition untrusted_app_30 untrusted_app_30:anon_inode untrusted_app_30_userfaultfd "[userfaultfd]";
#line 15
# Allow domain to create/use userfaultfd anon_inode.
#line 15
allow untrusted_app_30 untrusted_app_30_userfaultfd:anon_inode { create ioctl read };
#line 15
# Suppress errors generate during bugreport
#line 15
dontaudit su untrusted_app_30_userfaultfd:anon_inode *;
#line 15
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 15
neverallow { domain -untrusted_app_30 } untrusted_app_30_userfaultfd:anon_inode *;
#line 15
#line 15
allow untrusted_app_30 appdomain_tmpfs:file { execute getattr map read write };
#line 15
neverallow { untrusted_app_30 -runas_app -shell -simpleperf } { domain -untrusted_app_30 }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
neverallow { appdomain -runas_app -shell -simpleperf -untrusted_app_30 } untrusted_app_30:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 15
# The Android security model guarantees the confidentiality and integrity
#line 15
# of application data and execution state. Ptrace bypasses those
#line 15
# confidentiality guarantees. Disallow ptrace access from system components to
#line 15
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 15
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 15
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 15
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 15
# live lock conditions.
#line 15
neverallow { domain -untrusted_app_30 -crash_dump -runas_app -simpleperf } untrusted_app_30:process ptrace;
#line 15
#line 16
typeattribute untrusted_app_30 untrusted_app_all;
#line 16
#line 17
typeattribute untrusted_app_30 netdomain;
#line 17
#line 18
typeattribute untrusted_app_30 bluetoothdomain;
#line 18
# allow sending RTM_GETNEIGH{TBL} messages.
allow untrusted_app_30 self:netlink_route_socket nlmsg_getneigh;
auditallow untrusted_app_30 self:netlink_route_socket nlmsg_getneigh;
# Connect to mdnsd via mdnsd socket.
#line 25
allow untrusted_app_30 mdnsd_socket:sock_file write;
#line 25
allow untrusted_app_30 mdnsd:unix_stream_socket connectto;
#line 25
#line 29
# Allow calling inotify on APKs for backwards compatibility. This is disallowed
# for targetSdkVersion>=34 to remove a sidechannel.
allow untrusted_app_30 apk_data_file:dir { watch watch_reads };
allow untrusted_app_30 apk_data_file:file { watch watch_reads };
#line 38
#line 1 "system/sepolicy/private/untrusted_app_32.te"
###
### Untrusted apps.
###
### This file defines the rules for untrusted apps running with
### 31 < targetSdkVersion <= 33.
###
### See public/untrusted_app.te for more information about which apps are
### placed in this selinux domain.
###
typeattribute untrusted_app_32 coredomain;
#line 13
typeattribute untrusted_app_32 appdomain;
#line 13
# Label tmpfs objects for all apps.
#line 13
type_transition untrusted_app_32 tmpfs:file appdomain_tmpfs;
#line 13
#line 13
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 13
type untrusted_app_32_userfaultfd;
#line 13
type_transition untrusted_app_32 untrusted_app_32:anon_inode untrusted_app_32_userfaultfd "[userfaultfd]";
#line 13
# Allow domain to create/use userfaultfd anon_inode.
#line 13
allow untrusted_app_32 untrusted_app_32_userfaultfd:anon_inode { create ioctl read };
#line 13
# Suppress errors generate during bugreport
#line 13
dontaudit su untrusted_app_32_userfaultfd:anon_inode *;
#line 13
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 13
neverallow { domain -untrusted_app_32 } untrusted_app_32_userfaultfd:anon_inode *;
#line 13
#line 13
allow untrusted_app_32 appdomain_tmpfs:file { execute getattr map read write };
#line 13
neverallow { untrusted_app_32 -runas_app -shell -simpleperf } { domain -untrusted_app_32 }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 13
neverallow { appdomain -runas_app -shell -simpleperf -untrusted_app_32 } untrusted_app_32:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 13
# The Android security model guarantees the confidentiality and integrity
#line 13
# of application data and execution state. Ptrace bypasses those
#line 13
# confidentiality guarantees. Disallow ptrace access from system components to
#line 13
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 13
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 13
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 13
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 13
# live lock conditions.
#line 13
neverallow { domain -untrusted_app_32 -crash_dump -runas_app -simpleperf } untrusted_app_32:process ptrace;
#line 13
#line 14
typeattribute untrusted_app_32 untrusted_app_all;
#line 14
#line 15
typeattribute untrusted_app_32 netdomain;
#line 15
#line 16
typeattribute untrusted_app_32 bluetoothdomain;
#line 16
# Allow webview to access fd shared by sdksandbox for experiments data
# TODO(b/229249719): Will not be supported in Android U
allow untrusted_app_32 sdk_sandbox_data_file:fd use;
allow untrusted_app_32 sdk_sandbox_data_file:file write;
neverallow untrusted_app_32 sdk_sandbox_data_file:file { open create };
# Connect to mdnsd via mdnsd socket.
#line 26
allow untrusted_app_32 mdnsd_socket:sock_file write;
#line 26
allow untrusted_app_32 mdnsd:unix_stream_socket connectto;
#line 26
#line 30
# Allow calling inotify on APKs for backwards compatibility. This is disallowed
# for targetSdkVersion>=34 to remove a sidechannel.
allow untrusted_app_32 apk_data_file:dir { watch watch_reads };
allow untrusted_app_32 apk_data_file:file { watch watch_reads };
#line 39
#line 1 "system/sepolicy/private/untrusted_app_all.te"
###
### Untrusted_app_all.
###
### This file defines the rules shared by all untrusted app domains except
### ephemeral_app for instant apps and isolated_app (which has a reduced
### permission set).
### Apps are labeled based on mac_permissions.xml (maps signer and
### optionally package name to seinfo value) and seapp_contexts (maps UID
### and optionally seinfo value to domain for process and type for data
### directory). The untrusted_app_all attribute is assigned to all default
### seapp_contexts for any app with UID between APP_AID (10000)
### and AID_ISOLATED_START (99000) if the app has no specific seinfo
### value as determined from mac_permissions.xml. In current AOSP, this
### attribute is assigned to all non-system apps as well as to any system apps
### that are not signed by the platform key. To move
### a system app into a specific domain, add a signer entry for it to
### mac_permissions.xml and assign it one of the pre-existing seinfo values
### or define and use a new seinfo value in both mac_permissions.xml and
### seapp_contexts.
###
### Note that rules that should apply to all untrusted apps must be in app.te or also
### added to ephemeral_app.te.
# Some apps ship with shared libraries and binaries that they write out
# to their sandbox directory and then execute.
allow untrusted_app_all privapp_data_file:file { { getattr open read ioctl lock map watch watch_reads } execute };
allow untrusted_app_all app_data_file:file { { getattr open read ioctl lock map watch watch_reads } execute };
auditallow untrusted_app_all app_data_file:file execute;
# Chrome Crashpad uses the the dynamic linker to load native executables
# from an APK (b/112050209, crbug.com/928422)
allow untrusted_app_all system_linker_exec:file execute_no_trans;
# Follow priv-app symlinks. This is used for dynamite functionality.
allow untrusted_app_all privapp_data_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
# Allow handling of less common filesystem objects
allow untrusted_app_all app_data_file:{ lnk_file sock_file fifo_file } { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow loading and deleting executable shared libraries
# within an application home directory. Such shared libraries would be
# created by things like renderscript or via other mechanisms.
allow untrusted_app_all app_exec_data_file:file { { getattr open read ioctl lock map watch watch_reads } execute unlink };
# ASEC
allow untrusted_app_all asec_apk_file:file { getattr open read ioctl lock map watch watch_reads };
allow untrusted_app_all asec_apk_file:dir { open getattr read search ioctl lock watch watch_reads };
# Execute libs in asec containers.
allow untrusted_app_all asec_public_file:file { execute };
# Used by Finsky / Android "Verify Apps" functionality when
# running "adb install foo.apk".
# TODO: Long term, we don't want apps probing into shell data files.
# Figure out a way to remove these rules.
allow untrusted_app_all shell_data_file:file { getattr open read ioctl lock map watch watch_reads };
allow untrusted_app_all shell_data_file:dir { open getattr read search ioctl lock watch watch_reads };
# Allow traceur to pass file descriptors through a content provider to untrusted apps
# for the purpose of sharing files through e.g. gmail
allow untrusted_app_all trace_data_file:file { getattr read };
# untrusted apps should not be able to open trace data files, they should depend
# upon traceur to pass a file descriptor
neverallow untrusted_app_all trace_data_file:dir *;
neverallow untrusted_app_all trace_data_file:file { { append create link unlink relabelfrom rename setattr write } open };
# neverallow untrusted apps accessing debugfs_tracing
neverallow untrusted_app_all debugfs_tracing:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Allow to read staged apks.
allow untrusted_app_all { apk_tmp_file apk_private_tmp_file }:file {read getattr};
# Read and write system app data files passed over Binder.
# Motivating case was /data/data/com.android.settings/cache/*.jpg for
# cropping or taking user photos.
allow untrusted_app_all system_app_data_file:file { read write getattr };
#
# Rules migrated from old app domains coalesced into untrusted_app.
# This includes what used to be media_app, shared_app, and release_app.
#
# Access to /data/media.
allow untrusted_app_all media_rw_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow untrusted_app_all media_rw_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# allow cts to query all services
allow untrusted_app_all servicemanager:service_manager list;
allow untrusted_app_all audioserver_service:service_manager find;
allow untrusted_app_all cameraserver_service:service_manager find;
allow untrusted_app_all drmserver_service:service_manager find;
allow untrusted_app_all mediaserver_service:service_manager find;
allow untrusted_app_all mediaextractor_service:service_manager find;
allow untrusted_app_all mediametrics_service:service_manager find;
allow untrusted_app_all mediadrmserver_service:service_manager find;
allow untrusted_app_all nfc_service:service_manager find;
allow untrusted_app_all radio_service:service_manager find;
allow untrusted_app_all app_api_service:service_manager find;
allow untrusted_app_all vr_manager_service:service_manager find;
# gdbserver for ndk-gdb ptrace attaches to app process.
allow untrusted_app_all self:process ptrace;
# Android Studio Instant Run has the application connect to a
# runas_app socket listening in the abstract namespace.
# https://developer.android.com/studio/run/
# b/123297648
allow untrusted_app_all runas_app:unix_stream_socket connectto;
# Untrusted apps need to be able to send a SIGCHLD to runas_app
# when running under a debugger (b/123612207)
allow untrusted_app_all runas_app:process sigchld;
# Cts: HwRngTest
allow untrusted_app_all sysfs_hwrandom:dir search;
allow untrusted_app_all sysfs_hwrandom:file { getattr open read ioctl lock map watch watch_reads };
# Allow apps to view preloaded media content
allow untrusted_app_all preloads_media_file:dir { open getattr read search ioctl lock watch watch_reads };
allow untrusted_app_all preloads_media_file:file { getattr open read ioctl lock map watch watch_reads };
allow untrusted_app_all preloads_data_file:dir search;
# Allow untrusted apps read / execute access to /vendor/app for there can
# be pre-installed vendor apps that package a library within themselves.
# TODO (b/37784178) Consider creating a special type for /vendor/app installed
# apps.
allow untrusted_app_all vendor_app_file:dir { open getattr read search };
allow untrusted_app_all vendor_app_file:file { { getattr open read ioctl lock map watch watch_reads } execute };
allow untrusted_app_all vendor_app_file:lnk_file { open getattr read };
# allow untrusted apps to use UDP sockets provided by the system server but not
# modify them other than to connect
allow untrusted_app_all system_server:udp_socket {
connect getattr read recvfrom sendto write getopt setopt };
# Allow the renderscript compiler to be run.
#line 138
# Allow the necessary permissions.
#line 138
#line 138
# Old domain may exec the file and transition to the new domain.
#line 138
allow untrusted_app_all rs_exec:file { getattr open read execute map };
#line 138
allow untrusted_app_all rs:process transition;
#line 138
# New domain is entered by executing the file.
#line 138
allow rs rs_exec:file { entrypoint open read execute getattr map };
#line 138
# New domain can send SIGCHLD to its caller.
#line 138
allow rs untrusted_app_all:process sigchld;
#line 138
# Enable AT_SECURE, i.e. libc secure mode.
#line 138
dontaudit untrusted_app_all rs:process noatsecure;
#line 138
# XXX dontaudit candidate but requires further study.
#line 138
allow untrusted_app_all rs:process { siginh rlimitinh };
#line 138
#line 138
# Make the transition occur by default.
#line 138
type_transition untrusted_app_all rs_exec:process rs;
#line 138
# suppress denials caused by debugfs_tracing
dontaudit untrusted_app_all debugfs_tracing:file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
# This is allowed for targetSdkVersion <= 25 but disallowed on newer versions.
dontaudit untrusted_app_all net_dns_prop:file read;
# These have been disallowed since Android O.
# For P, we assume that apps are safely handling the denial.
dontaudit untrusted_app_all {
proc_stat
proc_uptime
proc_vmstat
proc_zoneinfo
}:file read;
# Allow the allocation and use of ptys
# Used by: https://play.google.com/store/apps/details?id=jackpal.androidterm
#line 157
# Each domain gets a unique devpts type.
#line 157
type untrusted_app_all_devpts, fs_type;
#line 157
# Label the pty with the unique type when created.
#line 157
type_transition untrusted_app_all devpts:chr_file untrusted_app_all_devpts;
#line 157
# Allow use of the pty after creation.
#line 157
allow untrusted_app_all untrusted_app_all_devpts:chr_file { open getattr read write ioctl };
#line 157
allowxperm untrusted_app_all untrusted_app_all_devpts:chr_file ioctl {
#line 157
0x00005411 0x00005451 0x00005450 0x00005401 0x00005402 0x00005403 0x00005404 0x00005413 0x00005414
#line 157
0x0000540e 0x0000540b 0x00005410 0x0000540f
#line 157
};
#line 157
# TIOCSTI is only ever used for exploits. Block it.
#line 157
# b/33073072, b/7530569
#line 157
# http://www.openwall.com/lists/oss-security/2016/09/26/14
#line 157
neverallowxperm * untrusted_app_all_devpts:chr_file ioctl 0x00005412;
#line 157
# Note: devpts:dir search and ptmx_device:chr_file rw_file_perms
#line 157
# allowed to everyone via domain.te.
#line 157
# Allow access to kcov via its ioctl interface for coverage
# guided kernel fuzzing.
#line 164
# Allow running a VM for test/demo purposes. Note that access to the
# service is still guarded with the
# `android.permission.MANAGE_VIRTUAL_MACHINE` permission. The
# protection level of the permission is
# `signature|privileged|development` so that it can only be granted to
# either platform-key signed apps, privileged apps, or test-only apps
# having `android:testOnly="true"` in their manifest.
#line 173
# Transition to virtualizationmanager when the client executes it.
#line 173
#line 173
# Allow the necessary permissions.
#line 173
#line 173
# Old domain may exec the file and transition to the new domain.
#line 173
allow untrusted_app_all virtualizationmanager_exec:file { getattr open read execute map };
#line 173
allow untrusted_app_all virtualizationmanager:process transition;
#line 173
# New domain is entered by executing the file.
#line 173
allow virtualizationmanager virtualizationmanager_exec:file { entrypoint open read execute getattr map };
#line 173
# New domain can send SIGCHLD to its caller.
#line 173
allow virtualizationmanager untrusted_app_all:process sigchld;
#line 173
# Enable AT_SECURE, i.e. libc secure mode.
#line 173
dontaudit untrusted_app_all virtualizationmanager:process noatsecure;
#line 173
# XXX dontaudit candidate but requires further study.
#line 173
allow untrusted_app_all virtualizationmanager:process { siginh rlimitinh };
#line 173
#line 173
# Make the transition occur by default.
#line 173
type_transition untrusted_app_all virtualizationmanager_exec:process virtualizationmanager;
#line 173
#line 173
# Allow virtualizationmanager to communicate over UDS with the client.
#line 173
allow { virtualizationmanager crosvm } untrusted_app_all:unix_stream_socket { ioctl getattr read write };
#line 173
# Let the client pass file descriptors to virtualizationmanager and on to crosvm.
#line 173
allow { virtualizationmanager crosvm } untrusted_app_all:fd use;
#line 173
# Let the client use file descriptors created by virtualizationmanager.
#line 173
allow untrusted_app_all virtualizationmanager:fd use;
#line 173
# Allow piping console log to the client
#line 173
allow { virtualizationmanager crosvm } untrusted_app_all:fifo_file { ioctl getattr read write };
#line 173
# Allow client to read/write vsock created by virtualizationmanager to communicate with the VM
#line 173
# that it created. Notice that we do not grant permission to create a vsock;
#line 173
# the client can only connect to VMs that it owns.
#line 173
allow untrusted_app_all virtualizationmanager:vsock_socket { getattr getopt read write };
#line 173
# Allow client to inspect hypervisor capabilities
#line 173
#line 173
allow untrusted_app_all hypervisor_prop:file { getattr open read map };
#line 173
#line 173
# Allow client to read (but not open) the crashdump provided by virtualizationmanager
#line 173
allow untrusted_app_all virtualizationservice_data_file:file { getattr read };
#line 173
#line 179
#line 1 "system/sepolicy/private/update_engine.te"
typeattribute update_engine coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init update_engine_exec:file { getattr open read execute map };
#line 3
allow init update_engine:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow update_engine update_engine_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init update_engine:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init update_engine:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init update_engine_exec:process update_engine;
#line 3
#line 3
;
# Allow to talk to gsid.
allow update_engine gsi_service:service_manager find;
#line 7
# Call the server domain and optionally transfer references to it.
#line 7
allow update_engine gsid:binder { call transfer };
#line 7
# Allow the serverdomain to transfer references to the client on the reply.
#line 7
allow gsid update_engine:binder transfer;
#line 7
# Receive and use open files from the server.
#line 7
allow update_engine gsid:fd use;
#line 7
# Allow to start gsid service.
#line 10
#line 10
allow update_engine property_socket:sock_file write;
#line 10
allow update_engine init:unix_stream_socket connectto;
#line 10
#line 10
allow update_engine ctl_gsid_prop:property_service set;
#line 10
#line 10
allow update_engine ctl_gsid_prop:file { getattr open read map };
#line 10
#line 10
# Allow to start snapuserd for dm-user communication.
#line 13
#line 13
allow update_engine property_socket:sock_file write;
#line 13
allow update_engine init:unix_stream_socket connectto;
#line 13
#line 13
allow update_engine ctl_snapuserd_prop:property_service set;
#line 13
#line 13
allow update_engine ctl_snapuserd_prop:file { getattr open read map };
#line 13
#line 13
# Allow to set the OTA related properties, e.g. ota.warm_reset.
#line 16
#line 16
allow update_engine property_socket:sock_file write;
#line 16
allow update_engine init:unix_stream_socket connectto;
#line 16
#line 16
allow update_engine ota_prop:property_service set;
#line 16
#line 16
allow update_engine ota_prop:file { getattr open read map };
#line 16
#line 16
#line 17
allow update_engine ota_build_prop:file { getattr open read map };
#line 17
# Allow to get the DSU status
#line 20
allow update_engine gsid_prop:file { getattr open read map };
#line 20
# Allow update_engine to call the callback function provided by GKI update hook.
#line 23
# Call the server domain and optionally transfer references to it.
#line 23
allow update_engine gki_apex_prepostinstall:binder { call transfer };
#line 23
# Allow the serverdomain to transfer references to the client on the reply.
#line 23
allow gki_apex_prepostinstall update_engine:binder transfer;
#line 23
# Receive and use open files from the server.
#line 23
allow update_engine gki_apex_prepostinstall:fd use;
#line 23
# Allow update_engine to call the callback function by settings app
# for the kernel update triggered using 16k developer option
#line 27
# Call the server domain and optionally transfer references to it.
#line 27
allow update_engine system_app:binder { call transfer };
#line 27
# Allow the serverdomain to transfer references to the client on the reply.
#line 27
allow system_app update_engine:binder transfer;
#line 27
# Receive and use open files from the server.
#line 27
allow update_engine system_app:fd use;
#line 27
# Allow to communicate with the snapuserd service, for dm-user snapshots.
allow update_engine snapuserd:unix_stream_socket connectto;
allow update_engine snapuserd_socket:sock_file write;
#line 32
allow update_engine snapuserd_prop:file { getattr open read map };
#line 32
# Allow to communicate with apexd for calculating and reserving space for
# capex decompression
allow update_engine apex_service:service_manager find;
#line 37
# Call the server domain and optionally transfer references to it.
#line 37
allow update_engine apexd:binder { call transfer };
#line 37
# Allow the serverdomain to transfer references to the client on the reply.
#line 37
allow apexd update_engine:binder transfer;
#line 37
# Receive and use open files from the server.
#line 37
allow update_engine apexd:fd use;
#line 37
# let this domain use the hal service
#line 40
# Call the servicemanager and transfer references to it.
#line 40
allow update_engine servicemanager:binder { call transfer };
#line 40
# Allow servicemanager to send out callbacks
#line 40
allow servicemanager update_engine:binder { call transfer };
#line 40
# servicemanager performs getpidcon on clients.
#line 40
allow servicemanager update_engine:dir search;
#line 40
allow servicemanager update_engine:file { read open };
#line 40
allow servicemanager update_engine:process getattr;
#line 40
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 40
# all domains in domain.te.
#line 40
#line 41
typeattribute update_engine halclientdomain;
#line 41
typeattribute update_engine hal_bootctl_client;
#line 41
#line 41
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 41
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 41
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 41
#line 41
typeattribute update_engine hal_bootctl;
#line 41
# Find passthrough HAL implementations
#line 41
allow hal_bootctl system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 41
allow hal_bootctl vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 41
allow hal_bootctl vendor_file:file { read open getattr execute map };
#line 41
#line 41
#line 1 "system/sepolicy/private/update_engine_common.te"
# type_transition must be private policy the domain_trans rules could stay
# public, but conceptually should go with this
# The postinstall program is run by update_engine_common and must be tagged
# with postinstall_exec in the new filesystem.
# TODO Have build system attempt to verify this
#line 6
# Allow the necessary permissions.
#line 6
#line 6
# Old domain may exec the file and transition to the new domain.
#line 6
allow update_engine_common postinstall_exec:file { getattr open read execute map };
#line 6
allow update_engine_common postinstall:process transition;
#line 6
# New domain is entered by executing the file.
#line 6
allow postinstall postinstall_exec:file { entrypoint open read execute getattr map };
#line 6
# New domain can send SIGCHLD to its caller.
#line 6
allow postinstall update_engine_common:process sigchld;
#line 6
# Enable AT_SECURE, i.e. libc secure mode.
#line 6
dontaudit update_engine_common postinstall:process noatsecure;
#line 6
# XXX dontaudit candidate but requires further study.
#line 6
allow update_engine_common postinstall:process { siginh rlimitinh };
#line 6
#line 6
# Make the transition occur by default.
#line 6
type_transition update_engine_common postinstall_exec:process postinstall;
#line 6
# Vendor directories can have the transition as well during OTA. This is caused
# by update_engine execing scripts in vendor to perform any update tasks needed
# there.
#line 11
# Allow the necessary permissions.
#line 11
#line 11
# Old domain may exec the file and transition to the new domain.
#line 11
allow update_engine_common postinstall_file:file { getattr open read execute map };
#line 11
allow update_engine_common postinstall:process transition;
#line 11
# New domain is entered by executing the file.
#line 11
allow postinstall postinstall_file:file { entrypoint open read execute getattr map };
#line 11
# New domain can send SIGCHLD to its caller.
#line 11
allow postinstall update_engine_common:process sigchld;
#line 11
# Enable AT_SECURE, i.e. libc secure mode.
#line 11
dontaudit update_engine_common postinstall:process noatsecure;
#line 11
# XXX dontaudit candidate but requires further study.
#line 11
allow update_engine_common postinstall:process { siginh rlimitinh };
#line 11
#line 11
# Make the transition occur by default.
#line 11
type_transition update_engine_common postinstall_file:process postinstall;
#line 11
allow update_engine_common labeledfs:filesystem { mount unmount relabelfrom };
#line 1 "system/sepolicy/private/update_verifier.te"
typeattribute update_verifier coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init update_verifier_exec:file { getattr open read execute map };
#line 3
allow init update_verifier:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow update_verifier update_verifier_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init update_verifier:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init update_verifier:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init update_verifier_exec:process update_verifier;
#line 3
#line 3
# Allow update_verifier to reboot the device.
#line 6
#line 6
allow update_verifier property_socket:sock_file write;
#line 6
allow update_verifier init:unix_stream_socket connectto;
#line 6
#line 6
allow update_verifier powerctl_prop:property_service set;
#line 6
#line 6
allow update_verifier powerctl_prop:file { getattr open read map };
#line 6
#line 6
# Allow to set the OTA related properties e.g. ota.warm_reset.
#line 9
#line 9
allow update_verifier property_socket:sock_file write;
#line 9
allow update_verifier init:unix_stream_socket connectto;
#line 9
#line 9
allow update_verifier ota_prop:property_service set;
#line 9
#line 9
allow update_verifier ota_prop:file { getattr open read map };
#line 9
#line 9
# allow update_verifier to connect to snapuserd daemon
allow update_verifier snapuserd_socket:sock_file write;
allow update_verifier snapuserd:unix_stream_socket connectto;
# virtual a/b properties
#line 16
allow update_verifier virtual_ab_prop:file { getattr open read map };
#line 16
#line 1 "system/sepolicy/private/uprobestats.te"
type uprobestats, domain, coredomain;
typeattribute uprobestats bpfdomain;
type uprobestats_exec, system_file_type, exec_type, file_type;
# Allow init to start uprobestats.
#line 8
#line 8
# Allow the necessary permissions.
#line 8
#line 8
# Old domain may exec the file and transition to the new domain.
#line 8
allow init uprobestats_exec:file { getattr open read execute map };
#line 8
allow init uprobestats:process transition;
#line 8
# New domain is entered by executing the file.
#line 8
allow uprobestats uprobestats_exec:file { entrypoint open read execute getattr map };
#line 8
# New domain can send SIGCHLD to its caller.
#line 8
#line 8
# Enable AT_SECURE, i.e. libc secure mode.
#line 8
dontaudit init uprobestats:process noatsecure;
#line 8
# XXX dontaudit candidate but requires further study.
#line 8
allow init uprobestats:process { siginh rlimitinh };
#line 8
#line 8
# Make the transition occur by default.
#line 8
type_transition init uprobestats_exec:process uprobestats;
#line 8
#line 8
allow uprobestats fs_bpf_uprobestats:file { read write };
allow uprobestats fs_bpf_uprobestats:dir search;
allow uprobestats bpfloader:bpf { map_read map_write prog_run };
allow uprobestats self:capability2 perfmon;
allow uprobestats self:perf_event { cpu open write };
allow uprobestats sysfs_uprobe:file { open read };
allow uprobestats sysfs_uprobe:dir { search };
# Allow uprobestats to popen oatdump.
allow uprobestats oatdump_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Allow uprobestats to write atoms to statsd
#line 22
allow uprobestats statsdw_socket:sock_file write;
#line 22
allow uprobestats statsd:unix_dgram_socket sendto;
#line 22
# For registration with system server as a process observer.
#line 25
# Call the servicemanager and transfer references to it.
#line 25
allow uprobestats servicemanager:binder { call transfer };
#line 25
# Allow servicemanager to send out callbacks
#line 25
allow servicemanager uprobestats:binder { call transfer };
#line 25
# servicemanager performs getpidcon on clients.
#line 25
allow servicemanager uprobestats:dir search;
#line 25
allow servicemanager uprobestats:file { read open };
#line 25
allow servicemanager uprobestats:process getattr;
#line 25
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 25
# all domains in domain.te.
#line 25
allow uprobestats activity_service:service_manager find;
#line 27
# Call the server domain and optionally transfer references to it.
#line 27
allow uprobestats system_server:binder { call transfer };
#line 27
# Allow the serverdomain to transfer references to the client on the reply.
#line 27
allow system_server uprobestats:binder transfer;
#line 27
# Receive and use open files from the server.
#line 27
allow uprobestats system_server:fd use;
#line 27
;
# Allow uprobestats to talk to native package manager
allow uprobestats package_native_service:service_manager find;
# Allow uprobestats to scan /proc/<pid>/cmdline.
#line 33
allow uprobestats { domain -appdomain }:dir { open getattr read search ioctl lock watch watch_reads };
#line 33
allow uprobestats { domain -appdomain }:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 33
# Allow uprobestats to manage its own config files.
allow uprobestats uprobestats_configs_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow uprobestats uprobestats_configs_data_file:file { { getattr open read ioctl lock map watch watch_reads } unlink };
#line 1 "system/sepolicy/private/usbd.te"
typeattribute usbd coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init usbd_exec:file { getattr open read execute map };
#line 3
allow init usbd:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow usbd usbd_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init usbd:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init usbd:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init usbd_exec:process usbd;
#line 3
#line 3
# Access usb gadget hal
#line 6
typeattribute usbd halclientdomain;
#line 6
typeattribute usbd hal_usb_gadget_client;
#line 6
#line 6
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 6
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 6
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 6
#line 6
typeattribute usbd hal_usb_gadget;
#line 6
# Find passthrough HAL implementations
#line 6
allow hal_usb_gadget system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 6
allow hal_usb_gadget vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 6
allow hal_usb_gadget vendor_file:file { read open getattr execute map };
#line 6
#line 6
# Access persist.sys.usb.config
#line 9
allow usbd system_prop:file { getattr open read map };
#line 9
# start adbd during boot if adb is enabled
#line 12
#line 12
allow usbd property_socket:sock_file write;
#line 12
allow usbd init:unix_stream_socket connectto;
#line 12
#line 12
allow usbd ctl_default_prop:property_service set;
#line 12
#line 12
allow usbd ctl_default_prop:file { getattr open read map };
#line 12
#line 12
# Start/stop adbd via ctl.start adbd
#line 15
#line 15
allow usbd property_socket:sock_file write;
#line 15
allow usbd init:unix_stream_socket connectto;
#line 15
#line 15
allow usbd ctl_adbd_prop:property_service set;
#line 15
#line 15
allow usbd ctl_adbd_prop:file { getattr open read map };
#line 15
#line 15
#line 1 "system/sepolicy/private/vdc.te"
typeattribute vdc coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init vdc_exec:file { getattr open read execute map };
#line 3
allow init vdc:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow vdc vdc_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init vdc:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init vdc:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init vdc_exec:process vdc;
#line 3
#line 3
# Allow stdin/out back to vehicle_binding_util
allow vdc vehicle_binding_util:fd use;
#line 1 "system/sepolicy/private/vehicle_binding_util.te"
# vehicle binding util startup application
type vehicle_binding_util, domain, coredomain;
# allow init to start vehicle_binding_util
type vehicle_binding_util_exec, exec_type, file_type, system_file_type;
#line 6
#line 6
# Allow the necessary permissions.
#line 6
#line 6
# Old domain may exec the file and transition to the new domain.
#line 6
allow init vehicle_binding_util_exec:file { getattr open read execute map };
#line 6
allow init vehicle_binding_util:process transition;
#line 6
# New domain is entered by executing the file.
#line 6
allow vehicle_binding_util vehicle_binding_util_exec:file { entrypoint open read execute getattr map };
#line 6
# New domain can send SIGCHLD to its caller.
#line 6
#line 6
# Enable AT_SECURE, i.e. libc secure mode.
#line 6
dontaudit init vehicle_binding_util:process noatsecure;
#line 6
# XXX dontaudit candidate but requires further study.
#line 6
allow init vehicle_binding_util:process { siginh rlimitinh };
#line 6
#line 6
# Make the transition occur by default.
#line 6
type_transition init vehicle_binding_util_exec:process vehicle_binding_util;
#line 6
#line 6
# allow writing to kmsg during boot
allow vehicle_binding_util kmsg_device:chr_file { getattr { open append write lock map } };
# allow reading the binding property from HIDL VHAL.
#line 12
# Call the hwservicemanager and transfer references to it.
#line 12
allow vehicle_binding_util hwservicemanager:binder { call transfer };
#line 12
# Allow hwservicemanager to send out callbacks
#line 12
allow hwservicemanager vehicle_binding_util:binder { call transfer };
#line 12
# hwservicemanager performs getpidcon on clients.
#line 12
allow hwservicemanager vehicle_binding_util:dir search;
#line 12
allow hwservicemanager vehicle_binding_util:file { read open map };
#line 12
allow hwservicemanager vehicle_binding_util:process getattr;
#line 12
# rw access to /dev/hwbinder and /dev/ashmem is presently granted to
#line 12
# all domains in domain.te.
#line 12
# allow reading the binding property from AIDL VHAL.
#line 14
# Call the servicemanager and transfer references to it.
#line 14
allow vehicle_binding_util servicemanager:binder { call transfer };
#line 14
# Allow servicemanager to send out callbacks
#line 14
allow servicemanager vehicle_binding_util:binder { call transfer };
#line 14
# servicemanager performs getpidcon on clients.
#line 14
allow servicemanager vehicle_binding_util:dir search;
#line 14
allow servicemanager vehicle_binding_util:file { read open };
#line 14
allow servicemanager vehicle_binding_util:process getattr;
#line 14
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 14
# all domains in domain.te.
#line 14
#line 15
typeattribute vehicle_binding_util halclientdomain;
#line 15
typeattribute vehicle_binding_util hal_vehicle_client;
#line 15
#line 15
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 15
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 15
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 15
#line 15
typeattribute vehicle_binding_util hal_vehicle;
#line 15
# Find passthrough HAL implementations
#line 15
allow hal_vehicle system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 15
allow hal_vehicle vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 15
allow hal_vehicle vendor_file:file { read open getattr execute map };
#line 15
#line 15
# allow executing vdc
#line 18
# Allow the necessary permissions.
#line 18
#line 18
# Old domain may exec the file and transition to the new domain.
#line 18
allow vehicle_binding_util vdc_exec:file { getattr open read execute map };
#line 18
allow vehicle_binding_util vdc:process transition;
#line 18
# New domain is entered by executing the file.
#line 18
allow vdc vdc_exec:file { entrypoint open read execute getattr map };
#line 18
# New domain can send SIGCHLD to its caller.
#line 18
allow vdc vehicle_binding_util:process sigchld;
#line 18
# Enable AT_SECURE, i.e. libc secure mode.
#line 18
dontaudit vehicle_binding_util vdc:process noatsecure;
#line 18
# XXX dontaudit candidate but requires further study.
#line 18
allow vehicle_binding_util vdc:process { siginh rlimitinh };
#line 18
#line 18
# Make the transition occur by default.
#line 18
type_transition vehicle_binding_util vdc_exec:process vdc;
#line 18
# devpts is needed to redirect output from vdc
allow vehicle_binding_util devpts:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
#line 1 "system/sepolicy/private/vendor_init.te"
# Creating files on sysfs is impossible so this isn't a threat
# Sometimes we have to write to non-existent files to avoid conditional
# init behavior. See b/35303861 for an example.
dontaudit vendor_init sysfs:dir write;
# TODO(b/140259336) We want to remove vendor_init in the long term but allow for now
allow vendor_init system_data_root_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
# Let vendor_init set service.adb.tcp.port.
#line 10
#line 10
allow vendor_init property_socket:sock_file write;
#line 10
allow vendor_init init:unix_stream_socket connectto;
#line 10
#line 10
allow vendor_init adbd_config_prop:property_service set;
#line 10
#line 10
allow vendor_init adbd_config_prop:file { getattr open read map };
#line 10
#line 10
# Let vendor_init react to AVF device config changes
#line 13
allow vendor_init device_config_virtualization_framework_native_prop:file { getattr open read map };
#line 13
# Let vendor_init use apex.<name>.ready to start services from vendor APEX
#line 16
allow vendor_init apex_ready_prop:file { getattr open read map };
#line 16
# chown/chmod on devices, e.g. /dev/ttyHS0
allow vendor_init {
dev_type
-keychord_device
-vm_manager_device_type
-port_device
-lowpan_device
-hw_random_device
}:chr_file setattr;
#line 34 "system/sepolicy/private/vfio_handler.te"
# is_flag_enabled(RELEASE_AVF_ENABLE_DEVICE_ASSIGNMENT)
#line 1 "system/sepolicy/private/viewcompiler.te"
# viewcompiler
type viewcompiler, domain, coredomain, mlstrustedsubject;
type viewcompiler_exec, system_file_type, exec_type, file_type;
type viewcompiler_tmpfs, file_type;
# Reading an APK opens a ZipArchive, which unpack to tmpfs.
# Use tmpfs_domain() which will give tmpfs files created by viewcompiler their
# own label, which differs from other labels created by other processes.
# This allows to distinguish in policy files created by viewcompiler vs other
# processes.
#line 11
type_transition viewcompiler tmpfs:file viewcompiler_tmpfs;
#line 11
allow viewcompiler viewcompiler_tmpfs:file { read write getattr map };
#line 11
allow viewcompiler installd:fd use;
# Include write permission for app data files so viewcompiler can generate
# compiled layout dex files
allow viewcompiler app_data_file:file { getattr write };
# Allow the view compiler to read resources from the apps APK.
allow viewcompiler apk_data_file:file { read map };
# priv-apps are moving to a world where they can only execute
# signed code. Make sure viewcompiler never can write to privapp
# directories to avoid introducing unsigned executable code
neverallow viewcompiler privapp_data_file:file { append create link unlink relabelfrom rename setattr write };
#line 1 "system/sepolicy/private/virtual_camera.te"
# virtual_camera - virtual camera daemon
type virtual_camera, domain, coredomain;
type virtual_camera_exec, system_file_type, exec_type, file_type;
#line 6
#line 6
# Allow the necessary permissions.
#line 6
#line 6
# Old domain may exec the file and transition to the new domain.
#line 6
allow init virtual_camera_exec:file { getattr open read execute map };
#line 6
allow init virtual_camera:process transition;
#line 6
# New domain is entered by executing the file.
#line 6
allow virtual_camera virtual_camera_exec:file { entrypoint open read execute getattr map };
#line 6
# New domain can send SIGCHLD to its caller.
#line 6
#line 6
# Enable AT_SECURE, i.e. libc secure mode.
#line 6
dontaudit init virtual_camera:process noatsecure;
#line 6
# XXX dontaudit candidate but requires further study.
#line 6
allow init virtual_camera:process { siginh rlimitinh };
#line 6
#line 6
# Make the transition occur by default.
#line 6
type_transition init virtual_camera_exec:process virtual_camera;
#line 6
#line 6
# Since virtual_camera is not a real HAL we don't set the
# hal_server_domain(virtual_camera, hal_camera) macro but only the rules that
# we actually need from halserverdomain and hal_camera_server:
#line 11
# Call the servicemanager and transfer references to it.
#line 11
allow virtual_camera servicemanager:binder { call transfer };
#line 11
# Allow servicemanager to send out callbacks
#line 11
allow servicemanager virtual_camera:binder { call transfer };
#line 11
# servicemanager performs getpidcon on clients.
#line 11
allow servicemanager virtual_camera:dir search;
#line 11
allow servicemanager virtual_camera:file { read open };
#line 11
allow servicemanager virtual_camera:process getattr;
#line 11
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 11
# all domains in domain.te.
#line 11
#line 12
# Call the server domain and optionally transfer references to it.
#line 12
allow virtual_camera cameraserver:binder { call transfer };
#line 12
# Allow the serverdomain to transfer references to the client on the reply.
#line 12
allow cameraserver virtual_camera:binder transfer;
#line 12
# Receive and use open files from the server.
#line 12
allow virtual_camera cameraserver:fd use;
#line 12
#line 13
# Call the server domain and optionally transfer references to it.
#line 13
allow virtual_camera system_server:binder { call transfer };
#line 13
# Allow the serverdomain to transfer references to the client on the reply.
#line 13
allow system_server virtual_camera:binder transfer;
#line 13
# Receive and use open files from the server.
#line 13
allow virtual_camera system_server:fd use;
#line 13
# Allow virtual_camera to communicate with
# mediaserver (required for using Surface originating
# from virtual camera in mediaserver).
#line 18
# Call the server domain and optionally transfer references to it.
#line 18
allow virtual_camera mediaserver:binder { call transfer };
#line 18
# Allow the serverdomain to transfer references to the client on the reply.
#line 18
allow mediaserver virtual_camera:binder transfer;
#line 18
# Receive and use open files from the server.
#line 18
allow virtual_camera mediaserver:fd use;
#line 18
# Required for the codecs to be able to decode
# video into surface provided by virtual camera.
#line 22
typeattribute virtual_camera halclientdomain;
#line 22
typeattribute virtual_camera hal_codec2_client;
#line 22
#line 22
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 22
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 22
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 22
#line 22
typeattribute virtual_camera hal_codec2;
#line 22
# Find passthrough HAL implementations
#line 22
allow hal_codec2 system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 22
allow hal_codec2 vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 22
allow hal_codec2 vendor_file:file { read open getattr execute map };
#line 22
#line 22
#line 23
typeattribute virtual_camera halclientdomain;
#line 23
typeattribute virtual_camera hal_omx_client;
#line 23
#line 23
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 23
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 23
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 23
#line 23
typeattribute virtual_camera hal_omx;
#line 23
# Find passthrough HAL implementations
#line 23
allow hal_omx system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 23
allow hal_omx vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 23
allow hal_omx vendor_file:file { read open getattr execute map };
#line 23
#line 23
# Allow virtualCamera to call apps via binder.
#line 26
# Call the server domain and optionally transfer references to it.
#line 26
allow virtual_camera appdomain:binder { call transfer };
#line 26
# Allow the serverdomain to transfer references to the client on the reply.
#line 26
allow appdomain virtual_camera:binder transfer;
#line 26
# Receive and use open files from the server.
#line 26
allow virtual_camera appdomain:fd use;
#line 26
# Allow virtual_camera to use fd from apps
allow virtual_camera { appdomain -isolated_app }:fd use;
# Only allow virtual_camera to add a virtual_camera_service and no one else.
#line 32
allow virtual_camera virtual_camera_service:service_manager { add find };
#line 32
neverallow { domain -virtual_camera } virtual_camera_service:service_manager add;
#line 32
#line 32
# On debug builds with root, allow binder services to use binder over TCP.
#line 32
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 32
#line 32
;
# Allow virtual_camera to map graphic buffers
#line 35
typeattribute virtual_camera halclientdomain;
#line 35
typeattribute virtual_camera hal_graphics_allocator_client;
#line 35
#line 35
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 35
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 35
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 35
#line 35
typeattribute virtual_camera hal_graphics_allocator;
#line 35
# Find passthrough HAL implementations
#line 35
allow hal_graphics_allocator system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 35
allow hal_graphics_allocator vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 35
allow hal_graphics_allocator vendor_file:file { read open getattr execute map };
#line 35
#line 35
# Allow virtual_camera to use GPU
allow virtual_camera gpu_device:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow virtual_camera gpu_device:dir { open getattr read search ioctl lock watch watch_reads };
# Allow virtual camera to use graphics composer fd-s (fences).
allow virtual_camera hal_graphics_composer:fd use;
# For collecting bugreports.
allow virtual_camera dumpstate:fd use;
allow virtual_camera dumpstate:fifo_file write;
# Needed for permission checks.
allow virtual_camera permission_service:service_manager find;
#line 1 "system/sepolicy/private/virtual_touchpad.te"
typeattribute virtual_touchpad coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init virtual_touchpad_exec:file { getattr open read execute map };
#line 3
allow init virtual_touchpad:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow virtual_touchpad virtual_touchpad_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init virtual_touchpad:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init virtual_touchpad:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init virtual_touchpad_exec:process virtual_touchpad;
#line 3
#line 3
#line 1 "system/sepolicy/private/virtualizationmanager.te"
# Domain for a child process that manages virtual machines on behalf of its parent.
type virtualizationmanager, domain, coredomain;
type virtualizationmanager_exec, system_file_type, exec_type, file_type;
# Allow virtualizationmanager to communicate use, read and write over the adb connection.
allow virtualizationmanager adbd:fd use;
allow virtualizationmanager adbd:unix_stream_socket { getattr read write };
# Allow writing VM logs to the shell console
allow virtualizationmanager devpts:chr_file { read write getattr ioctl };
# Let the virtualizationmanager domain use Binder.
#line 14
# Call the servicemanager and transfer references to it.
#line 14
allow virtualizationmanager servicemanager:binder { call transfer };
#line 14
# Allow servicemanager to send out callbacks
#line 14
allow servicemanager virtualizationmanager:binder { call transfer };
#line 14
# servicemanager performs getpidcon on clients.
#line 14
allow servicemanager virtualizationmanager:dir search;
#line 14
allow servicemanager virtualizationmanager:file { read open };
#line 14
allow servicemanager virtualizationmanager:process getattr;
#line 14
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 14
# all domains in domain.te.
#line 14
# Let virtualizationmanager find and communicate with virtualizationservice.
allow virtualizationmanager virtualization_service:service_manager find;
#line 18
# Call the server domain and optionally transfer references to it.
#line 18
allow virtualizationmanager virtualizationservice:binder { call transfer };
#line 18
# Allow the serverdomain to transfer references to the client on the reply.
#line 18
allow virtualizationservice virtualizationmanager:binder transfer;
#line 18
# Receive and use open files from the server.
#line 18
allow virtualizationmanager virtualizationservice:fd use;
#line 18
# Allow calling into the system server to find native services. "permission_service" to check
# permissions, and "package_native" for staged apex info.
#line 22
# Call the server domain and optionally transfer references to it.
#line 22
allow virtualizationmanager system_server:binder { call transfer };
#line 22
# Allow the serverdomain to transfer references to the client on the reply.
#line 22
allow system_server virtualizationmanager:binder transfer;
#line 22
# Receive and use open files from the server.
#line 22
allow virtualizationmanager system_server:fd use;
#line 22
allow virtualizationmanager { package_native_service permission_service }:service_manager find;
# When virtualizationmanager execs a file with the crosvm_exec label, run it in the crosvm domain.
#line 26
# Allow the necessary permissions.
#line 26
#line 26
# Old domain may exec the file and transition to the new domain.
#line 26
allow virtualizationmanager crosvm_exec:file { getattr open read execute map };
#line 26
allow virtualizationmanager crosvm:process transition;
#line 26
# New domain is entered by executing the file.
#line 26
allow crosvm crosvm_exec:file { entrypoint open read execute getattr map };
#line 26
# New domain can send SIGCHLD to its caller.
#line 26
allow crosvm virtualizationmanager:process sigchld;
#line 26
# Enable AT_SECURE, i.e. libc secure mode.
#line 26
dontaudit virtualizationmanager crosvm:process noatsecure;
#line 26
# XXX dontaudit candidate but requires further study.
#line 26
allow virtualizationmanager crosvm:process { siginh rlimitinh };
#line 26
#line 26
# Make the transition occur by default.
#line 26
type_transition virtualizationmanager crosvm_exec:process crosvm;
#line 26
# Let virtualizationmanager kill crosvm.
allow virtualizationmanager crosvm:process sigkill;
# Let virtualizationmanager create files inside virtualizationservice's temporary directories.
allow virtualizationmanager virtualizationservice_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow virtualizationmanager virtualizationservice_data_file:{ file sock_file } { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Let virtualizationmanager read and write files from its various clients, but not open them
# directly as they must be passed over Binder by the client.
allow virtualizationmanager apk_data_file:file { getattr read };
# Write access is needed for mutable partitions like instance.img
allow virtualizationmanager {
app_data_file
apex_compos_data_file
apex_virt_data_file
privapp_data_file
}:file { getattr read write };
# shell_data_file is used for automated tests and manual debugging.
allow virtualizationmanager shell_data_file:file { getattr read write };
# Allow virtualizationmanager to read apex-info-list.xml and access the APEX files listed there.
allow virtualizationmanager apex_info_file:file { getattr open read ioctl lock map watch watch_reads };
allow virtualizationmanager apex_data_file:dir search;
allow virtualizationmanager staging_data_file:file { getattr open read ioctl lock map watch watch_reads };
allow virtualizationmanager staging_data_file:dir search;
# Run derive_classpath in our domain
allow virtualizationmanager derive_classpath_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow virtualizationmanager apex_mnt_dir:dir { open getattr read search ioctl lock watch watch_reads };
# Ignore harmless denials on /proc/self/fd
dontaudit virtualizationmanager self:dir write;
# Let virtualizationmanager to accept vsock connection from the guest VMs
allow virtualizationmanager self:vsock_socket { { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } } listen accept };
# Allow virtualizationmanager to inspect all hypervisor capabilities.
#line 66
allow virtualizationmanager hypervisor_prop:file { getattr open read map };
#line 66
#line 67
allow virtualizationmanager hypervisor_restricted_prop:file { getattr open read map };
#line 67
# Allow virtualizationmanager to be read custom pvmfw.img configuration
dontaudit virtualizationmanager hypervisor_pvmfw_prop:file read;
neverallow { domain -init -dumpstate } hypervisor_pvmfw_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Allow virtualizationmanager to be read custom virtualizationmanager configuration
dontaudit virtualizationmanager hypervisor_virtualizationmanager_prop:file read;
neverallow { domain -init -dumpstate } hypervisor_virtualizationmanager_prop:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
# Allow virtualizationmanager service to talk to tombstoned to push guest ramdumps
#line 80
allow virtualizationmanager tombstoned_crash_socket:sock_file write;
#line 80
allow virtualizationmanager tombstoned:unix_stream_socket connectto;
#line 80
# Append ramdumps to tombstone files passed as fds from tombstoned
allow virtualizationmanager tombstone_data_file:file { append getattr };
allow virtualizationmanager tombstoned:fd use;
# Allow virtualizationmanager to read file system DT for VM reference DT and AVF debug policy
#line 87
allow virtualizationmanager proc_dt_avf:dir { open getattr read search ioctl lock watch watch_reads };
#line 87
allow virtualizationmanager proc_dt_avf:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 87
#line 88
allow virtualizationmanager sysfs_dt_avf:dir { open getattr read search ioctl lock watch watch_reads };
#line 88
allow virtualizationmanager sysfs_dt_avf:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 88
# virtualizationmanager to be client of secretkeeper HAL. It ferries SecretManagement messages
# from pVM to HAL.
#line 92
typeattribute virtualizationmanager halclientdomain;
#line 92
typeattribute virtualizationmanager hal_secretkeeper_client;
#line 92
#line 92
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 92
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 92
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 92
#line 92
typeattribute virtualizationmanager hal_secretkeeper;
#line 92
# Find passthrough HAL implementations
#line 92
allow hal_secretkeeper system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 92
allow hal_secretkeeper vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 92
allow hal_secretkeeper vendor_file:file { read open getattr execute map };
#line 92
#line 92
;
# Let virtualizationmanager open test artifacts under /data/local/tmp with file path.
# (e.g. custom debug policy)
#line 99
# Allow virtualizationmanager to read microdroid related files in vendor partition
#line 102
allow virtualizationmanager vendor_microdroid_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 102
allow virtualizationmanager vendor_microdroid_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 102
# Do not allow writing vendor_microdroid_file from any process.
neverallow { domain } vendor_microdroid_file:dir { add_name create link relabelfrom remove_name rename reparent rmdir setattr write };
neverallow { domain } vendor_microdroid_file:file { append create link unlink relabelfrom rename setattr write };
# Allow reading files under /proc/[crosvm pid]/, for collecting CPU & memory usage inside VM.
#line 109
allow virtualizationmanager crosvm:dir { open getattr read search ioctl lock watch watch_reads };
#line 109
allow virtualizationmanager crosvm:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 109
;
# For debug purposes we try to get the canonical path from /proc/self/fd/N. That triggers
# a harmless denial for CompOS log files, so ignore that.
dontaudit virtualizationmanager apex_module_data_file:dir search;
#line 118
#line 1 "system/sepolicy/private/virtualizationservice.te"
type virtualizationservice, domain, coredomain;
type virtualizationservice_exec, system_file_type, exec_type, file_type;
# The domain needs to be a 'mlstrustedsubject' to change the memlock rlimit of
# the virtualizationmanager domain running at a more constrained MLS level.
typeattribute virtualizationservice mlstrustedsubject;
# When init runs a file labelled with virtualizationservice_exec, run it in the
# virtualizationservice domain.
#line 10
#line 10
# Allow the necessary permissions.
#line 10
#line 10
# Old domain may exec the file and transition to the new domain.
#line 10
allow init virtualizationservice_exec:file { getattr open read execute map };
#line 10
allow init virtualizationservice:process transition;
#line 10
# New domain is entered by executing the file.
#line 10
allow virtualizationservice virtualizationservice_exec:file { entrypoint open read execute getattr map };
#line 10
# New domain can send SIGCHLD to its caller.
#line 10
#line 10
# Enable AT_SECURE, i.e. libc secure mode.
#line 10
dontaudit init virtualizationservice:process noatsecure;
#line 10
# XXX dontaudit candidate but requires further study.
#line 10
allow init virtualizationservice:process { siginh rlimitinh };
#line 10
#line 10
# Make the transition occur by default.
#line 10
type_transition init virtualizationservice_exec:process virtualizationservice;
#line 10
#line 10
# Let the virtualizationservice domain use Binder.
#line 13
# Call the servicemanager and transfer references to it.
#line 13
allow virtualizationservice servicemanager:binder { call transfer };
#line 13
# Allow servicemanager to send out callbacks
#line 13
allow servicemanager virtualizationservice:binder { call transfer };
#line 13
# servicemanager performs getpidcon on clients.
#line 13
allow servicemanager virtualizationservice:dir search;
#line 13
allow servicemanager virtualizationservice:file { read open };
#line 13
allow servicemanager virtualizationservice:process getattr;
#line 13
# rw access to /dev/binder and /dev/ashmem is presently granted to
#line 13
# all domains in domain.te.
#line 13
# Register our services with ServiceManager.
#line 16
allow virtualizationservice virtualization_service:service_manager { add find };
#line 16
neverallow { domain -virtualizationservice } virtualization_service:service_manager add;
#line 16
#line 16
# On debug builds with root, allow binder services to use binder over TCP.
#line 16
# Not using rw_socket_perms_no_ioctl to avoid granting too many permissions.
#line 16
#line 16
#line 19
#line 25
# Allow the virtualizationservice domain to serve a remotely provisioned component for
# pVM remote attestation.
#line 29
typeattribute virtualizationservice halserverdomain;
#line 29
typeattribute virtualizationservice hal_remotelyprovisionedcomponent_avf_server;
#line 29
typeattribute virtualizationservice hal_remotelyprovisionedcomponent_avf;
#line 29
# Allow calling into the system server to find "permission_service".
#line 32
# Call the server domain and optionally transfer references to it.
#line 32
allow virtualizationservice system_server:binder { call transfer };
#line 32
# Allow the serverdomain to transfer references to the client on the reply.
#line 32
allow system_server virtualizationservice:binder transfer;
#line 32
# Receive and use open files from the server.
#line 32
allow virtualizationservice system_server:fd use;
#line 32
allow virtualizationservice permission_service:service_manager find;
# Allow virtualizationservice to retrieve the remotely provisioned keys from rkpd.
#line 36
# Call the server domain and optionally transfer references to it.
#line 36
allow virtualizationservice remote_provisioning_service:binder { call transfer };
#line 36
# Allow the serverdomain to transfer references to the client on the reply.
#line 36
allow remote_provisioning_service virtualizationservice:binder transfer;
#line 36
# Receive and use open files from the server.
#line 36
allow virtualizationservice remote_provisioning_service:fd use;
#line 36
allow virtualizationservice remote_provisioning_service:service_manager find;
# Allow virtualizationservice to manage VM secrets via Secretkeeper.
#line 40
typeattribute virtualizationservice halclientdomain;
#line 40
typeattribute virtualizationservice hal_secretkeeper_client;
#line 40
#line 40
# TODO(b/34170079): Make the inclusion of the rules below conditional also on
#line 40
# non-Treble devices. For now, on non-Treble device, always grant clients of a
#line 40
# HAL sufficient access to run the HAL in passthrough mode (i.e., in-process).
#line 40
#line 40
typeattribute virtualizationservice hal_secretkeeper;
#line 40
# Find passthrough HAL implementations
#line 40
allow hal_secretkeeper system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 40
allow hal_secretkeeper vendor_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 40
allow hal_secretkeeper vendor_file:file { read open getattr execute map };
#line 40
#line 40
# Let virtualizationservice remove memlock rlimit of virtualizationmanager. This is necessary
# to mlock VM memory and page tables.
allow virtualizationservice self:capability sys_resource;
allow virtualizationservice virtualizationmanager:process setrlimit;
# Let virtualizationservice set the owner of a VM's temporary directory.
allow virtualizationservice self:capability chown;
# Let virtualizationservice create and delete temporary directories of VMs. To remove old
# directories, it needs the permission to unlink the files created by virtualizationmanager.
allow virtualizationservice virtualizationservice_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow virtualizationservice virtualizationservice_data_file:sock_file unlink;
allow virtualizationservice virtualizationservice_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow to use fd (e.g. /dev/pts/0) inherited from adbd so that we can redirect output from
# crosvm to the console
allow virtualizationservice adbd:fd use;
allow virtualizationservice adbd:unix_stream_socket { read write };
# Allow to connnect to and run VirtMgr to start the service VM for remote attestation.
#line 62
# Transition to virtualizationmanager when the client executes it.
#line 62
#line 62
# Allow the necessary permissions.
#line 62
#line 62
# Old domain may exec the file and transition to the new domain.
#line 62
allow virtualizationservice virtualizationmanager_exec:file { getattr open read execute map };
#line 62
allow virtualizationservice virtualizationmanager:process transition;
#line 62
# New domain is entered by executing the file.
#line 62
allow virtualizationmanager virtualizationmanager_exec:file { entrypoint open read execute getattr map };
#line 62
# New domain can send SIGCHLD to its caller.
#line 62
allow virtualizationmanager virtualizationservice:process sigchld;
#line 62
# Enable AT_SECURE, i.e. libc secure mode.
#line 62
dontaudit virtualizationservice virtualizationmanager:process noatsecure;
#line 62
# XXX dontaudit candidate but requires further study.
#line 62
allow virtualizationservice virtualizationmanager:process { siginh rlimitinh };
#line 62
#line 62
# Make the transition occur by default.
#line 62
type_transition virtualizationservice virtualizationmanager_exec:process virtualizationmanager;
#line 62
#line 62
# Allow virtualizationmanager to communicate over UDS with the client.
#line 62
allow { virtualizationmanager crosvm } virtualizationservice:unix_stream_socket { ioctl getattr read write };
#line 62
# Let the client pass file descriptors to virtualizationmanager and on to crosvm.
#line 62
allow { virtualizationmanager crosvm } virtualizationservice:fd use;
#line 62
# Let the client use file descriptors created by virtualizationmanager.
#line 62
allow virtualizationservice virtualizationmanager:fd use;
#line 62
# Allow piping console log to the client
#line 62
allow { virtualizationmanager crosvm } virtualizationservice:fifo_file { ioctl getattr read write };
#line 62
# Allow client to read/write vsock created by virtualizationmanager to communicate with the VM
#line 62
# that it created. Notice that we do not grant permission to create a vsock;
#line 62
# the client can only connect to VMs that it owns.
#line 62
allow virtualizationservice virtualizationmanager:vsock_socket { getattr getopt read write };
#line 62
# Allow client to inspect hypervisor capabilities
#line 62
#line 62
allow virtualizationservice hypervisor_prop:file { getattr open read map };
#line 62
#line 62
# Allow client to read (but not open) the crashdump provided by virtualizationmanager
#line 62
allow virtualizationservice virtualizationservice_data_file:file { getattr read };
#line 62
# Allow virtualizationservice to read and write in the apex data directory
# /data/misc/apexdata/com.android.virt. Also allow checking of the parent directory
# (needed for SQLite database creation).
allow virtualizationservice apex_module_data_file:dir { search getattr };
allow virtualizationservice apex_virt_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow virtualizationservice apex_virt_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Let virtualizationservice to accept vsock connection from the guest VMs to singleton services
# such as the guest tombstone server.
allow virtualizationservice self:vsock_socket { { create { read getattr write setattr lock append bind connect getopt setopt shutdown map } } listen accept };
# Allow virtualizationservice to read/write its own sysprop. Only the process can do so.
#line 76
#line 76
allow virtualizationservice property_socket:sock_file write;
#line 76
allow virtualizationservice init:unix_stream_socket connectto;
#line 76
#line 76
allow virtualizationservice virtualizationservice_prop:property_service set;
#line 76
#line 76
allow virtualizationservice virtualizationservice_prop:file { getattr open read map };
#line 76
#line 76
# Allow writing stats to statsd
#line 79
allow virtualizationservice statsdw_socket:sock_file write;
#line 79
allow virtualizationservice statsd:unix_dgram_socket sendto;
#line 79
# Allow virtualization service to talk to tombstoned to push guest tombstones
#line 82
allow virtualizationservice tombstoned_crash_socket:sock_file write;
#line 82
allow virtualizationservice tombstoned:unix_stream_socket connectto;
#line 82
# Append to tombstone files passed as fds from tombstoned
allow virtualizationservice tombstone_data_file:file { append getattr };
allow virtualizationservice tombstoned:fd use;
# Allow virtualizationservice to check if VFIO is supported
allow virtualizationservice vfio_device:chr_file getattr;
allow virtualizationservice vfio_device:dir { open getattr read search ioctl lock watch watch_reads };
# Allow virtualizationservice to access VM DTBO via a file created by virtualizationmanager.
allow virtualizationservice virtualizationmanager:fd use;
# Allow virtualizationservice to access vendor_configs_file to get the list of assignable devices.
#line 96
allow virtualizationservice vendor_configs_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 96
allow virtualizationservice vendor_configs_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 96
neverallow {
domain
-init
-virtualizationservice
} virtualizationservice_prop:property_service set;
neverallow {
domain
-init
-virtualizationmanager
-virtualizationservice
} virtualizationservice_data_file:file { open create };
neverallow virtualizationservice {
domain
-virtualizationmanager
-virtualizationservice
}:process setrlimit;
#line 120
#line 1 "system/sepolicy/private/vold.te"
typeattribute vold coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init vold_exec:file { getattr open read execute map };
#line 3
allow init vold:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow vold vold_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init vold:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init vold:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init vold_exec:process vold;
#line 3
#line 3
# Switch to more restrictive domains when executing common tools
#line 6
# Allow the necessary permissions.
#line 6
#line 6
# Old domain may exec the file and transition to the new domain.
#line 6
allow vold sgdisk_exec:file { getattr open read execute map };
#line 6
allow vold sgdisk:process transition;
#line 6
# New domain is entered by executing the file.
#line 6
allow sgdisk sgdisk_exec:file { entrypoint open read execute getattr map };
#line 6
# New domain can send SIGCHLD to its caller.
#line 6
allow sgdisk vold:process sigchld;
#line 6
# Enable AT_SECURE, i.e. libc secure mode.
#line 6
dontaudit vold sgdisk:process noatsecure;
#line 6
# XXX dontaudit candidate but requires further study.
#line 6
allow vold sgdisk:process { siginh rlimitinh };
#line 6
#line 6
# Make the transition occur by default.
#line 6
type_transition vold sgdisk_exec:process sgdisk;
#line 6
;
#line 7
# Allow the necessary permissions.
#line 7
#line 7
# Old domain may exec the file and transition to the new domain.
#line 7
allow vold sdcardd_exec:file { getattr open read execute map };
#line 7
allow vold sdcardd:process transition;
#line 7
# New domain is entered by executing the file.
#line 7
allow sdcardd sdcardd_exec:file { entrypoint open read execute getattr map };
#line 7
# New domain can send SIGCHLD to its caller.
#line 7
allow sdcardd vold:process sigchld;
#line 7
# Enable AT_SECURE, i.e. libc secure mode.
#line 7
dontaudit vold sdcardd:process noatsecure;
#line 7
# XXX dontaudit candidate but requires further study.
#line 7
allow vold sdcardd:process { siginh rlimitinh };
#line 7
#line 7
# Make the transition occur by default.
#line 7
type_transition vold sdcardd_exec:process sdcardd;
#line 7
;
#line 8
# Allow the necessary permissions.
#line 8
#line 8
# Old domain may exec the file and transition to the new domain.
#line 8
allow vold fuseblkd_untrusted_exec:file { getattr open read execute map };
#line 8
allow vold fuseblkd_untrusted:process transition;
#line 8
# New domain is entered by executing the file.
#line 8
allow fuseblkd_untrusted fuseblkd_untrusted_exec:file { entrypoint open read execute getattr map };
#line 8
# New domain can send SIGCHLD to its caller.
#line 8
allow fuseblkd_untrusted vold:process sigchld;
#line 8
# Enable AT_SECURE, i.e. libc secure mode.
#line 8
dontaudit vold fuseblkd_untrusted:process noatsecure;
#line 8
# XXX dontaudit candidate but requires further study.
#line 8
allow vold fuseblkd_untrusted:process { siginh rlimitinh };
#line 8
#line 8
# Make the transition occur by default.
#line 8
type_transition vold fuseblkd_untrusted_exec:process fuseblkd_untrusted;
#line 8
;
# Switch to e2fs domain when running mkfs.ext4 to format a partition
#line 11
# Allow the necessary permissions.
#line 11
#line 11
# Old domain may exec the file and transition to the new domain.
#line 11
allow vold e2fs_exec:file { getattr open read execute map };
#line 11
allow vold e2fs:process transition;
#line 11
# New domain is entered by executing the file.
#line 11
allow e2fs e2fs_exec:file { entrypoint open read execute getattr map };
#line 11
# New domain can send SIGCHLD to its caller.
#line 11
allow e2fs vold:process sigchld;
#line 11
# Enable AT_SECURE, i.e. libc secure mode.
#line 11
dontaudit vold e2fs:process noatsecure;
#line 11
# XXX dontaudit candidate but requires further study.
#line 11
allow vold e2fs:process { siginh rlimitinh };
#line 11
#line 11
# Make the transition occur by default.
#line 11
type_transition vold e2fs_exec:process e2fs;
#line 11
;
# For a handful of probing tools, we choose an even more restrictive
# domain when working with untrusted block devices
#line 16
# Old domain may exec the file and transition to the new domain.
#line 16
allow vold blkid_exec:file { getattr open read execute map };
#line 16
allow vold blkid:process transition;
#line 16
# New domain is entered by executing the file.
#line 16
allow blkid blkid_exec:file { entrypoint open read execute getattr map };
#line 16
# New domain can send SIGCHLD to its caller.
#line 16
allow blkid vold:process sigchld;
#line 16
# Enable AT_SECURE, i.e. libc secure mode.
#line 16
dontaudit vold blkid:process noatsecure;
#line 16
# XXX dontaudit candidate but requires further study.
#line 16
allow vold blkid:process { siginh rlimitinh };
#line 16
;
#line 17
# Old domain may exec the file and transition to the new domain.
#line 17
allow vold blkid_exec:file { getattr open read execute map };
#line 17
allow vold blkid_untrusted:process transition;
#line 17
# New domain is entered by executing the file.
#line 17
allow blkid_untrusted blkid_exec:file { entrypoint open read execute getattr map };
#line 17
# New domain can send SIGCHLD to its caller.
#line 17
allow blkid_untrusted vold:process sigchld;
#line 17
# Enable AT_SECURE, i.e. libc secure mode.
#line 17
dontaudit vold blkid_untrusted:process noatsecure;
#line 17
# XXX dontaudit candidate but requires further study.
#line 17
allow vold blkid_untrusted:process { siginh rlimitinh };
#line 17
;
#line 18
# Old domain may exec the file and transition to the new domain.
#line 18
allow vold fsck_exec:file { getattr open read execute map };
#line 18
allow vold fsck:process transition;
#line 18
# New domain is entered by executing the file.
#line 18
allow fsck fsck_exec:file { entrypoint open read execute getattr map };
#line 18
# New domain can send SIGCHLD to its caller.
#line 18
allow fsck vold:process sigchld;
#line 18
# Enable AT_SECURE, i.e. libc secure mode.
#line 18
dontaudit vold fsck:process noatsecure;
#line 18
# XXX dontaudit candidate but requires further study.
#line 18
allow vold fsck:process { siginh rlimitinh };
#line 18
;
#line 19
# Old domain may exec the file and transition to the new domain.
#line 19
allow vold fsck_exec:file { getattr open read execute map };
#line 19
allow vold fsck_untrusted:process transition;
#line 19
# New domain is entered by executing the file.
#line 19
allow fsck_untrusted fsck_exec:file { entrypoint open read execute getattr map };
#line 19
# New domain can send SIGCHLD to its caller.
#line 19
allow fsck_untrusted vold:process sigchld;
#line 19
# Enable AT_SECURE, i.e. libc secure mode.
#line 19
dontaudit vold fsck_untrusted:process noatsecure;
#line 19
# XXX dontaudit candidate but requires further study.
#line 19
allow vold fsck_untrusted:process { siginh rlimitinh };
#line 19
;
# Newly created storage dirs are always treated as mount stubs to prevent us
# from accidentally writing when the mount point isn't present.
type_transition vold storage_file:dir storage_stub_file;
type_transition vold mnt_media_rw_file:dir mnt_media_rw_stub_file;
# Property Service
#line 27
allow vold vold_config_prop:file { getattr open read map };
#line 27
#line 28
allow vold storage_config_prop:file { getattr open read map };
#line 28
;
#line 29
allow vold incremental_prop:file { getattr open read map };
#line 29
;
#line 30
allow vold gsid_prop:file { getattr open read map };
#line 30
;
#line 32
#line 32
allow vold property_socket:sock_file write;
#line 32
allow vold init:unix_stream_socket connectto;
#line 32
#line 32
allow vold vold_prop:property_service set;
#line 32
#line 32
allow vold vold_prop:file { getattr open read map };
#line 32
#line 32
#line 33
#line 33
allow vold property_socket:sock_file write;
#line 33
allow vold init:unix_stream_socket connectto;
#line 33
#line 33
allow vold vold_status_prop:property_service set;
#line 33
#line 33
allow vold vold_status_prop:file { getattr open read map };
#line 33
#line 33
#line 34
#line 34
allow vold property_socket:sock_file write;
#line 34
allow vold init:unix_stream_socket connectto;
#line 34
#line 34
allow vold powerctl_prop:property_service set;
#line 34
#line 34
allow vold powerctl_prop:file { getattr open read map };
#line 34
#line 34
#line 35
#line 35
allow vold property_socket:sock_file write;
#line 35
allow vold init:unix_stream_socket connectto;
#line 35
#line 35
allow vold ctl_fuse_prop:property_service set;
#line 35
#line 35
allow vold ctl_fuse_prop:file { getattr open read map };
#line 35
#line 35
#line 36
#line 36
allow vold property_socket:sock_file write;
#line 36
allow vold init:unix_stream_socket connectto;
#line 36
#line 36
allow vold restorecon_prop:property_service set;
#line 36
#line 36
allow vold restorecon_prop:file { getattr open read map };
#line 36
#line 36
#line 37
#line 37
allow vold property_socket:sock_file write;
#line 37
allow vold init:unix_stream_socket connectto;
#line 37
#line 37
allow vold ota_prop:property_service set;
#line 37
#line 37
allow vold ota_prop:file { getattr open read map };
#line 37
#line 37
#line 38
#line 38
allow vold property_socket:sock_file write;
#line 38
allow vold init:unix_stream_socket connectto;
#line 38
#line 38
allow vold boottime_prop:property_service set;
#line 38
#line 38
allow vold boottime_prop:file { getattr open read map };
#line 38
#line 38
#line 39
#line 39
allow vold property_socket:sock_file write;
#line 39
allow vold init:unix_stream_socket connectto;
#line 39
#line 39
allow vold boottime_public_prop:property_service set;
#line 39
#line 39
allow vold boottime_public_prop:file { getattr open read map };
#line 39
#line 39
# Vold will use Keystore instead of using Keymint directly. But it still needs
# to manage its Keymint blobs. This is why it needs the `manage_blob` permission.
allow vold vold_key:keystore2_key {
convert_storage_key_to_ephemeral
delete
get_info
manage_blob
rebind
req_forced_op
update
use
};
# vold needs to call keystore methods
allow vold keystore:binder call;
# vold needs to find keystore2 services
allow vold keystore_service:service_manager find;
allow vold keystore_maintenance_service:service_manager find;
# vold needs to be able to call earlyBootEnded() and deleteAllKeys()
allow vold keystore:keystore2 early_boot_ended;
allow vold keystore:keystore2 delete_all_keys;
neverallow {
domain
-system_server
-vdc
-vold
-update_verifier
-apexd
-gsid
} vold_service:service_manager find;
# Allow vold to create and delete per-user directories like /data/user/$userId.
allow vold {
media_userdir_file
system_userdir_file
vendor_userdir_file
}:dir {
add_name
remove_name
write
};
# Only vold should create (and delete) per-user directories like
# /data/user/$userId. This is very important, as these directories need to be
# encrypted with per-user keys, which only vold can do. Encryption can only be
# set up on empty directories, so creation and encryption must happen together.
neverallow {
domain
-vold
} {
media_userdir_file
system_userdir_file
vendor_userdir_file
}:dir {
add_name
remove_name
write
};
#line 1 "system/sepolicy/private/vold_prepare_subdirs.te"
#line 1
# Allow the necessary permissions.
#line 1
#line 1
# Old domain may exec the file and transition to the new domain.
#line 1
allow vold vold_prepare_subdirs_exec:file { getattr open read execute map };
#line 1
allow vold vold_prepare_subdirs:process transition;
#line 1
# New domain is entered by executing the file.
#line 1
allow vold_prepare_subdirs vold_prepare_subdirs_exec:file { entrypoint open read execute getattr map };
#line 1
# New domain can send SIGCHLD to its caller.
#line 1
allow vold_prepare_subdirs vold:process sigchld;
#line 1
# Enable AT_SECURE, i.e. libc secure mode.
#line 1
dontaudit vold vold_prepare_subdirs:process noatsecure;
#line 1
# XXX dontaudit candidate but requires further study.
#line 1
allow vold vold_prepare_subdirs:process { siginh rlimitinh };
#line 1
#line 1
# Make the transition occur by default.
#line 1
type_transition vold vold_prepare_subdirs_exec:process vold_prepare_subdirs;
#line 1
typeattribute vold_prepare_subdirs mlstrustedsubject;
allow vold_prepare_subdirs system_file:file execute_no_trans;
allow vold_prepare_subdirs shell_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow vold_prepare_subdirs toolbox_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow vold_prepare_subdirs devpts:chr_file { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } };
allow vold_prepare_subdirs vold:fd use;
allow vold_prepare_subdirs vold:fifo_file { read write };
allow vold_prepare_subdirs file_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
allow vold_prepare_subdirs self:{ capability cap_userns } { chown dac_override dac_read_search fowner };
allow vold_prepare_subdirs self:process setfscreate;
allow vold_prepare_subdirs {
sdk_sandbox_system_data_file
system_data_file
vendor_data_file
}:dir { open read write add_name remove_name rmdir relabelfrom };
allow vold_prepare_subdirs {
apex_data_file_type
apex_module_data_file
apex_rollback_data_file
backup_data_file
checkin_data_file
face_vendor_data_file
fingerprint_vendor_data_file
iris_vendor_data_file
rollback_data_file
storaged_data_file
sdk_sandbox_data_file
sdk_sandbox_system_data_file
system_data_file
vold_data_file
}:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } relabelto };
allow vold_prepare_subdirs {
apex_data_file_type
apex_art_staging_data_file
apex_module_data_file
apex_rollback_data_file
backup_data_file
checkin_data_file
face_vendor_data_file
fingerprint_vendor_data_file
iris_vendor_data_file
rollback_data_file
storaged_data_file
sdk_sandbox_data_file
system_data_file
vold_data_file
}:file { getattr unlink };
allow vold_prepare_subdirs apex_mnt_dir:dir { open read };
allow vold_prepare_subdirs mnt_expand_file:dir search;
allow vold_prepare_subdirs user_profile_data_file:dir { search getattr relabelfrom };
allow vold_prepare_subdirs user_profile_root_file:dir { search getattr relabelfrom relabelto };
# Migrate legacy labels to apex_system_server_data_file (b/217581286)
allow vold_prepare_subdirs {
apex_appsearch_data_file
apex_permission_data_file
apex_scheduling_data_file
apex_tethering_data_file
apex_wifi_data_file
}:dir relabelfrom;
# /data/misc is unlabeled during early boot.
allow vold_prepare_subdirs unlabeled:dir search;
dontaudit vold_prepare_subdirs { proc unlabeled }:file { getattr open read ioctl lock map watch watch_reads };
#line 1 "system/sepolicy/private/vzwomatrigger_app.te"
###
### A domain for further sandboxing the VzwOmaTrigger app.
###
type vzwomatrigger_app, domain;
#line 6
typeattribute vzwomatrigger_app appdomain;
#line 6
# Label tmpfs objects for all apps.
#line 6
type_transition vzwomatrigger_app tmpfs:file appdomain_tmpfs;
#line 6
#line 6
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 6
type vzwomatrigger_app_userfaultfd;
#line 6
type_transition vzwomatrigger_app vzwomatrigger_app:anon_inode vzwomatrigger_app_userfaultfd "[userfaultfd]";
#line 6
# Allow domain to create/use userfaultfd anon_inode.
#line 6
allow vzwomatrigger_app vzwomatrigger_app_userfaultfd:anon_inode { create ioctl read };
#line 6
# Suppress errors generate during bugreport
#line 6
dontaudit su vzwomatrigger_app_userfaultfd:anon_inode *;
#line 6
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 6
neverallow { domain -vzwomatrigger_app } vzwomatrigger_app_userfaultfd:anon_inode *;
#line 6
#line 6
allow vzwomatrigger_app appdomain_tmpfs:file { execute getattr map read write };
#line 6
neverallow { vzwomatrigger_app -runas_app -shell -simpleperf } { domain -vzwomatrigger_app }:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 6
neverallow { appdomain -runas_app -shell -simpleperf -vzwomatrigger_app } vzwomatrigger_app:file { { append create link unlink relabelfrom rename setattr write } open read ioctl lock watch watch_mount watch_sb watch_with_perm watch_reads };
#line 6
# The Android security model guarantees the confidentiality and integrity
#line 6
# of application data and execution state. Ptrace bypasses those
#line 6
# confidentiality guarantees. Disallow ptrace access from system components to
#line 6
# apps. crash_dump is excluded, as it needs ptrace access to produce stack
#line 6
# traces. runas_app is excluded, as it operates only on debuggable apps.
#line 6
# simpleperf is excluded, as it operates only on debuggable or profileable
#line 6
# apps. llkd is excluded, as it needs ptrace access to inspect stack traces for
#line 6
# live lock conditions.
#line 6
neverallow { domain -vzwomatrigger_app -crash_dump -runas_app -simpleperf } vzwomatrigger_app:process ptrace;
#line 6
#line 1 "system/sepolicy/private/wait_for_keymaster.te"
# wait_for_keymaster service. No longer used;
# here only so that downstream code compiles.
type wait_for_keymaster, domain, coredomain;
type wait_for_keymaster_exec, system_file_type, exec_type, file_type;
#line 1 "system/sepolicy/private/watchdogd.te"
typeattribute watchdogd coredomain;
#line 3
#line 3
# Allow the necessary permissions.
#line 3
#line 3
# Old domain may exec the file and transition to the new domain.
#line 3
allow init watchdogd_exec:file { getattr open read execute map };
#line 3
allow init watchdogd:process transition;
#line 3
# New domain is entered by executing the file.
#line 3
allow watchdogd watchdogd_exec:file { entrypoint open read execute getattr map };
#line 3
# New domain can send SIGCHLD to its caller.
#line 3
#line 3
# Enable AT_SECURE, i.e. libc secure mode.
#line 3
dontaudit init watchdogd:process noatsecure;
#line 3
# XXX dontaudit candidate but requires further study.
#line 3
allow init watchdogd:process { siginh rlimitinh };
#line 3
#line 3
# Make the transition occur by default.
#line 3
type_transition init watchdogd_exec:process watchdogd;
#line 3
#line 3
#line 1 "system/sepolicy/private/webview_zygote.te"
# webview_zygote is an auxiliary zygote process that is used to spawn
# isolated_app processes for rendering untrusted web content.
typeattribute webview_zygote coredomain;
# The webview_zygote needs to be able to transition domains.
typeattribute webview_zygote mlstrustedsubject;
# Allow access to temporary files, which is normally permitted through
# a domain macro.
#line 11
type_transition webview_zygote tmpfs:file webview_zygote_tmpfs;
#line 11
allow webview_zygote webview_zygote_tmpfs:file { read write getattr map };
#line 11
;
#line 13
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 13
type webview_zygote_userfaultfd;
#line 13
type_transition webview_zygote webview_zygote:anon_inode webview_zygote_userfaultfd "[userfaultfd]";
#line 13
# Allow domain to create/use userfaultfd anon_inode.
#line 13
allow webview_zygote webview_zygote_userfaultfd:anon_inode { create ioctl read };
#line 13
# Suppress errors generate during bugreport
#line 13
dontaudit su webview_zygote_userfaultfd:anon_inode *;
#line 13
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 13
neverallow { domain -webview_zygote } webview_zygote_userfaultfd:anon_inode *;
#line 13
# Allow reading/executing installed binaries to enable preloading the
# installed WebView implementation.
allow webview_zygote apk_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow webview_zygote apk_data_file:file { { getattr open read ioctl lock map watch watch_reads } execute };
# Access to the WebView relro file.
allow webview_zygote shared_relro_file:dir search;
allow webview_zygote shared_relro_file:file { getattr open read ioctl lock map watch watch_reads };
# Set the UID/GID of the process.
allow webview_zygote self:{ capability cap_userns } { setgid setuid };
# Drop capabilities from bounding set.
allow webview_zygote self:{ capability cap_userns } setpcap;
# Switch SELinux context to app domains.
allow webview_zygote self:process setcurrent;
allow webview_zygote isolated_app:process dyntransition;
# For art.
allow webview_zygote { apex_art_data_file dalvikcache_data_file }:dir { open getattr read search ioctl lock watch watch_reads };
allow webview_zygote dalvikcache_data_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
allow webview_zygote { apex_art_data_file dalvikcache_data_file }:file { { getattr open read ioctl lock map watch watch_reads } execute };
allow webview_zygote apex_module_data_file:dir search;
# To load overlay from /apex (vendor APEXes)
allow webview_zygote vendor_apex_metadata_file:dir search;
# Allow webview_zygote to create JIT memory.
allow webview_zygote self:process execmem;
# Allow webview_zygote to stat the files that it opens. It must
# be able to inspect them so that it can reopen them on fork
# if necessary: b/30963384.
allow webview_zygote debugfs_trace_marker:file getattr;
# Allow webview_zygote to manage the pgroup of its children.
allow webview_zygote system_server:process getpgid;
# Interaction between the webview_zygote and its children.
allow webview_zygote isolated_app:process setpgid;
# TODO (b/63631799) fix this access
# Suppress denials to storage. Webview zygote should not be accessing.
dontaudit webview_zygote mnt_expand_file:dir getattr;
# TODO (b/72957399) remove this when webview_zygote is reparented to
# app_process zygote
dontaudit webview_zygote dex2oat_exec:file execute;
# Get seapp_contexts
allow webview_zygote seapp_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
# Check validity of SELinux context before use.
#line 66
#line 66
allow webview_zygote selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 66
allow webview_zygote selinuxfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 66
#line 66
allow webview_zygote selinuxfs:file { open append write lock map };
#line 66
allow webview_zygote kernel:security check_context;
#line 66
# Check SELinux permissions.
#line 68
#line 68
allow webview_zygote selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 68
allow webview_zygote selinuxfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 68
#line 68
allow webview_zygote selinuxfs:file { open append write lock map };
#line 68
allow webview_zygote kernel:security compute_av;
#line 68
allow webview_zygote self:netlink_selinux_socket { read write create getattr setattr lock relabelfrom relabelto append bind connect listen accept getopt setopt shutdown recvfrom sendto name_bind };
#line 68
# Directory listing in /system.
allow webview_zygote system_file:dir { open getattr read search ioctl lock watch watch_reads };
# Read and inspect temporary files (like system properties) managed by zygote.
allow webview_zygote zygote_tmpfs:file { read getattr };
# Child of zygote.
allow webview_zygote zygote:fd use;
allow webview_zygote zygote:process sigchld;
# Allow apps access to /vendor/overlay
#line 80
allow webview_zygote vendor_overlay_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 80
allow webview_zygote vendor_overlay_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 80
allow webview_zygote same_process_hal_file:file { execute read open getattr map };
allow webview_zygote system_data_file:lnk_file { getattr open read ioctl lock map watch watch_reads };
# Send unsolicited message to system_server
#line 87
allow webview_zygote system_unsolzygote_socket:sock_file write;
#line 87
allow webview_zygote system_server:unix_dgram_socket sendto;
#line 87
# Allow the webview_zygote to access the runtime feature flag properties.
#line 90
allow webview_zygote device_config_runtime_native_prop:file { getattr open read map };
#line 90
#line 91
allow webview_zygote device_config_runtime_native_boot_prop:file { getattr open read map };
#line 91
# Allow webview_zygote to access odsign verification status
#line 94
allow zygote odsign_prop:file { getattr open read map };
#line 94
# /data/resource-cache
allow webview_zygote resourcecache_data_file:file { getattr open read ioctl lock map watch watch_reads };
allow webview_zygote resourcecache_data_file:dir { open getattr read search ioctl lock watch watch_reads };
#####
##### Neverallow
#####
# Only permit transition to isolated_app.
neverallow webview_zygote { domain -isolated_app }:process dyntransition;
# Only setcon() transitions, no exec() based transitions, except for crash_dump.
neverallow webview_zygote { domain -crash_dump }:process transition;
# Must not exec() a program without changing domains.
# Having said that, exec() above is not allowed.
neverallow webview_zygote *:file execute_no_trans;
# The only way to enter this domain is for the zygote to fork a new
# webview_zygote child.
neverallow { domain -zygote } webview_zygote:process dyntransition;
# Disallow write access to properties.
neverallow webview_zygote property_socket:sock_file write;
neverallow webview_zygote property_type:property_service set;
# Should not have any access to app data files.
neverallow webview_zygote app_data_file_type:file { { { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } { getattr execute execute_no_trans map } } };
neverallow webview_zygote {
service_manager_type
-activity_service
-webviewupdate_service
}:service_manager find;
# Isolated apps shouldn't be able to access the driver directly.
neverallow webview_zygote gpu_device:chr_file { { { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } { getattr execute execute_no_trans map } } };
# Do not allow webview_zygote access to /cache.
neverallow webview_zygote cache_file:dir ~{ { open getattr read search ioctl lock watch watch_reads } };
neverallow webview_zygote cache_file:file ~{ read getattr };
# Do not allow most socket access. This is socket_class_set, excluding unix_dgram_socket,
# unix_stream_socket, and netlink_selinux_socket.
neverallow webview_zygote domain:{
socket tcp_socket udp_socket rawip_socket netlink_socket packet_socket key_socket
appletalk_socket netlink_route_socket netlink_tcpdiag_socket
netlink_nflog_socket netlink_xfrm_socket netlink_audit_socket
netlink_dnrt_socket netlink_kobject_uevent_socket tun_socket netlink_iscsi_socket
netlink_fib_lookup_socket netlink_connector_socket netlink_netfilter_socket
netlink_generic_socket netlink_scsitransport_socket netlink_rdma_socket netlink_crypto_socket
sctp_socket icmp_socket ax25_socket ipx_socket netrom_socket atmpvc_socket
x25_socket rose_socket decnet_socket atmsvc_socket rds_socket irda_socket
pppox_socket llc_socket can_socket tipc_socket bluetooth_socket iucv_socket
rxrpc_socket isdn_socket phonet_socket ieee802154_socket caif_socket
alg_socket nfc_socket vsock_socket kcm_socket qipcrtr_socket smc_socket
xdp_socket
} *;
# Do not allow access to Bluetooth-related system properties.
# neverallow rules for Bluetooth-related data files are listed above.
neverallow webview_zygote {
bluetooth_a2dp_offload_prop
bluetooth_audio_hal_prop
bluetooth_prop
exported_bluetooth_prop
}:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
#line 1 "system/sepolicy/private/wificond.te"
typeattribute wificond coredomain;
#line 3
#line 3
allow wificond property_socket:sock_file write;
#line 3
allow wificond init:unix_stream_socket connectto;
#line 3
#line 3
allow wificond wifi_hal_prop:property_service set;
#line 3
#line 3
allow wificond wifi_hal_prop:file { getattr open read map };
#line 3
#line 3
#line 4
#line 4
allow wificond property_socket:sock_file write;
#line 4
allow wificond init:unix_stream_socket connectto;
#line 4
#line 4
allow wificond wifi_prop:property_service set;
#line 4
#line 4
allow wificond wifi_prop:file { getattr open read map };
#line 4
#line 4
#line 5
#line 5
allow wificond property_socket:sock_file write;
#line 5
allow wificond init:unix_stream_socket connectto;
#line 5
#line 5
allow wificond ctl_default_prop:property_service set;
#line 5
#line 5
allow wificond ctl_default_prop:file { getattr open read map };
#line 5
#line 5
#line 7
allow wificond hwservicemanager_prop:file { getattr open read map };
#line 7
allow wificond legacykeystore_service:service_manager find;
#line 11
#line 11
# Allow the necessary permissions.
#line 11
#line 11
# Old domain may exec the file and transition to the new domain.
#line 11
allow init wificond_exec:file { getattr open read execute map };
#line 11
allow init wificond:process transition;
#line 11
# New domain is entered by executing the file.
#line 11
allow wificond wificond_exec:file { entrypoint open read execute getattr map };
#line 11
# New domain can send SIGCHLD to its caller.
#line 11
#line 11
# Enable AT_SECURE, i.e. libc secure mode.
#line 11
dontaudit init wificond:process noatsecure;
#line 11
# XXX dontaudit candidate but requires further study.
#line 11
allow init wificond:process { siginh rlimitinh };
#line 11
#line 11
# Make the transition occur by default.
#line 11
type_transition init wificond_exec:process wificond;
#line 11
#line 11
#line 1 "system/sepolicy/private/zygote.te"
# zygote
typeattribute zygote coredomain;
typeattribute zygote mlstrustedsubject;
#line 5
#line 5
# Allow the necessary permissions.
#line 5
#line 5
# Old domain may exec the file and transition to the new domain.
#line 5
allow init zygote_exec:file { getattr open read execute map };
#line 5
allow init zygote:process transition;
#line 5
# New domain is entered by executing the file.
#line 5
allow zygote zygote_exec:file { entrypoint open read execute getattr map };
#line 5
# New domain can send SIGCHLD to its caller.
#line 5
#line 5
# Enable AT_SECURE, i.e. libc secure mode.
#line 5
dontaudit init zygote:process noatsecure;
#line 5
# XXX dontaudit candidate but requires further study.
#line 5
allow init zygote:process { siginh rlimitinh };
#line 5
#line 5
# Make the transition occur by default.
#line 5
type_transition init zygote_exec:process zygote;
#line 5
#line 5
#line 6
type_transition zygote tmpfs:file zygote_tmpfs;
#line 6
allow zygote zygote_tmpfs:file { read write getattr map };
#line 6
#line 8
allow zygote runtime_event_log_tags_file:file { getattr open read ioctl lock map watch watch_reads };
#line 8
# Override DAC on files and switch uid/gid.
allow zygote self:{ capability cap_userns } { dac_override dac_read_search setgid setuid fowner chown };
# Drop capabilities from bounding set.
allow zygote self:{ capability cap_userns } setpcap;
# Switch SELinux context to app domains.
allow zygote self:process setcurrent;
allow zygote system_server_startup:process dyntransition;
allow zygote appdomain:process dyntransition;
allow zygote webview_zygote:process dyntransition;
allow zygote app_zygote:process dyntransition;
# Allow zygote to read app /proc/pid dirs (b/10455872).
allow zygote appdomain:dir { getattr search };
allow zygote appdomain:file { { getattr open read ioctl lock map watch watch_reads } };
#line 27
# Set up a type_transition to "userfaultfd" named anonymous inode object.
#line 27
type zygote_userfaultfd;
#line 27
type_transition zygote zygote:anon_inode zygote_userfaultfd "[userfaultfd]";
#line 27
# Allow domain to create/use userfaultfd anon_inode.
#line 27
allow zygote zygote_userfaultfd:anon_inode { create ioctl read };
#line 27
# Suppress errors generate during bugreport
#line 27
dontaudit su zygote_userfaultfd:anon_inode *;
#line 27
# Other domains may not use userfaultfd anon_inodes created by this domain.
#line 27
neverallow { domain -zygote } zygote_userfaultfd:anon_inode *;
#line 27
# Move children into the peer process group.
allow zygote system_server:process { getpgid setpgid };
allow zygote appdomain:process { getpgid setpgid };
allow zygote webview_zygote:process { getpgid setpgid };
allow zygote app_zygote:process { getpgid setpgid };
# Read system data.
allow zygote system_data_file:dir { open getattr read search ioctl lock watch watch_reads };
allow zygote system_data_file:file { getattr open read ioctl lock map watch watch_reads };
# Get attributes of /mnt/expand, needed by cacheNonBootClasspathClassLoaders.
allow zygote mnt_expand_file:dir getattr;
# Write to /data/dalvik-cache.
allow zygote dalvikcache_data_file:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow zygote dalvikcache_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Create symlinks in /data/dalvik-cache.
allow zygote dalvikcache_data_file:lnk_file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Write to /data/resource-cache.
allow zygote resourcecache_data_file:dir { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } };
allow zygote resourcecache_data_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# For updateability, the zygote may fetch the current boot
# classpath from the dalvik cache. Integrity of the files
# is ensured by fsverity protection (checked in art_apex_boot_integrity).
allow zygote dalvikcache_data_file:file execute;
# Allow zygote to find files in APEX data directories.
allow zygote apex_module_data_file:dir search;
# Allow zygote to find and map files created by on device signing.
allow zygote apex_art_data_file:dir { getattr search };
allow zygote apex_art_data_file:file { { getattr open read ioctl lock map watch watch_reads } execute };
# Mount tmpfs over various directories containing per-app directories, to hide
# them for app data isolation. Also traverse these directories (via
# /data_mirror) to find the allowlisted per-app directories to bind-mount in.
allow zygote {
# /data/user{,_de}, /mnt/expand/$volume/user{,_de}
system_userdir_file
# /data/data
system_data_file
# /data/misc/profiles/cur
user_profile_root_file
# /data/misc/profiles/ref
user_profile_data_file
# /storage/emulated/$userId/Android/{data,obb}
media_rw_data_file
# /dev/__properties__
properties_device
}:dir { mounton search };
# Traverse /data_mirror to get to the above directories while their normal paths
# are hidden, in order to bind-mount allowlisted per-app directories.
allow zygote mirror_data_file:dir search;
# List /mnt/expand to find all /mnt/expand/$volume/user{,_de} directories that
# need to be hidden by app data isolation, and traverse /mnt/expand to get to
# any allowlisted per-app directories within these directories.
allow zygote mnt_expand_file:dir { open read search };
# Get the inode number of app CE data directories to find them by inode number
# when CE storage is locked. Needed for app data isolation.
allow zygote app_data_file_type:dir getattr;
# Create dirs in the app data isolation tmpfs mounts and bind mount on them.
allow zygote tmpfs:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } mounton };
# Create the '/data/user/0 => /data/data' symlink in the /data/user tmpfs mount
# when setting up app data isolation.
allow zygote tmpfs:lnk_file create;
# Relabel dirs and symlinks in the app and sdk sandbox data isolation tmpfs mounts to their
# standard labels. Note: it seems that not all dirs are actually relabeled yet,
# but it works anyway since all domains can search tmpfs:dir.
allow zygote tmpfs:{ dir lnk_file } relabelfrom;
allow zygote system_userdir_file:dir relabelto;
allow zygote system_data_file:{ dir lnk_file } relabelto;
allow zygote sdk_sandbox_system_data_file:dir { getattr relabelto search };
# Read if sdcardfs is supported
allow zygote proc_filesystems:file { getattr open read ioctl lock map watch watch_reads };
# Allow zygote to create JIT memory.
allow zygote self:process execmem;
allow zygote zygote_tmpfs:file execute;
allow zygote ashmem_libcutils_device:chr_file execute;
# Execute idmap and dex2oat within zygote's own domain.
# TODO: Should either of these be transitioned to the same domain
# used by installd or stay in-domain for zygote?
allow zygote idmap_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
allow zygote dex2oat_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Allow apps access to /vendor/overlay
#line 126
allow zygote vendor_overlay_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 126
allow zygote vendor_overlay_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 126
# Control cgroups.
allow zygote cgroup:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow zygote cgroup:{ file lnk_file } { { getattr open read ioctl lock map watch watch_reads } setattr };
allow zygote cgroup_v2:dir { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } };
allow zygote cgroup_v2:{ file lnk_file } { { getattr open read ioctl lock map watch watch_reads } setattr };
allow zygote self:{ capability cap_userns } sys_admin;
# Allow zygote to stat the files that it opens. The zygote must
# be able to inspect them so that it can reopen them on fork
# if necessary: b/30963384.
allow zygote pmsg_device:chr_file getattr;
allow zygote debugfs_trace_marker:file getattr;
# Get seapp_contexts
allow zygote seapp_contexts_file:file { getattr open read ioctl lock map watch watch_reads };
# Check validity of SELinux context before use.
#line 144
#line 144
allow zygote selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 144
allow zygote selinuxfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 144
#line 144
allow zygote selinuxfs:file { open append write lock map };
#line 144
allow zygote kernel:security check_context;
#line 144
# Check SELinux permissions.
#line 146
#line 146
allow zygote selinuxfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 146
allow zygote selinuxfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 146
#line 146
allow zygote selinuxfs:file { open append write lock map };
#line 146
allow zygote kernel:security compute_av;
#line 146
allow zygote self:netlink_selinux_socket { read write create getattr setattr lock relabelfrom relabelto append bind connect listen accept getopt setopt shutdown recvfrom sendto name_bind };
#line 146
# Native bridge functionality requires that zygote replaces
# /proc/cpuinfo with /system/lib/<ISA>/cpuinfo using a bind mount
allow zygote proc_cpuinfo:file mounton;
# Allow remounting rootfs as MS_SLAVE.
allow zygote rootfs:dir mounton;
allow zygote tmpfs:filesystem { mount unmount };
allow zygote fuse:filesystem { unmount };
allow zygote sdcardfs:filesystem { unmount };
allow zygote labeledfs:filesystem { unmount };
# Allow creating user-specific storage source if started before vold.
allow zygote mnt_user_file:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } mounton };
allow zygote mnt_user_file:lnk_file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
allow zygote mnt_user_file:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Allow mounting user-specific storage source if started before vold.
allow zygote mnt_pass_through_file:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } mounton };
# Allowed to mount user-specific storage into place
allow zygote storage_file:dir { search mounton };
# Allow mounting and creating files, dirs on sdcardfs.
allow zygote { sdcard_type fuse }:dir { { create reparent rename rmdir setattr { { open getattr read search ioctl lock watch watch_reads } { open search write add_name remove_name lock } } } mounton };
allow zygote { sdcard_type fuse }:file { { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } } };
# Handle --invoke-with command when launching Zygote with a wrapper command.
allow zygote zygote_exec:file { { getattr open read ioctl lock map watch watch_reads } { getattr execute execute_no_trans map } };
# Allow zygote to write to statsd.
#line 178
allow zygote statsdw_socket:sock_file write;
#line 178
allow zygote statsd:unix_dgram_socket sendto;
#line 178
# Root fs.
#line 181
allow zygote rootfs:dir { open getattr read search ioctl lock watch watch_reads };
#line 181
allow zygote rootfs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 181
# System file accesses.
#line 184
allow zygote system_file:dir { open getattr read search ioctl lock watch watch_reads };
#line 184
allow zygote system_file:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 184
# /oem accesses.
allow zygote oemfs:dir search;
#line 193
allow zygote ion_device:chr_file { getattr open read ioctl lock map watch watch_reads };
allow zygote tmpfs:dir { open getattr read search ioctl lock watch watch_reads };
allow zygote same_process_hal_file:file { execute read open getattr map };
# Allow zygote to read build properties for attestation feature
#line 201
allow zygote build_attestation_prop:file { getattr open read map };
#line 201
# Allow the zygote to access storage properties to check if sdcardfs is enabled.
#line 204
allow zygote storage_config_prop:file { getattr open read map };
#line 204
;
# Let the zygote access overlays so it can initialize the AssetManager.
#line 207
allow zygote overlay_prop:file { getattr open read map };
#line 207
#line 208
allow zygote exported_overlay_prop:file { getattr open read map };
#line 208
# Allow the zygote to access the runtime feature flag properties.
#line 211
allow zygote device_config_runtime_native_prop:file { getattr open read map };
#line 211
#line 212
allow zygote device_config_runtime_native_boot_prop:file { getattr open read map };
#line 212
# Allow the zygote to access window manager native boot feature flags
# to initialize WindowManager static properties.
#line 216
allow zygote device_config_window_manager_native_boot_prop:file { getattr open read map };
#line 216
# ingore spurious denials
# fsetid can be checked as a consequence of chmod when using cgroup v2 uid/pid hierarchy. This is
# done to determine if the file should inherit setgid. In this case, setgid on the file is
# undesirable, so suppress the denial.
dontaudit zygote self:{ capability cap_userns } { sys_resource fsetid };
# Ignore spurious denials calling access() on fuse.
# Also ignore read and open as sdcardfs may read and open dir when app tries to access a dir that
# doesn't exist.
# TODO(b/151316657): avoid the denials
dontaudit zygote media_rw_data_file:dir { read open setattr };
# Allow zygote to use ashmem fds from system_server.
allow zygote system_server:fd use;
# Send unsolicited message to system_server
#line 234
allow zygote system_unsolzygote_socket:sock_file write;
#line 234
allow zygote system_server:unix_dgram_socket sendto;
#line 234
# Allow zygote to access media_variant_prop for static initialization
#line 237
allow zygote media_variant_prop:file { getattr open read map };
#line 237
# Allow zygote to access odsign verification status
#line 240
allow zygote odsign_prop:file { getattr open read map };
#line 240
# Allow zygote to read ro.control_privapp_permissions and ro.cp_system_other_odex
#line 243
allow zygote packagemanager_config_prop:file { getattr open read map };
#line 243
# Allow zygote to read qemu.sf.lcd_density
#line 246
allow zygote qemu_sf_lcd_density_prop:file { getattr open read map };
#line 246
# Allow zygote to read persist.wm.debug.* to toggle experimental window manager features in
# preloaded classes
#line 250
allow zygote persist_wm_debug_prop:file { getattr open read map };
#line 250
# Allow zygote to read persist_sysui_builder_extras_prop
# and persist_sysui_ranking_update_prop
# to toggle experimental features in core preloaded classes
#line 255
allow zygote persist_sysui_builder_extras_prop:file { getattr open read map };
#line 255
#line 256
allow zygote persist_sysui_ranking_update_prop:file { getattr open read map };
#line 256
# Allow zygote to read /apex/apex-info-list.xml
allow zygote apex_info_file:file { getattr open read ioctl lock map watch watch_reads };
# Allow zygote to canonicalize vendor APEX paths. This is used when zygote is checking the
# preinstalled path of APEXes that contain runtime resource overlays for the 'android' package.
allow zygote vendor_apex_file:dir { getattr search };
allow zygote vendor_apex_file:file { getattr };
allow zygote vendor_apex_metadata_file:dir { search };
# Allow zygote to query for compression/features.
#line 268
allow zygote sysfs_fs_f2fs:dir { open getattr read search ioctl lock watch watch_reads };
#line 268
allow zygote sysfs_fs_f2fs:{ file lnk_file } { getattr open read ioctl lock map watch watch_reads };
#line 268
# Allow zygote to read fonts_customization.xml for preloading font files that matches device locale.
allow zygote system_font_fallback_file:file { getattr open read ioctl lock map watch watch_reads };
###
### neverallow rules
###
# Ensure that all types assigned to app processes are included
# in the appdomain attribute, so that all allow and neverallow rules
# written on appdomain are applied to all app processes.
# This is achieved by ensuring that it is impossible for zygote to
# setcon (dyntransition) to any types other than those associated
# with appdomain plus system_server_startup, webview_zygote and
# app_zygote.
neverallow zygote ~{
appdomain
system_server_startup
webview_zygote
app_zygote
}:process dyntransition;
# Zygote should never execute anything from /data except for
# /data/dalvik-cache files or files generated during on-device
# signing under /data/misc/apexdata/com.android.art/.
neverallow zygote {
data_file_type
-apex_art_data_file # map PROT_EXEC
-dalvikcache_data_file # map PROT_EXEC
}:file { execute execute_no_trans };
# Do not allow access to Bluetooth-related system properties and files
neverallow zygote {
bluetooth_a2dp_offload_prop
bluetooth_audio_hal_prop
bluetooth_prop
exported_bluetooth_prop
}:file { create rename setattr unlink { { getattr open read ioctl lock map watch watch_reads } { open append write lock map } } };
# Zygote should not be able to access app private data.
neverallow zygote app_data_file_type:dir ~getattr;
#line 1 "system/sepolicy/private/roles_decl"
role r;
#line 1 "system/sepolicy/public/roles"
role r types domain;
#line 1 "system/sepolicy/private/users"
user u roles { r } level s0 range s0 - s0:c0.c1023;
#line 1 "system/sepolicy/private/initial_sid_contexts"
sid kernel u:r:kernel:s0
sid security u:object_r:kernel:s0
sid unlabeled u:object_r:unlabeled:s0
sid fs u:object_r:labeledfs:s0
sid file u:object_r:unlabeled:s0
sid file_labels u:object_r:unlabeled:s0
sid init u:object_r:unlabeled:s0
sid any_socket u:object_r:unlabeled:s0
sid port u:object_r:port:s0
sid netif u:object_r:netif:s0
sid netmsg u:object_r:unlabeled:s0
sid node u:object_r:node:s0
sid igmp_packet u:object_r:unlabeled:s0
sid icmp_socket u:object_r:unlabeled:s0
sid tcp_socket u:object_r:unlabeled:s0
sid sysctl_modprobe u:object_r:unlabeled:s0
sid sysctl u:object_r:proc:s0
sid sysctl_fs u:object_r:unlabeled:s0
sid sysctl_kernel u:object_r:unlabeled:s0
sid sysctl_net u:object_r:unlabeled:s0
sid sysctl_net_unix u:object_r:unlabeled:s0
sid sysctl_vm u:object_r:unlabeled:s0
sid sysctl_dev u:object_r:unlabeled:s0
sid kmod u:object_r:unlabeled:s0
sid policy u:object_r:unlabeled:s0
sid scmp_packet u:object_r:unlabeled:s0
sid devnull u:object_r:null_device:s0
#line 1 "system/sepolicy/private/fs_use"
# Label inodes via getxattr.
fs_use_xattr yaffs2 u:object_r:labeledfs:s0;
fs_use_xattr jffs2 u:object_r:labeledfs:s0;
fs_use_xattr ext2 u:object_r:labeledfs:s0;
fs_use_xattr ext3 u:object_r:labeledfs:s0;
fs_use_xattr ext4 u:object_r:labeledfs:s0;
fs_use_xattr xfs u:object_r:labeledfs:s0;
fs_use_xattr btrfs u:object_r:labeledfs:s0;
fs_use_xattr f2fs u:object_r:labeledfs:s0;
fs_use_xattr squashfs u:object_r:labeledfs:s0;
fs_use_xattr overlay u:object_r:labeledfs:s0;
fs_use_xattr erofs u:object_r:labeledfs:s0;
fs_use_xattr incremental-fs u:object_r:labeledfs:s0;
fs_use_xattr virtiofs u:object_r:labeledfs:s0;
# Label inodes from task label.
fs_use_task pipefs u:object_r:pipefs:s0;
fs_use_task sockfs u:object_r:sockfs:s0;
# Label inodes from combination of task label and fs label.
# Define type_transition rules if you want per-domain types.
fs_use_trans devpts u:object_r:devpts:s0;
fs_use_trans tmpfs u:object_r:tmpfs:s0;
fs_use_trans devtmpfs u:object_r:device:s0;
fs_use_trans shm u:object_r:shm:s0;
fs_use_trans mqueue u:object_r:mqueue:s0;
#line 1 "system/sepolicy/private/genfs_contexts"
# Label inodes with the fs label.
genfscon rootfs / u:object_r:rootfs:s0
# proc labeling can be further refined (longest matching prefix).
genfscon proc / u:object_r:proc:s0
genfscon proc /asound u:object_r:proc_asound:s0
genfscon proc /bootconfig u:object_r:proc_bootconfig:s0
genfscon proc /buddyinfo u:object_r:proc_buddyinfo:s0
genfscon proc /cmdline u:object_r:proc_cmdline:s0
genfscon proc /config.gz u:object_r:config_gz:s0
genfscon proc /cpu/alignment u:object_r:proc_cpu_alignment:s0
genfscon proc /device-tree/avf u:object_r:proc_dt_avf:s0
genfscon proc /diskstats u:object_r:proc_diskstats:s0
genfscon proc /filesystems u:object_r:proc_filesystems:s0
genfscon proc /interrupts u:object_r:proc_interrupts:s0
genfscon proc /iomem u:object_r:proc_iomem:s0
genfscon proc /kallsyms u:object_r:proc_kallsyms:s0
genfscon proc /keys u:object_r:proc_keys:s0
genfscon proc /kmsg u:object_r:proc_kmsg:s0
genfscon proc /loadavg u:object_r:proc_loadavg:s0
genfscon proc /locks u:object_r:proc_locks:s0
genfscon proc /lowmemorykiller u:object_r:proc_lowmemorykiller:s0
genfscon proc /meminfo u:object_r:proc_meminfo:s0
genfscon proc /misc u:object_r:proc_misc:s0
genfscon proc /modules u:object_r:proc_modules:s0
genfscon proc /mounts u:object_r:proc_mounts:s0
genfscon proc /net u:object_r:proc_net:s0
genfscon proc /net/tcp u:object_r:proc_net_tcp_udp:s0
genfscon proc /net/udp u:object_r:proc_net_tcp_udp:s0
genfscon proc /net/xt_qtaguid/ctrl u:object_r:proc_qtaguid_ctrl:s0
genfscon proc /net/xt_qtaguid/ u:object_r:proc_qtaguid_stat:s0
genfscon proc /cpuinfo u:object_r:proc_cpuinfo:s0
genfscon proc /pagetypeinfo u:object_r:proc_pagetypeinfo:s0
genfscon proc /pressure/cpu u:object_r:proc_pressure_cpu:s0
genfscon proc /pressure/io u:object_r:proc_pressure_io:s0
genfscon proc /pressure/memory u:object_r:proc_pressure_mem:s0
genfscon proc /slabinfo u:object_r:proc_slabinfo:s0
genfscon proc /softirqs u:object_r:proc_timer:s0
genfscon proc /stat u:object_r:proc_stat:s0
genfscon proc /swaps u:object_r:proc_swaps:s0
genfscon proc /sysrq-trigger u:object_r:proc_sysrq:s0
genfscon proc /kpageflags u:object_r:proc_kpageflags:s0
genfscon proc /sys/abi/swp u:object_r:proc_abi:s0
genfscon proc /sys/fs/pipe-max-size u:object_r:proc_pipe_conf:s0
genfscon proc /sys/fs/protected_hardlinks u:object_r:proc_security:s0
genfscon proc /sys/fs/protected_symlinks u:object_r:proc_security:s0
genfscon proc /sys/fs/suid_dumpable u:object_r:proc_security:s0
genfscon proc /sys/kernel/bpf_ u:object_r:proc_bpf:s0
genfscon proc /sys/kernel/core_pattern u:object_r:usermodehelper:s0
genfscon proc /sys/kernel/core_pipe_limit u:object_r:usermodehelper:s0
genfscon proc /sys/kernel/domainname u:object_r:proc_hostname:s0
genfscon proc /sys/kernel/dmesg_restrict u:object_r:proc_security:s0
genfscon proc /sys/kernel/hostname u:object_r:proc_hostname:s0
genfscon proc /sys/kernel/hotplug u:object_r:usermodehelper:s0
genfscon proc /sys/kernel/hung_task_ u:object_r:proc_hung_task:s0
genfscon proc /sys/kernel/kptr_restrict u:object_r:proc_security:s0
genfscon proc /sys/kernel/modprobe u:object_r:usermodehelper:s0
genfscon proc /sys/kernel/modules_disabled u:object_r:proc_security:s0
genfscon proc /sys/kernel/panic_on_oops u:object_r:proc_panic:s0
genfscon proc /sys/kernel/perf_event_max_sample_rate u:object_r:proc_perf:s0
genfscon proc /sys/kernel/perf_event_paranoid u:object_r:proc_perf:s0
genfscon proc /sys/kernel/perf_cpu_time_max_percent u:object_r:proc_perf:s0
genfscon proc /sys/kernel/perf_event_mlock_kb u:object_r:proc_perf:s0
genfscon proc /sys/kernel/pid_max u:object_r:proc_pid_max:s0
genfscon proc /sys/kernel/poweroff_cmd u:object_r:usermodehelper:s0
genfscon proc /sys/kernel/random u:object_r:proc_random:s0
genfscon proc /sys/kernel/randomize_va_space u:object_r:proc_security:s0
genfscon proc /sys/kernel/sched_child_runs_first u:object_r:proc_sched:s0
genfscon proc /sys/kernel/sched_latency_ns u:object_r:proc_sched:s0
genfscon proc /sys/kernel/sched_rt_period_us u:object_r:proc_sched:s0
genfscon proc /sys/kernel/sched_rt_runtime_us u:object_r:proc_sched:s0
genfscon proc /sys/kernel/sched_schedstats u:object_r:proc_sched:s0
genfscon proc /sys/kernel/sched_tunable_scaling u:object_r:proc_sched:s0
genfscon proc /sys/kernel/sched_util_clamp_max u:object_r:proc_sched:s0
genfscon proc /sys/kernel/sched_util_clamp_min u:object_r:proc_sched:s0
genfscon proc /sys/kernel/sched_util_clamp_min_rt_default u:object_r:proc_sched:s0
genfscon proc /sys/kernel/sched_wakeup_granularity_ns u:object_r:proc_sched:s0
genfscon proc /sys/kernel/sysrq u:object_r:proc_sysrq:s0
genfscon proc /sys/kernel/unprivileged_bpf_ u:object_r:proc_bpf:s0
genfscon proc /sys/kernel/usermodehelper u:object_r:usermodehelper:s0
genfscon proc /sys/net u:object_r:proc_net:s0
genfscon proc /sys/net/core/bpf_ u:object_r:proc_bpf:s0
genfscon proc /sys/vm/dirty_background_ratio u:object_r:proc_dirty:s0
genfscon proc /sys/vm/dirty_expire_centisecs u:object_r:proc_dirty:s0
genfscon proc /sys/vm/extra_free_kbytes u:object_r:proc_extra_free_kbytes:s0
genfscon proc /sys/vm/max_map_count u:object_r:proc_max_map_count:s0
genfscon proc /sys/vm/mmap_min_addr u:object_r:proc_security:s0
genfscon proc /sys/vm/mmap_rnd_bits u:object_r:proc_security:s0
genfscon proc /sys/vm/mmap_rnd_compat_bits u:object_r:proc_security:s0
genfscon proc /sys/vm/page-cluster u:object_r:proc_page_cluster:s0
genfscon proc /sys/vm/drop_caches u:object_r:proc_drop_caches:s0
genfscon proc /sys/vm/overcommit_memory u:object_r:proc_overcommit_memory:s0
genfscon proc /sys/vm/min_free_order_shift u:object_r:proc_min_free_order_shift:s0
genfscon proc /sys/vm/watermark_boost_factor u:object_r:proc_watermark_boost_factor:s0
genfscon proc /sys/vm/watermark_scale_factor u:object_r:proc_watermark_scale_factor:s0
genfscon proc /sys/vm/percpu_pagelist_high_fraction u:object_r:proc_percpu_pagelist_high_fraction:s0
genfscon proc /timer_list u:object_r:proc_timer:s0
genfscon proc /timer_stats u:object_r:proc_timer:s0
genfscon proc /tty/drivers u:object_r:proc_tty_drivers:s0
genfscon proc /uid/ u:object_r:proc_uid_time_in_state:s0
genfscon proc /uid_cputime/show_uid_stat u:object_r:proc_uid_cputime_showstat:s0
genfscon proc /uid_cputime/remove_uid_range u:object_r:proc_uid_cputime_removeuid:s0
genfscon proc /uid_io/stats u:object_r:proc_uid_io_stats:s0
genfscon proc /uid_procstat/set u:object_r:proc_uid_procstat_set:s0
genfscon proc /uid_time_in_state u:object_r:proc_uid_time_in_state:s0
genfscon proc /uid_concurrent_active_time u:object_r:proc_uid_concurrent_active_time:s0
genfscon proc /uid_concurrent_policy_time u:object_r:proc_uid_concurrent_policy_time:s0
genfscon proc /uid_cpupower/ u:object_r:proc_uid_cpupower:s0
genfscon proc /uptime u:object_r:proc_uptime:s0
genfscon proc /version u:object_r:proc_version:s0
genfscon proc /vmallocinfo u:object_r:proc_vmallocinfo:s0
genfscon proc /vmstat u:object_r:proc_vmstat:s0
genfscon proc /zoneinfo u:object_r:proc_zoneinfo:s0
genfscon proc /vendor_sched u:object_r:proc_vendor_sched:s0
genfscon fusectl / u:object_r:fusectlfs:s0
# selinuxfs booleans can be individually labeled.
genfscon selinuxfs / u:object_r:selinuxfs:s0
genfscon cgroup / u:object_r:cgroup:s0
genfscon cgroup2 / u:object_r:cgroup_v2:s0
# sysfs labels can be set by userspace.
genfscon sysfs / u:object_r:sysfs:s0
genfscon sysfs /devices/cs_etm u:object_r:sysfs_devices_cs_etm:s0
genfscon sysfs /devices/system/cpu u:object_r:sysfs_devices_system_cpu:s0
genfscon sysfs /class/android_usb u:object_r:sysfs_android_usb:s0
genfscon sysfs /class/extcon u:object_r:sysfs_extcon:s0
genfscon sysfs /class/gpu u:object_r:sysfs_gpu:s0
genfscon sysfs /class/leds u:object_r:sysfs_leds:s0
genfscon sysfs /class/net u:object_r:sysfs_net:s0
genfscon sysfs /class/rfkill/rfkill0/state u:object_r:sysfs_bluetooth_writable:s0
genfscon sysfs /class/rfkill/rfkill1/state u:object_r:sysfs_bluetooth_writable:s0
genfscon sysfs /class/rfkill/rfkill2/state u:object_r:sysfs_bluetooth_writable:s0
genfscon sysfs /class/rfkill/rfkill3/state u:object_r:sysfs_bluetooth_writable:s0
genfscon sysfs /class/rtc u:object_r:sysfs_rtc:s0
genfscon sysfs /class/switch u:object_r:sysfs_switch:s0
genfscon sysfs /class/wakeup u:object_r:sysfs_wakeup:s0
genfscon sysfs /devices/platform/nfc-power/nfc_power u:object_r:sysfs_nfc_power_writable:s0
genfscon sysfs /devices/virtual/android_usb u:object_r:sysfs_android_usb:s0
genfscon sysfs /devices/virtual/block/ u:object_r:sysfs_devices_block:s0
genfscon sysfs /devices/virtual/block/dm- u:object_r:sysfs_dm:s0
genfscon sysfs /devices/virtual/block/loop u:object_r:sysfs_loop:s0
genfscon sysfs /devices/virtual/block/zram0 u:object_r:sysfs_zram:s0
genfscon sysfs /devices/virtual/block/zram1 u:object_r:sysfs_zram:s0
genfscon sysfs /devices/virtual/block/zram0/uevent u:object_r:sysfs_zram_uevent:s0
genfscon sysfs /devices/virtual/block/zram1/uevent u:object_r:sysfs_zram_uevent:s0
genfscon sysfs /devices/virtual/misc/hw_random u:object_r:sysfs_hwrandom:s0
genfscon sysfs /devices/virtual/net u:object_r:sysfs_net:s0
genfscon sysfs /devices/virtual/switch u:object_r:sysfs_switch:s0
genfscon sysfs /devices/virtual/wakeup u:object_r:sysfs_wakeup:s0
genfscon sysfs /firmware/devicetree/base/avf u:object_r:sysfs_dt_avf:s0
genfscon sysfs /firmware/devicetree/base/firmware/android u:object_r:sysfs_dt_firmware_android:s0
genfscon sysfs /fs/ext4/features u:object_r:sysfs_fs_ext4_features:s0
genfscon sysfs /fs/f2fs u:object_r:sysfs_fs_f2fs:s0
genfscon sysfs /fs/fuse/bpf_prog_type_fuse u:object_r:sysfs_fs_fuse_bpf:s0
genfscon sysfs /fs/fuse/features u:object_r:sysfs_fs_fuse_features:s0
genfscon sysfs /fs/incremental-fs/features u:object_r:sysfs_fs_incfs_features:s0
genfscon sysfs /fs/incremental-fs/instances u:object_r:sysfs_fs_incfs_metrics:s0
genfscon sysfs /power/autosleep u:object_r:sysfs_power:s0
genfscon sysfs /power/state u:object_r:sysfs_power:s0
genfscon sysfs /power/suspend_stats u:object_r:sysfs_suspend_stats:s0
genfscon sysfs /power/sync_on_suspend u:object_r:sysfs_sync_on_suspend:s0
genfscon sysfs /power/wakeup_count u:object_r:sysfs_power:s0
genfscon sysfs /power/wake_lock u:object_r:sysfs_wake_lock:s0
genfscon sysfs /power/wake_unlock u:object_r:sysfs_wake_lock:s0
genfscon sysfs /kernel/memory_state_time u:object_r:sysfs_power:s0
genfscon sysfs /kernel/dma_heap u:object_r:sysfs_dma_heap:s0
genfscon sysfs /kernel/ion u:object_r:sysfs_ion:s0
genfscon sysfs /kernel/ipv4 u:object_r:sysfs_ipv4:s0
genfscon sysfs /kernel/mm/transparent_hugepage u:object_r:sysfs_transparent_hugepage:s0
genfscon sysfs /kernel/mm/lru_gen/enabled u:object_r:sysfs_lru_gen_enabled:s0
genfscon sysfs /kernel/notes u:object_r:sysfs_kernel_notes:s0
genfscon sysfs /kernel/uevent_helper u:object_r:sysfs_usermodehelper:s0
genfscon sysfs /kernel/wakeup_reasons u:object_r:sysfs_wakeup_reasons:s0
genfscon sysfs /kernel/dmabuf/buffers u:object_r:sysfs_dmabuf_stats:s0
genfscon sysfs /module/dm_verity/parameters/prefetch_cluster u:object_r:sysfs_dm_verity:s0
genfscon sysfs /module/lowmemorykiller u:object_r:sysfs_lowmemorykiller:s0
genfscon sysfs /module/tcp_cubic/parameters u:object_r:sysfs_net:s0
genfscon sysfs /module/wlan/parameters/fwpath u:object_r:sysfs_wlan_fwpath:s0
genfscon sysfs /devices/virtual/timed_output/vibrator/enable u:object_r:sysfs_vibrator:s0
genfscon sysfs /devices/virtual/misc/uhid u:object_r:sysfs_uhid:s0
genfscon sysfs /kernel/vendor_sched u:object_r:sysfs_vendor_sched:s0
genfscon sysfs /devices/uprobe u:object_r:sysfs_uprobe:s0
genfscon debugfs /kprobes u:object_r:debugfs_kprobes:s0
genfscon debugfs /mmc0 u:object_r:debugfs_mmc:s0
genfscon debugfs /tracing u:object_r:debugfs_tracing_debug:s0
genfscon tracefs / u:object_r:debugfs_tracing_debug:s0
genfscon debugfs /tracing/tracing_on u:object_r:debugfs_tracing:s0
genfscon tracefs /tracing_on u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/trace u:object_r:debugfs_tracing:s0
genfscon tracefs /trace u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/per_cpu/cpu u:object_r:debugfs_tracing:s0
genfscon tracefs /per_cpu/cpu u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/hyp u:object_r:debugfs_tracing:s0
genfscon tracefs /hyp u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/instances u:object_r:debugfs_tracing_instances:s0
genfscon tracefs /instances u:object_r:debugfs_tracing_instances:s0
genfscon debugfs /tracing/instances/bootreceiver u:object_r:debugfs_bootreceiver_tracing:s0
genfscon tracefs /instances/bootreceiver u:object_r:debugfs_bootreceiver_tracing:s0
genfscon debugfs /tracing/instances/mm_events u:object_r:debugfs_mm_events_tracing:s0
genfscon tracefs /instances/mm_events u:object_r:debugfs_mm_events_tracing:s0
genfscon debugfs /tracing/instances/wifi u:object_r:debugfs_wifi_tracing:s0
genfscon tracefs /instances/wifi u:object_r:debugfs_wifi_tracing:s0
genfscon debugfs /tracing/trace_marker u:object_r:debugfs_trace_marker:s0
genfscon tracefs /trace_marker u:object_r:debugfs_trace_marker:s0
genfscon debugfs /wakeup_sources u:object_r:debugfs_wakeup_sources:s0
genfscon debugfs /tracing/printk_formats u:object_r:debugfs_tracing_printk_formats:s0
genfscon tracefs /printk_formats u:object_r:debugfs_tracing_printk_formats:s0
genfscon debugfs /tracing/events/header_page u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/f2fs/f2fs_get_data_block/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/f2fs/f2fs_iget/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/f2fs/f2fs_sync_file_enter/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/f2fs/f2fs_sync_file_exit/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/f2fs/f2fs_write_begin/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/f2fs/f2fs_write_end/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/ext4/ext4_da_write_begin/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/ext4/ext4_da_write_end/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/ext4/ext4_es_lookup_extent_enter/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/ext4/ext4_es_lookup_extent_exit/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/ext4/ext4_load_inode/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/ext4/ext4_sync_file_enter/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/ext4/ext4_sync_file_exit/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/block/block_rq_issue/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/block/block_rq_complete/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/header_page u:object_r:debugfs_tracing:s0
genfscon tracefs /events/f2fs/f2fs_get_data_block/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/f2fs/f2fs_iget/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/f2fs/f2fs_sync_file_enter/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/f2fs/f2fs_sync_file_exit/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/f2fs/f2fs_write_begin/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/f2fs/f2fs_write_end/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/ext4/ext4_da_write_begin/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/ext4/ext4_da_write_end/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/ext4/ext4_es_lookup_extent_enter/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/ext4/ext4_es_lookup_extent_exit/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/ext4/ext4_load_inode/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/ext4/ext4_sync_file_enter/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/ext4/ext4_sync_file_exit/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/block/block_rq_issue/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/block/block_rq_complete/ u:object_r:debugfs_tracing:s0
genfscon tracefs /synthetic_events u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/synthetic_events u:object_r:debugfs_tracing:s0
genfscon tracefs /events/synthetic/rss_stat_throttled u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/synthetic/rss_stat_throttled u:object_r:debugfs_tracing:s0
genfscon tracefs /events/synthetic/suspend_resume_minimal u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/synthetic/suspend_resume_minimal u:object_r:debugfs_tracing:s0
genfscon tracefs /trace_clock u:object_r:debugfs_tracing:s0
genfscon tracefs /buffer_size_kb u:object_r:debugfs_tracing:s0
genfscon tracefs /options/overwrite u:object_r:debugfs_tracing:s0
genfscon tracefs /options/print-tgid u:object_r:debugfs_tracing:s0
genfscon tracefs /options/record-tgid u:object_r:debugfs_tracing:s0
genfscon tracefs /saved_cmdlines_size u:object_r:debugfs_tracing:s0
genfscon tracefs /events/sched/sched_switch/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/sched/sched_wakeup/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/sched/sched_wakeup_new/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/sched/sched_waking/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/sched/sched_blocked_reason/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/sched/sched_cpu_hotplug/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/sched/sched_process_exit/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/sched/sched_process_free/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/sched/sched_pi_setprio/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/cgroup/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/power/cpu_frequency/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/power/cpu_idle/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/power/clock_enable/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/power/clock_disable/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/power/clock_set_rate/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/power/cpu_frequency_limits/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/power/gpu_frequency/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/power/gpu_work_period/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/power/suspend_resume/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/cpufreq_interactive/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/vmscan/mm_vmscan_direct_reclaim_begin/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/vmscan/mm_vmscan_direct_reclaim_end/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/vmscan/mm_vmscan_kswapd_wake/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/vmscan/mm_vmscan_kswapd_sleep/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/binder/binder_transaction/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/binder/binder_transaction_received/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/binder/binder_lock/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/binder/binder_locked/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/binder/binder_unlock/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/binder/binder_transaction_alloc_buf/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/binder/binder_set_priority/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/binder/binder_command/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/binder/binder_return/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/lowmemorykiller/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/sync/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/fence/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/dma_fence/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/filemap/mm_filemap_add_to_page_cache/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/filemap/mm_filemap_delete_from_page_cache/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/kmem/rss_stat/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/kmem/ion_heap_grow/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/kmem/ion_heap_shrink/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/ion/ion_stat/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/mm_event/mm_event_record/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/oom/oom_score_adj_update/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/oom/mark_victim/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/task/task_rename/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/task/task_newtask/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/ftrace/print/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/gpu_mem/gpu_mem_total u:object_r:debugfs_tracing:s0
genfscon tracefs /events/thermal/thermal_temperature/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/thermal/cdev_update/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/cpuhp/cpuhp_enter/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/cpuhp/cpuhp_exit/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/cpuhp/cpuhp_pause/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/ipi/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/irq/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/clk/clk_enable/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/clk/clk_disable/ u:object_r:debugfs_tracing:s0
genfscon tracefs /events/clk/clk_set_rate/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/trace_clock u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/buffer_size_kb u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/options/overwrite u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/options/print-tgid u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/options/record-tgid u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/saved_cmdlines_size u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/sched/sched_switch/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/sched/sched_wakeup/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/sched/sched_wakeup_new/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/sched/sched_waking/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/sched/sched_blocked_reason/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/sched/sched_cpu_hotplug/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/sched/sched_process_exit/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/sched/sched_process_free/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/sched/sched_pi_setprio/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/cgroup/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/power/cpu_frequency/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/power/cpu_idle/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/power/clock_enable/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/power/clock_disable/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/power/clock_set_rate/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/power/cpu_frequency_limits/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/power/gpu_frequency/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/power/gpu_work_period/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/power/suspend_resume/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/cpufreq_interactive/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/vmscan/mm_vmscan_direct_reclaim_begin/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/vmscan/mm_vmscan_direct_reclaim_end/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/vmscan/mm_vmscan_kswapd_wake/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/vmscan/mm_vmscan_kswapd_sleep/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/binder/binder_transaction/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/binder/binder_transaction_received/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/binder/binder_lock/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/binder/binder_locked/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/binder/binder_unlock/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/binder/binder_transaction_alloc_buf/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/binder/binder_set_priority/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/binder/binder_command/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/binder/binder_return/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/lowmemorykiller/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/sync/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/fence/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/dma_fence/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/filemap/mm_filemap_add_to_page_cache/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/filemap/mm_filemap_delete_from_page_cache/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/kmem/rss_stat/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/kmem/ion_heap_grow/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/kmem/ion_heap_shrink/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/ion/ion_stat/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/mm_event/mm_event_record/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/oom/oom_score_adj_update/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/oom/mark_victim/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/task/task_rename/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/task/task_newtask/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/ftrace/print/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/gpu_mem/gpu_mem_total u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/thermal/thermal_temperature/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/thermal/cdev_update/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/cpuhp/cpuhp_enter/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/cpuhp/cpuhp_exit/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/ipi/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/irq/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/clk/clk_enable/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/clk/clk_disable/ u:object_r:debugfs_tracing:s0
genfscon debugfs /tracing/events/clk/clk_set_rate/ u:object_r:debugfs_tracing:s0
genfscon debugfs /kcov u:object_r:debugfs_kcov:s0
genfscon securityfs / u:object_r:securityfs:s0
genfscon binder /binder u:object_r:binder_device:s0
genfscon binder /hwbinder u:object_r:hwbinder_device:s0
genfscon binder /vndbinder u:object_r:vndbinder_device:s0
genfscon binder /binder_logs u:object_r:binderfs_logs:s0
genfscon binder /binder_logs/proc u:object_r:binderfs_logs_proc:s0
genfscon binder /binder_logs/stats u:object_r:binderfs_logs_stats:s0
genfscon binder /features u:object_r:binderfs_features:s0
genfscon inotifyfs / u:object_r:inotify:s0
genfscon vfat / u:object_r:vfat:s0
genfscon binder / u:object_r:binderfs:s0
genfscon exfat / u:object_r:exfat:s0
genfscon debugfs / u:object_r:debugfs:s0
genfscon fuse / u:object_r:fuse:s0
genfscon fuseblk / u:object_r:fuseblk:s0
genfscon configfs / u:object_r:configfs:s0
genfscon sdcardfs / u:object_r:sdcardfs:s0
genfscon esdfs / u:object_r:sdcardfs:s0
genfscon pstore / u:object_r:pstorefs:s0
genfscon functionfs / u:object_r:functionfs:s0
genfscon usbfs / u:object_r:usbfs:s0
genfscon binfmt_misc / u:object_r:binfmt_miscfs:s0
genfscon bpf / u:object_r:fs_bpf:s0
genfscon bpf /loader u:object_r:fs_bpf_loader:s0
genfscon bpf /net_private u:object_r:fs_bpf_net_private:s0
genfscon bpf /net_shared u:object_r:fs_bpf_net_shared:s0
genfscon bpf /netd_readonly u:object_r:fs_bpf_netd_readonly:s0
genfscon bpf /netd_shared u:object_r:fs_bpf_netd_shared:s0
genfscon bpf /tethering u:object_r:fs_bpf_tethering:s0
genfscon bpf /vendor u:object_r:fs_bpf_vendor:s0
genfscon bpf /uprobestats u:object_r:fs_bpf_uprobestats:s0
#line 1 "system/sepolicy/private/port_contexts"
# portcon statements go here, e.g.
# portcon tcp 80 u:object_r:http_port:s0