xref: /aosp_15_r20/system/sepolicy/prebuilts/api/202404/private/system_server.te (revision e4a36f4174b17bbab9dc043f4a65dc8d87377290)
1#
2# System Server aka system_server spawned by zygote.
3# Most of the framework services run in this process.
4#
5
6typeattribute system_server coredomain;
7typeattribute system_server mlstrustedsubject;
8typeattribute system_server remote_provisioning_service_server;
9typeattribute system_server scheduler_service_server;
10typeattribute system_server sensor_service_server;
11typeattribute system_server stats_service_server;
12typeattribute system_server bpfdomain;
13
14# Define a type for tmpfs-backed ashmem regions.
15tmpfs_domain(system_server)
16
17userfaultfd_use(system_server)
18
19# Create a socket for connections from crash_dump.
20type_transition system_server system_data_file:sock_file system_ndebug_socket "ndebugsocket";
21
22# Create a socket for connections from zygotes.
23type_transition system_server system_data_file:sock_file system_unsolzygote_socket "unsolzygotesocket";
24
25allow system_server zygote_tmpfs:file { map read };
26allow system_server appdomain_tmpfs:file { getattr map read write };
27
28# For Incremental Service to check if incfs is available
29allow system_server proc_filesystems:file r_file_perms;
30
31# To create files, get permission to fill blocks, and configure Incremental File System
32allow system_server incremental_control_file:file { ioctl r_file_perms };
33allowxperm system_server incremental_control_file:file ioctl {
34  INCFS_IOCTL_CREATE_FILE
35  INCFS_IOCTL_CREATE_MAPPED_FILE
36  INCFS_IOCTL_PERMIT_FILL
37  INCFS_IOCTL_GET_READ_TIMEOUTS
38  INCFS_IOCTL_SET_READ_TIMEOUTS
39  INCFS_IOCTL_GET_LAST_READ_ERROR
40};
41
42# To get signature of an APK installed on Incremental File System, and fill in data
43# blocks and get the filesystem state
44allowxperm system_server apk_data_file:file ioctl {
45  INCFS_IOCTL_READ_SIGNATURE
46  INCFS_IOCTL_FILL_BLOCKS
47  INCFS_IOCTL_GET_FILLED_BLOCKS
48  INCFS_IOCTL_GET_BLOCK_COUNT
49  F2FS_IOC_GET_FEATURES
50  F2FS_IOC_GET_COMPRESS_BLOCKS
51  F2FS_IOC_COMPRESS_FILE
52  F2FS_IOC_DECOMPRESS_FILE
53  F2FS_IOC_RELEASE_COMPRESS_BLOCKS
54  F2FS_IOC_RESERVE_COMPRESS_BLOCKS
55  FS_IOC_SETFLAGS
56  FS_IOC_GETFLAGS
57};
58
59allowxperm system_server apk_tmp_file:file ioctl {
60  F2FS_IOC_RELEASE_COMPRESS_BLOCKS
61  FS_IOC_GETFLAGS
62};
63
64# For Incremental Service to check incfs metrics
65allow system_server sysfs_fs_incfs_metrics:file r_file_perms;
66
67# For f2fs-compression support
68allow system_server sysfs_fs_f2fs:dir r_dir_perms;
69allow system_server sysfs_fs_f2fs:file r_file_perms;
70
71# For SdkSandboxManagerService
72allow system_server sdk_sandbox_system_data_file:dir create_dir_perms;
73
74# For art.
75allow system_server { apex_art_data_file dalvikcache_data_file }:dir r_dir_perms;
76allow system_server { apex_art_data_file dalvikcache_data_file }:file r_file_perms;
77
78# Ignore the denial on `system@[email protected]@classes.odex`.
79# `com.android.location.provider.jar` happens to be both a jar on system server classpath and a
80# shared library used by a system server app. The odex file is loaded fine by Zygote when it forks
81# system_server. It fails to be loaded when the jar is used as a shared library, which is expected.
82dontaudit system_server apex_art_data_file:file execute;
83
84# For release odex/vdex compress blocks
85allowxperm system_server dalvikcache_data_file:file ioctl {
86  F2FS_IOC_RELEASE_COMPRESS_BLOCKS
87  FS_IOC_GETFLAGS
88};
89
90# When running system server under --invoke-with, we'll try to load the boot image under the
91# system server domain, following links to the system partition.
92with_asan(`allow system_server dalvikcache_data_file:lnk_file r_file_perms;')
93
94# /data/resource-cache
95allow system_server resourcecache_data_file:file r_file_perms;
96allow system_server resourcecache_data_file:dir r_dir_perms;
97
98# ptrace to processes in the same domain for debugging crashes.
99allow system_server self:process ptrace;
100
101# Child of the zygote.
102allow system_server zygote:fd use;
103allow system_server zygote:process sigchld;
104
105# May kill zygote (or its child processes) on crashes.
106allow system_server {
107  app_zygote
108  crash_dump
109  crosvm
110  virtualizationmanager
111  webview_zygote
112  zygote
113}:process { getpgid sigkill signull };
114
115# Read /system/bin/app_process.
116allow system_server zygote_exec:file r_file_perms;
117
118# Needed to close the zygote socket, which involves getopt / getattr
119allow system_server zygote:unix_stream_socket { getopt getattr };
120
121# system server gets network and bluetooth permissions.
122net_domain(system_server)
123# in addition to ioctls allowlisted for all domains, also allow system_server
124# to use privileged ioctls commands. Needed to set up VPNs.
125allowxperm system_server self:udp_socket ioctl priv_sock_ioctls;
126bluetooth_domain(system_server)
127
128# Allow setup of tcp keepalive offload. This gives system_server the permission to
129# call ioctl on app domains' tcp sockets. Additional ioctl commands still need to
130# be granted individually, except for a small set of safe values allowlisted in
131# public/domain.te.
132allow system_server appdomain:tcp_socket ioctl;
133
134# These are the capabilities assigned by the zygote to the
135# system server.
136allow system_server self:global_capability_class_set {
137    ipc_lock
138    kill
139    net_admin
140    net_bind_service
141    net_broadcast
142    net_raw
143    sys_boot
144    sys_nice
145    sys_ptrace
146    sys_time
147    sys_tty_config
148};
149
150# Allow alarmtimers to be set
151allow system_server self:global_capability2_class_set wake_alarm;
152
153# Create and share netlink_netfilter_sockets for tetheroffload.
154allow system_server self:netlink_netfilter_socket create_socket_perms_no_ioctl;
155
156# Create/use netlink_tcpdiag_socket for looking up connection UIDs for VPN apps.
157allow system_server self:netlink_tcpdiag_socket
158    { create_socket_perms_no_ioctl nlmsg_read nlmsg_write };
159
160# Use netlink uevent sockets.
161allow system_server self:netlink_kobject_uevent_socket create_socket_perms_no_ioctl;
162
163allow system_server self:netlink_nflog_socket create_socket_perms_no_ioctl;
164
165# Use generic netlink sockets.
166allow system_server self:netlink_socket create_socket_perms_no_ioctl;
167allow system_server self:netlink_generic_socket create_socket_perms_no_ioctl;
168
169# libvintf reads the kernel config to verify vendor interface compatibility.
170allow system_server config_gz:file { read open };
171
172# Use generic "sockets" where the address family is not known
173# to the kernel. The ioctl permission is specifically omitted here, but may
174# be added to device specific policy along with the ioctl commands to be
175# allowlisted.
176allow system_server self:socket create_socket_perms_no_ioctl;
177
178# Set and get routes directly via netlink.
179allow system_server self:netlink_route_socket nlmsg_write;
180
181# Use XFRM (IPsec) netlink sockets
182allow system_server self:netlink_xfrm_socket { create_socket_perms_no_ioctl nlmsg_write nlmsg_read };
183
184# Kill apps.
185allow system_server appdomain:process { getpgid sigkill signal };
186# signull allowed for kill(pid, 0) existence test.
187allow system_server appdomain:process { signull };
188
189# Set scheduling info for apps.
190allow system_server appdomain:process { getsched setsched };
191allow system_server audioserver:process { getsched setsched };
192allow system_server hal_audio:process { getsched setsched };
193allow system_server hal_bluetooth:process { getsched setsched };
194allow system_server hal_codec2_server:process { getsched setsched };
195allow system_server hal_omx_server:process { getsched setsched };
196allow system_server mediaswcodec:process { getsched setsched };
197allow system_server cameraserver:process { getsched setsched };
198allow system_server hal_camera:process { getsched setsched };
199allow system_server mediaserver:process { getsched setsched };
200allow system_server bootanim:process { getsched setsched };
201
202# Set scheduling info for psi monitor thread.
203# TODO: delete this line b/131761776
204allow system_server kernel:process { getsched setsched };
205
206# Allow system_server to write to /proc/<pid>/*
207allow system_server domain:file w_file_perms;
208
209# Read /proc/pid data for all domains. This is used by ProcessCpuTracker
210# within system_server to keep track of memory and CPU usage for
211# all processes on the device. In addition, /proc/pid files access is needed
212# for dumping stack traces of native processes.
213r_dir_file(system_server, domain)
214
215# Write /proc/uid_cputime/remove_uid_range.
216allow system_server proc_uid_cputime_removeuid:file { w_file_perms getattr };
217
218# Write /proc/uid_procstat/set.
219allow system_server proc_uid_procstat_set:file { w_file_perms getattr };
220
221# Write to /proc/sysrq-trigger.
222allow system_server proc_sysrq:file rw_file_perms;
223
224# Delete /data/misc/stats-service/ directories.
225allow system_server stats_config_data_file:dir { open read remove_name search write };
226allow system_server stats_config_data_file:file unlink;
227
228# Read metric file & upload to statsd
229allow system_server odsign_data_file:dir search;
230allow system_server odsign_metrics_file:dir { r_dir_perms write remove_name };
231allow system_server odsign_metrics_file:file { r_file_perms unlink };
232
233# Read /sys/kernel/debug/wakeup_sources.
234no_debugfs_restriction(`
235  allow system_server debugfs_wakeup_sources:file r_file_perms;
236')
237
238# Read /sys/kernel/ion/*.
239allow system_server sysfs_ion:file r_file_perms;
240
241# Read /sys/kernel/dma_heap/*.
242allow system_server sysfs_dma_heap:file r_file_perms;
243
244# Allow reading DMA-BUF sysfs stats from /sys/kernel/dmabuf.
245allow system_server sysfs_dmabuf_stats:dir r_dir_perms;
246allow system_server sysfs_dmabuf_stats:file r_file_perms;
247
248# Allow ActivityManager to look at the list of DMA-BUF heaps from /dev/dma_heap
249# for dumpsys meminfo
250allow system_server dmabuf_heap_device:dir r_dir_perms;
251
252# Allow reading /proc/vmstat for the oom kill count
253allow system_server proc_vmstat:file r_file_perms;
254
255# The DhcpClient and WifiWatchdog use packet_sockets
256allow system_server self:packet_socket create_socket_perms_no_ioctl;
257
258# 3rd party VPN clients require a tun_socket to be created
259allow system_server self:tun_socket create_socket_perms_no_ioctl;
260
261# Talk to init and various daemons via sockets.
262unix_socket_connect(system_server, lmkd, lmkd)
263unix_socket_connect(system_server, zygote, zygote)
264unix_socket_connect(system_server, uncrypt, uncrypt)
265
266# Allow system_server to write to statsd.
267unix_socket_send(system_server, statsdw, statsd)
268
269# Communicate over a socket created by surfaceflinger.
270allow system_server surfaceflinger:unix_stream_socket { read write setopt };
271
272allow system_server gpuservice:unix_stream_socket { read write setopt };
273
274# Communicate over a socket created by webview_zygote.
275allow system_server webview_zygote:unix_stream_socket { read write connectto setopt };
276
277# Communicate over a socket created by app_zygote.
278allow system_server app_zygote:unix_stream_socket { read write connectto setopt };
279
280# Perform Binder IPC.
281binder_use(system_server)
282binder_call(system_server, appdomain)
283binder_call(system_server, artd)
284binder_call(system_server, binderservicedomain)
285binder_call(system_server, composd)
286binder_call(system_server, dexopt_chroot_setup)
287binder_call(system_server, dumpstate)
288binder_call(system_server, fingerprintd)
289binder_call(system_server, gatekeeperd)
290binder_call(system_server, gpuservice)
291binder_call(system_server, idmap)
292binder_call(system_server, installd)
293binder_call(system_server, incidentd)
294binder_call(system_server, netd)
295binder_call(system_server, ot_daemon)
296userdebug_or_eng(`binder_call(system_server, profcollectd)')
297binder_call(system_server, statsd)
298binder_call(system_server, storaged)
299binder_call(system_server, update_engine)
300binder_call(system_server, virtual_camera)
301binder_call(system_server, vold)
302binder_call(system_server, logd)
303binder_call(system_server, wificond)
304binder_call(system_server, uprobestats)
305binder_service(system_server)
306
307# Use HALs
308hal_client_domain(system_server, hal_allocator)
309hal_client_domain(system_server, hal_audio)
310hal_client_domain(system_server, hal_authgraph)
311hal_client_domain(system_server, hal_authsecret)
312hal_client_domain(system_server, hal_bluetooth)
313hal_client_domain(system_server, hal_broadcastradio)
314hal_client_domain(system_server, hal_codec2)
315hal_client_domain(system_server, hal_configstore)
316hal_client_domain(system_server, hal_contexthub)
317hal_client_domain(system_server, hal_face)
318hal_client_domain(system_server, hal_fingerprint)
319hal_client_domain(system_server, hal_gnss)
320hal_client_domain(system_server, hal_graphics_allocator)
321hal_client_domain(system_server, hal_health)
322hal_client_domain(system_server, hal_input_classifier)
323hal_client_domain(system_server, hal_input_processor)
324hal_client_domain(system_server, hal_ir)
325hal_client_domain(system_server, hal_keymint)
326hal_client_domain(system_server, hal_light)
327hal_client_domain(system_server, hal_memtrack)
328hal_client_domain(system_server, hal_neuralnetworks)
329hal_client_domain(system_server, hal_oemlock)
330hal_client_domain(system_server, hal_omx)
331hal_client_domain(system_server, hal_power)
332hal_client_domain(system_server, hal_power_stats)
333hal_client_domain(system_server, hal_rebootescrow)
334hal_client_domain(system_server, hal_remotelyprovisionedcomponent_avf)
335hal_client_domain(system_server, hal_sensors)
336hal_client_domain(system_server, hal_tetheroffload)
337hal_client_domain(system_server, hal_thermal)
338hal_client_domain(system_server, hal_threadnetwork)
339hal_client_domain(system_server, hal_tv_cec)
340hal_client_domain(system_server, hal_tv_hdmi_cec)
341hal_client_domain(system_server, hal_tv_hdmi_connection)
342hal_client_domain(system_server, hal_tv_hdmi_earc)
343hal_client_domain(system_server, hal_tv_input)
344hal_client_domain(system_server, hal_usb)
345hal_client_domain(system_server, hal_usb_gadget)
346hal_client_domain(system_server, hal_uwb)
347hal_client_domain(system_server, hal_vibrator)
348hal_client_domain(system_server, hal_vr)
349hal_client_domain(system_server, hal_weaver)
350hal_client_domain(system_server, hal_wifi)
351hal_client_domain(system_server, hal_wifi_hostapd)
352hal_client_domain(system_server, hal_wifi_supplicant)
353# The bootctl is a pass through HAL mode under recovery mode. So we skip the
354# permission for recovery in order not to give system server the access to
355# the low level block devices.
356not_recovery(`hal_client_domain(system_server, hal_bootctl)')
357
358# Talk with graphics composer fences
359allow system_server hal_graphics_composer:fd use;
360
361# Use RenderScript always-passthrough HAL
362allow system_server hal_renderscript_hwservice:hwservice_manager find;
363allow system_server same_process_hal_file:file { execute read open getattr map };
364
365# Talk to tombstoned to get ANR traces.
366unix_socket_connect(system_server, tombstoned_intercept, tombstoned)
367
368# List HAL interfaces to get ANR traces.
369allow system_server hwservicemanager:hwservice_manager list;
370allow system_server servicemanager:service_manager list;
371
372# Send signals to trigger ANR traces.
373allow system_server {
374  # This is derived from the list that system server defines as interesting native processes
375  # to dump during ANRs or watchdog aborts, defined in NATIVE_STACKS_OF_INTEREST in
376  # frameworks/base/services/core/java/com/android/server/Watchdog.java.
377  artd
378  audioserver
379  cameraserver
380  drmserver
381  gpuservice
382  inputflinger
383  keystore
384  mediadrmserver
385  mediaextractor
386  mediametrics
387  mediaserver
388  mediaswcodec
389  mediatranscoding
390  mediatuner
391  netd
392  sdcardd
393  servicemanager
394  statsd
395  surfaceflinger
396  vold
397
398  # This list comes from HAL_INTERFACES_OF_INTEREST in
399  # frameworks/base/services/core/java/com/android/server/Watchdog.java.
400  hal_audio_server
401  hal_bluetooth_server
402  hal_camera_server
403  hal_codec2_server
404  hal_face_server
405  hal_fingerprint_server
406  hal_gnss_server
407  hal_graphics_allocator_server
408  hal_graphics_composer_server
409  hal_health_server
410  hal_input_processor_server
411  hal_light_server
412  hal_neuralnetworks_server
413  hal_omx_server
414  hal_power_server
415  hal_power_stats_server
416  hal_sensors_server
417  hal_vibrator_server
418  hal_vr_server
419  system_suspend_server
420}:process { signal };
421
422# Use sockets received over binder from various services.
423allow system_server audioserver:tcp_socket rw_socket_perms;
424allow system_server audioserver:udp_socket rw_socket_perms;
425allow system_server mediaserver:tcp_socket rw_socket_perms;
426allow system_server mediaserver:udp_socket rw_socket_perms;
427
428# Use sockets received over binder from various services.
429allow system_server mediadrmserver:tcp_socket rw_socket_perms;
430allow system_server mediadrmserver:udp_socket rw_socket_perms;
431
432# Write trace data to the Perfetto traced daemon. This requires connecting to
433# its producer socket and obtaining a (per-process) tmpfs fd.
434perfetto_producer(system_server)
435
436# Get file context
437allow system_server file_contexts_file:file r_file_perms;
438# access for mac_permissions
439allow system_server mac_perms_file: file r_file_perms;
440# Check SELinux permissions.
441selinux_check_access(system_server)
442
443allow system_server sysfs_type:dir r_dir_perms;
444
445r_dir_file(system_server, sysfs_android_usb)
446allow system_server sysfs_android_usb:file w_file_perms;
447
448r_dir_file(system_server, sysfs_extcon)
449
450r_dir_file(system_server, sysfs_ipv4)
451allow system_server sysfs_ipv4:file w_file_perms;
452
453r_dir_file(system_server, sysfs_rtc)
454r_dir_file(system_server, sysfs_switch)
455
456allow system_server sysfs_nfc_power_writable:file rw_file_perms;
457allow system_server sysfs_power:dir search;
458allow system_server sysfs_power:file rw_file_perms;
459allow system_server sysfs_thermal:dir search;
460allow system_server sysfs_thermal:file r_file_perms;
461allow system_server sysfs_uhid:dir r_dir_perms;
462allow system_server sysfs_uhid:file rw_file_perms;
463
464# TODO: Remove when HALs are forced into separate processes
465allow system_server sysfs_vibrator:file { write append };
466
467# TODO: added to match above sysfs rule. Remove me?
468allow system_server sysfs_usb:file w_file_perms;
469
470# Access devices.
471allow system_server device:dir r_dir_perms;
472allow system_server mdns_socket:sock_file rw_file_perms;
473allow system_server gpu_device:chr_file rw_file_perms;
474allow system_server gpu_device:dir r_dir_perms;
475allow system_server sysfs_gpu:file r_file_perms;
476allow system_server input_device:dir r_dir_perms;
477allow system_server input_device:chr_file rw_file_perms;
478allow system_server tty_device:chr_file rw_file_perms;
479allow system_server usbaccessory_device:chr_file rw_file_perms;
480allow system_server video_device:dir r_dir_perms;
481allow system_server video_device:chr_file rw_file_perms;
482allow system_server adbd_socket:sock_file rw_file_perms;
483allow system_server rtc_device:chr_file rw_file_perms;
484allow system_server audio_device:dir r_dir_perms;
485allow system_server uhid_device:chr_file rw_file_perms;
486allow system_server hidraw_device:dir r_dir_perms;
487allow system_server hidraw_device:chr_file rw_file_perms;
488
489# write access to ALSA interfaces (/dev/snd/*) needed for MIDI
490allow system_server audio_device:chr_file rw_file_perms;
491
492# tun device used for 3rd party vpn apps and test network manager
493allow system_server tun_device:chr_file rw_file_perms;
494allowxperm system_server tun_device:chr_file ioctl { TUNGETIFF TUNSETIFF TUNSETLINK TUNSETCARRIER };
495
496# Manage data/ota_package
497allow system_server ota_package_file:dir rw_dir_perms;
498allow system_server ota_package_file:file create_file_perms;
499
500# Manage system data files.
501allow system_server system_data_file:dir create_dir_perms;
502allow system_server system_data_file:notdevfile_class_set create_file_perms;
503allow system_server packages_list_file:file create_file_perms;
504allow system_server game_mode_intervention_list_file:file create_file_perms;
505allow system_server keychain_data_file:dir create_dir_perms;
506allow system_server keychain_data_file:file create_file_perms;
507allow system_server keychain_data_file:lnk_file create_file_perms;
508
509# Read the user parent directories like /data/user.  Don't allow write access,
510# as vold is responsible for creating and deleting the subdirectories.
511allow system_server system_userdir_file:dir r_dir_perms;
512
513# Manage /data/app.
514allow system_server apk_data_file:dir create_dir_perms;
515allow system_server apk_data_file:{ file lnk_file } { create_file_perms link };
516allow system_server apk_tmp_file:dir create_dir_perms;
517allow system_server apk_tmp_file:file create_file_perms;
518
519# Access input configuration files in the /vendor directory
520r_dir_file(system_server, vendor_keylayout_file)
521r_dir_file(system_server, vendor_keychars_file)
522r_dir_file(system_server, vendor_idc_file)
523get_prop(system_server, input_device_config_prop)
524
525# Access /vendor/{app,framework,overlay}
526r_dir_file(system_server, vendor_app_file)
527r_dir_file(system_server, vendor_framework_file)
528r_dir_file(system_server, vendor_overlay_file)
529
530# Manage /data/app-private.
531allow system_server apk_private_data_file:dir create_dir_perms;
532allow system_server apk_private_data_file:file create_file_perms;
533allow system_server apk_private_tmp_file:dir create_dir_perms;
534allow system_server apk_private_tmp_file:file create_file_perms;
535
536# Manage files within asec containers.
537allow system_server asec_apk_file:dir create_dir_perms;
538allow system_server asec_apk_file:file create_file_perms;
539allow system_server asec_public_file:file create_file_perms;
540
541# Manage /data/anr.
542#
543# TODO: Some of these permissions can be withdrawn once we've switched to the
544# new stack dumping mechanism, see b/32064548 and the rules below. In particular,
545# the system_server should never need to create a new anr_data_file:file or write
546# to one, but it will still need to read and append to existing files.
547allow system_server anr_data_file:dir create_dir_perms;
548allow system_server anr_data_file:file create_file_perms;
549
550# New stack dumping scheme : request an output FD from tombstoned via a unix
551# domain socket.
552#
553# Allow system_server to connect and write to the tombstoned java trace socket in
554# order to dump its traces. Also allow the system server to write its traces to
555# dumpstate during bugreport capture and incidentd during incident collection.
556unix_socket_connect(system_server, tombstoned_java_trace, tombstoned)
557allow system_server tombstoned:fd use;
558allow system_server dumpstate:fifo_file append;
559allow system_server incidentd:fifo_file append;
560# Write to a pipe created from `adb shell` (for debuggerd -j `pidof system_server`)
561userdebug_or_eng(`
562  allow system_server su:fifo_file append;
563')
564
565# Allow system_server to read pipes from incidentd (used to deliver incident reports
566# to dropbox)
567allow system_server incidentd:fifo_file read;
568
569# Read /data/misc/incidents - only read. The fd will be sent over binder,
570# with no DAC access to it, for dropbox to read.
571allow system_server incident_data_file:file read;
572
573# Manage /data/misc/prereboot.
574allow system_server prereboot_data_file:dir rw_dir_perms;
575allow system_server prereboot_data_file:file create_file_perms;
576
577# Allow tracing proxy service to read traces. Only the fd is sent over
578# binder.
579allow system_server perfetto_traces_data_file:file { read getattr };
580allow system_server perfetto:fd use;
581
582# Allow system_server to exec the perfetto cmdline client and pass it a trace config
583domain_auto_trans(system_server, perfetto_exec, perfetto);
584allow system_server perfetto:fifo_file { read write };
585
586# Allow system server to manage perfetto traces for ProfilingService.
587allow system_server perfetto_traces_profiling_data_file:dir rw_dir_perms;
588allow system_server perfetto_traces_profiling_data_file:file { rw_file_perms unlink };
589allow system_server perfetto_traces_data_file:dir search;
590
591# Manage /data/backup.
592allow system_server backup_data_file:dir create_dir_perms;
593allow system_server backup_data_file:file create_file_perms;
594
595# Write to /data/system/dropbox
596allow system_server dropbox_data_file:dir create_dir_perms;
597allow system_server dropbox_data_file:file create_file_perms;
598
599# Write to /data/system/heapdump
600allow system_server heapdump_data_file:dir rw_dir_perms;
601allow system_server heapdump_data_file:file create_file_perms;
602
603# Manage /data/misc/adb.
604allow system_server adb_keys_file:dir create_dir_perms;
605allow system_server adb_keys_file:file create_file_perms;
606
607# Manage /data/misc/appcompat.
608allow system_server appcompat_data_file:dir rw_dir_perms;
609allow system_server appcompat_data_file:file create_file_perms;
610
611# Manage /data/misc/emergencynumberdb
612allow system_server emergency_data_file:dir create_dir_perms;
613allow system_server emergency_data_file:file create_file_perms;
614
615# Manage /data/misc/network_watchlist
616allow system_server network_watchlist_data_file:dir create_dir_perms;
617allow system_server network_watchlist_data_file:file create_file_perms;
618
619# Manage /data/misc/sms.
620# TODO:  Split into a separate type?
621allow system_server radio_data_file:dir create_dir_perms;
622allow system_server radio_data_file:file create_file_perms;
623
624# Manage /data/misc/systemkeys.
625allow system_server systemkeys_data_file:dir create_dir_perms;
626allow system_server systemkeys_data_file:file create_file_perms;
627
628# Manage /data/misc/textclassifier.
629allow system_server textclassifier_data_file:dir create_dir_perms;
630allow system_server textclassifier_data_file:file create_file_perms;
631
632# Manage /data/tombstones.
633allow system_server tombstone_data_file:dir rw_dir_perms;
634allow system_server tombstone_data_file:file create_file_perms;
635
636# Manage /data/misc/vpn.
637allow system_server vpn_data_file:dir create_dir_perms;
638allow system_server vpn_data_file:file create_file_perms;
639
640# Manage /data/misc/wifi.
641allow system_server wifi_data_file:dir create_dir_perms;
642allow system_server wifi_data_file:file create_file_perms;
643
644# Manage /data/app-staging.
645allow system_server staging_data_file:dir create_dir_perms;
646allow system_server staging_data_file:file create_file_perms;
647
648# Manage /data/rollback.
649allow system_server staging_data_file:{ file lnk_file } { create_file_perms link };
650
651# Walk /data/data subdirectories.
652allow system_server app_data_file_type:dir { getattr read search };
653
654# Also permit for unlabeled /data/data subdirectories and
655# for unlabeled asec containers on upgrades from 4.2.
656allow system_server unlabeled:dir r_dir_perms;
657# Read pkg.apk file before it has been relabeled by vold.
658allow system_server unlabeled:file r_file_perms;
659
660# Populate com.android.providers.settings/databases/settings.db.
661allow system_server system_app_data_file:dir create_dir_perms;
662allow system_server system_app_data_file:file create_file_perms;
663
664# Receive and use open app data files passed over binder IPC.
665allow system_server app_data_file_type:file { getattr read write append map };
666
667# Access to /data/media for measuring disk usage.
668allow system_server media_rw_data_file:dir { search getattr open read };
669
670# Receive and use open /data/media files passed over binder IPC.
671# Also used for measuring disk usage.
672allow system_server media_rw_data_file:file { getattr read write append };
673
674# System server needs to setfscreate to packages_list_file when writing
675# /data/system/packages.list
676allow system_server system_server:process setfscreate;
677
678# Relabel apk files.
679allow system_server { apk_tmp_file apk_private_tmp_file }:{ dir file } { relabelfrom relabelto };
680allow system_server { apk_data_file apk_private_data_file }:{ dir file } { relabelfrom relabelto };
681# Allow PackageManager to:
682# 1. rename file from /data/app-staging folder to /data/app
683# 2. relabel files (linked to /data/rollback) under /data/app-staging
684# during staged apk/apex install.
685allow system_server { staging_data_file }:{ dir file } { relabelfrom relabelto };
686
687# Relabel wallpaper.
688allow system_server system_data_file:file relabelfrom;
689allow system_server wallpaper_file:file relabelto;
690allow system_server wallpaper_file:file { rw_file_perms rename unlink };
691
692# Backup of wallpaper imagery uses temporary hard links to avoid data churn
693allow system_server { system_data_file wallpaper_file }:file link;
694
695# ShortcutManager icons
696allow system_server system_data_file:dir relabelfrom;
697allow system_server shortcut_manager_icons:dir { create_dir_perms relabelto };
698allow system_server shortcut_manager_icons:file create_file_perms;
699
700# Manage ringtones.
701allow system_server ringtone_file:dir { create_dir_perms relabelto };
702allow system_server ringtone_file:file create_file_perms;
703
704# Relabel icon file.
705allow system_server icon_file:file relabelto;
706allow system_server icon_file:file { rw_file_perms unlink };
707
708# FingerprintService.java does a restorecon of the directory /data/system/users/[0-9]+/fpdata(/.*)?
709allow system_server system_data_file:dir relabelfrom;
710
711# server_configurable_flags_data_file is used for storing server configurable flags which
712# have been reset during current booting. system_server needs to read the data to perform related
713# disaster recovery actions.
714allow system_server server_configurable_flags_data_file:dir r_dir_perms;
715allow system_server server_configurable_flags_data_file:file r_file_perms;
716
717# Property Service write
718set_prop(system_server, system_prop)
719set_prop(system_server, bootanim_system_prop)
720set_prop(system_server, bluetooth_prop)
721set_prop(system_server, exported_system_prop)
722set_prop(system_server, exported3_system_prop)
723set_prop(system_server, safemode_prop)
724set_prop(system_server, theme_prop)
725set_prop(system_server, dhcp_prop)
726set_prop(system_server, net_connectivity_prop)
727set_prop(system_server, net_radio_prop)
728set_prop(system_server, net_dns_prop)
729set_prop(system_server, usb_control_prop)
730set_prop(system_server, usb_prop)
731set_prop(system_server, debug_prop)
732set_prop(system_server, powerctl_prop)
733set_prop(system_server, fingerprint_prop)
734set_prop(system_server, device_logging_prop)
735set_prop(system_server, dumpstate_options_prop)
736set_prop(system_server, overlay_prop)
737set_prop(system_server, exported_overlay_prop)
738set_prop(system_server, pm_prop)
739set_prop(system_server, exported_pm_prop)
740set_prop(system_server, socket_hook_prop)
741set_prop(system_server, audio_prop)
742set_prop(system_server, boot_status_prop)
743set_prop(system_server, surfaceflinger_color_prop)
744set_prop(system_server, provisioned_prop)
745set_prop(system_server, retaildemo_prop)
746set_prop(system_server, dmesgd_start_prop)
747set_prop(system_server, locale_prop)
748set_prop(system_server, timezone_metadata_prop)
749set_prop(system_server, timezone_prop)
750set_prop(system_server, crashrecovery_prop)
751userdebug_or_eng(`set_prop(system_server, wifi_log_prop)')
752userdebug_or_eng(`set_prop(system_server, system_user_mode_emulation_prop)')
753
754# ctl interface
755set_prop(system_server, ctl_default_prop)
756set_prop(system_server, ctl_bugreport_prop)
757set_prop(system_server, ctl_gsid_prop)
758
759# cppreopt property
760set_prop(system_server, cppreopt_prop)
761
762# server configurable flags properties
763set_prop(system_server, device_config_core_experiments_team_internal_prop)
764set_prop(system_server, device_config_edgetpu_native_prop)
765set_prop(system_server, device_config_input_native_boot_prop)
766set_prop(system_server, device_config_netd_native_prop)
767set_prop(system_server, device_config_nnapi_native_prop)
768set_prop(system_server, device_config_activity_manager_native_boot_prop)
769set_prop(system_server, device_config_runtime_native_boot_prop)
770set_prop(system_server, device_config_runtime_native_prop)
771set_prop(system_server, device_config_lmkd_native_prop)
772set_prop(system_server, device_config_media_native_prop)
773set_prop(system_server, device_config_camera_native_prop)
774set_prop(system_server, device_config_mglru_native_prop)
775set_prop(system_server, device_config_profcollect_native_boot_prop)
776set_prop(system_server, device_config_statsd_native_prop)
777set_prop(system_server, device_config_statsd_native_boot_prop)
778set_prop(system_server, device_config_storage_native_boot_prop)
779set_prop(system_server, device_config_swcodec_native_prop)
780set_prop(system_server, device_config_sys_traced_prop)
781set_prop(system_server, device_config_window_manager_native_boot_prop)
782set_prop(system_server, device_config_configuration_prop)
783set_prop(system_server, device_config_connectivity_prop)
784set_prop(system_server, device_config_surface_flinger_native_boot_prop)
785set_prop(system_server, device_config_aconfig_flags_prop)
786set_prop(system_server, device_config_vendor_system_native_prop)
787set_prop(system_server, device_config_vendor_system_native_boot_prop)
788set_prop(system_server, device_config_virtualization_framework_native_prop)
789set_prop(system_server, device_config_memory_safety_native_boot_prop)
790set_prop(system_server, device_config_memory_safety_native_prop)
791set_prop(system_server, device_config_remote_key_provisioning_native_prop)
792set_prop(system_server, device_config_tethering_u_or_later_native_prop)
793set_prop(system_server, smart_idle_maint_enabled_prop)
794set_prop(system_server, arm64_memtag_prop)
795
796# staged flag properties
797set_prop(system_server, next_boot_prop)
798
799# Allow query ART device config properties
800get_prop(system_server, device_config_runtime_native_boot_prop)
801get_prop(system_server, device_config_runtime_native_prop)
802
803# BootReceiver to read ro.boot.bootreason
804get_prop(system_server, bootloader_boot_reason_prop)
805# PowerManager to read sys.boot.reason
806get_prop(system_server, system_boot_reason_prop)
807
808# Collect metrics on boot time created by init
809get_prop(system_server, boottime_prop)
810
811# Read device's serial number from system properties
812get_prop(system_server, serialno_prop)
813
814# Read/write the property which keeps track of whether this is the first start of system_server
815set_prop(system_server, firstboot_prop)
816
817# Audio service in system server can read audio config properties,
818# such as camera shutter enforcement
819get_prop(system_server, audio_config_prop)
820
821# StorageManager service reads media config while checking if transcoding is supported.
822get_prop(system_server, media_config_prop)
823
824# system server reads this property to keep track of whether server configurable flags have been
825# reset during current boot.
826get_prop(system_server, device_config_reset_performed_prop)
827
828# Read/write the property that enables Test Harness Mode
829set_prop(system_server, test_harness_prop)
830
831# Read gsid.image_running.
832get_prop(system_server, gsid_prop)
833
834# Read the property that mocks an OTA
835get_prop(system_server, mock_ota_prop)
836
837# Read the property as feature flag for protecting apks with fs-verity.
838get_prop(system_server, apk_verity_prop)
839
840# Read wifi.interface
841get_prop(system_server, wifi_prop)
842
843# Read the vendor property that indicates if Incremental features is enabled
844get_prop(system_server, incremental_prop)
845
846# Read ro.zram. properties
847get_prop(system_server, zram_config_prop)
848
849# Read/write persist.sys.zram_enabled
850set_prop(system_server, zram_control_prop)
851
852# Read/write persist.sys.dalvik.vm.lib.2
853set_prop(system_server, dalvik_runtime_prop)
854
855# Read ro.control_privapp_permissions and ro.cp_system_other_odex
856get_prop(system_server, packagemanager_config_prop)
857
858# Read the net.464xlat.cellular.enabled property (written by init).
859get_prop(system_server, net_464xlat_fromvendor_prop)
860
861# Read hypervisor capabilities ro.boot.hypervisor.*
862get_prop(system_server, hypervisor_prop)
863
864# Read persist.wm.debug. properties
865get_prop(system_server, persist_wm_debug_prop)
866
867# Read persist.sysui.notification.builder_extras_override property
868get_prop(system_server, persist_sysui_builder_extras_prop)
869# Read persist.sysui.notification.ranking_update_ashmem property
870get_prop(system_server, persist_sysui_ranking_update_prop)
871
872# Read ro.tuner.lazyhal
873get_prop(system_server, tuner_config_prop)
874# Write tuner.server.enable
875set_prop(system_server, tuner_server_ctl_prop)
876
877# Allow the heap dump ART plugin to the count of sessions waiting for OOME
878get_prop(system_server, traced_oome_heap_session_count_prop)
879
880# Allow the sensor service (running in the system service) to read sensor
881# configuration properties
882get_prop(system_server, sensors_config_prop)
883
884# Create a socket for connections from debuggerd.
885allow system_server system_ndebug_socket:sock_file create_file_perms;
886
887# Create a socket for connections from zygotes.
888allow system_server system_unsolzygote_socket:sock_file create_file_perms;
889
890# Manage cache files.
891allow system_server cache_file:lnk_file r_file_perms;
892allow system_server { cache_file cache_recovery_file }:dir { relabelfrom create_dir_perms };
893allow system_server { cache_file cache_recovery_file }:file { relabelfrom create_file_perms };
894allow system_server { cache_file cache_recovery_file }:fifo_file create_file_perms;
895
896allow system_server system_file:dir r_dir_perms;
897allow system_server system_file:lnk_file r_file_perms;
898
899# ART locks profile files.
900allow system_server system_file:file lock;
901
902# LocationManager(e.g, GPS) needs to read and write
903# to uart driver and ctrl proc entry
904allow system_server gps_control:file rw_file_perms;
905
906# Allow system_server to use app-created sockets and pipes.
907allow system_server appdomain:{ tcp_socket udp_socket } { getattr getopt setopt read write shutdown };
908allow system_server appdomain:{ fifo_file unix_stream_socket } { getattr read write };
909
910# BackupManagerService needs to manipulate backup data files
911allow system_server cache_backup_file:dir rw_dir_perms;
912allow system_server cache_backup_file:file create_file_perms;
913# LocalTransport works inside /cache/backup
914allow system_server cache_private_backup_file:dir create_dir_perms;
915allow system_server cache_private_backup_file:file create_file_perms;
916
917# Allow system to talk to usb device
918allow system_server usb_device:chr_file rw_file_perms;
919allow system_server usb_device:dir r_dir_perms;
920
921# Read and delete files under /dev/fscklogs.
922r_dir_file(system_server, fscklogs)
923allow system_server fscklogs:dir { write remove_name add_name };
924allow system_server fscklogs:file rename;
925
926# logd access, system_server inherit logd write socket
927# (urge is to deprecate this long term)
928allow system_server zygote:unix_dgram_socket write;
929
930# Read from log daemon.
931read_logd(system_server)
932read_runtime_log_tags(system_server)
933
934# Be consistent with DAC permissions. Allow system_server to write to
935# /sys/module/lowmemorykiller/parameters/adj
936# /sys/module/lowmemorykiller/parameters/minfree
937allow system_server sysfs_lowmemorykiller:file { getattr w_file_perms };
938
939# Read /sys/fs/pstore/console-ramoops
940# Don't worry about overly broad permissions for now, as there's
941# only one file in /sys/fs/pstore
942allow system_server pstorefs:dir r_dir_perms;
943allow system_server pstorefs:file r_file_perms;
944
945# /sys access
946allow system_server sysfs_zram:dir search;
947allow system_server sysfs_zram:file rw_file_perms;
948
949# Read /sys/fs/selinux/policy
950allow system_server kernel:security read_policy;
951
952add_service(system_server, system_server_service);
953allow system_server artd_service:service_manager find;
954allow system_server artd_pre_reboot_service:service_manager find;
955allow system_server audioserver_service:service_manager find;
956allow system_server authorization_service:service_manager find;
957allow system_server batteryproperties_service:service_manager find;
958allow system_server cameraserver_service:service_manager find;
959allow system_server compos_service:service_manager find;
960allow system_server dataloader_manager_service:service_manager find;
961allow system_server dexopt_chroot_setup_service:service_manager find;
962allow system_server dnsresolver_service:service_manager find;
963allow system_server drmserver_service:service_manager find;
964allow system_server dumpstate_service:service_manager find;
965allow system_server fingerprintd_service:service_manager find;
966allow system_server gatekeeper_service:service_manager find;
967allow system_server gpu_service:service_manager find;
968allow system_server gsi_service:service_manager find;
969allow system_server idmap_service:service_manager find;
970allow system_server incident_service:service_manager find;
971allow system_server incremental_service:service_manager find;
972allow system_server installd_service:service_manager find;
973allow system_server keystore_maintenance_service:service_manager find;
974allow system_server keystore_metrics_service:service_manager find;
975allow system_server keystore_service:service_manager find;
976allow system_server mdns_service:service_manager find;
977allow system_server mediaserver_service:service_manager find;
978allow system_server mediametrics_service:service_manager find;
979allow system_server mediaextractor_service:service_manager find;
980allow system_server mediadrmserver_service:service_manager find;
981allow system_server mediatuner_service:service_manager find;
982allow system_server netd_service:service_manager find;
983allow system_server nfc_service:service_manager find;
984allow system_server ot_daemon_service:service_manager find;
985allow system_server radio_service:service_manager find;
986allow system_server stats_service:service_manager find;
987allow system_server storaged_service:service_manager find;
988allow system_server surfaceflinger_service:service_manager find;
989allow system_server update_engine_service:service_manager find;
990allow system_server virtual_camera_service:service_manager find;
991is_flag_enabled(RELEASE_AVF_ENABLE_LLPVM_CHANGES, `
992    allow system_server virtualization_maintenance_service:service_manager find;
993')
994allow system_server vold_service:service_manager find;
995allow system_server wifinl80211_service:service_manager find;
996allow system_server logd_service:service_manager find;
997userdebug_or_eng(`
998  allow system_server profcollectd_service:service_manager find;
999')
1000
1001add_service(system_server, batteryproperties_service)
1002
1003allow system_server keystore:keystore2 {
1004	add_auth
1005	change_password
1006	change_user
1007	clear_ns
1008	clear_uid
1009	get_last_auth_time
1010	lock
1011	pull_metrics
1012	reset
1013	unlock
1014};
1015
1016allow system_server keystore:keystore2_key {
1017	delete
1018	use_dev_id
1019	grant
1020	get_info
1021	rebind
1022	update
1023	use
1024};
1025
1026# Allow Wifi module to manage Wi-Fi keys.
1027allow system_server wifi_key:keystore2_key {
1028	delete
1029	get_info
1030	rebind
1031	update
1032	use
1033};
1034
1035# Allow lock_settings service to manage RoR keys.
1036allow system_server resume_on_reboot_key:keystore2_key {
1037	delete
1038	get_info
1039	rebind
1040	update
1041	use
1042};
1043
1044# Allow lock_settings service to manage locksettings keys (e.g. the synthetic password key).
1045allow system_server locksettings_key:keystore2_key {
1046	delete
1047	get_info
1048	rebind
1049	update
1050	use
1051};
1052
1053
1054# Allow system server to search and write to the persistent factory reset
1055# protection partition. This block device does not get wiped in a factory reset.
1056allow system_server block_device:dir search;
1057allow system_server frp_block_device:blk_file rw_file_perms;
1058allowxperm system_server frp_block_device:blk_file ioctl { BLKSECDISCARD BLKDISCARD };
1059
1060# Create new process groups and clean up old cgroups
1061allow system_server cgroup:dir create_dir_perms;
1062allow system_server cgroup:file setattr;
1063allow system_server cgroup_v2:dir create_dir_perms;
1064allow system_server cgroup_v2:file { r_file_perms setattr };
1065
1066# /oem access
1067r_dir_file(system_server, oemfs)
1068
1069# Allow resolving per-user storage symlinks
1070allow system_server { mnt_user_file storage_file }:dir { getattr search };
1071allow system_server { mnt_user_file storage_file }:lnk_file { getattr read };
1072
1073# Allow statfs() on storage devices, which happens fast enough that
1074# we shouldn't be killed during unsafe removal
1075allow system_server { sdcard_type fuse }:dir { getattr search };
1076
1077# Traverse into expanded storage
1078allow system_server mnt_expand_file:dir r_dir_perms;
1079
1080# Allow system process to relabel the fingerprint directory after mkdir
1081# and delete the directory and files when no longer needed
1082allow system_server fingerprintd_data_file:dir { r_dir_perms remove_name rmdir relabelto write };
1083allow system_server fingerprintd_data_file:file { getattr unlink };
1084
1085userdebug_or_eng(`
1086  # Allow system server to create and write method traces in /data/misc/trace.
1087  allow system_server method_trace_data_file:dir w_dir_perms;
1088  allow system_server method_trace_data_file:file { create w_file_perms };
1089
1090  # Allow system server to read dmesg
1091  allow system_server kernel:system syslog_read;
1092
1093  # Allow writing and removing window traces in /data/misc/wmtrace.
1094  allow system_server wm_trace_data_file:dir rw_dir_perms;
1095  allow system_server wm_trace_data_file:file { getattr setattr create unlink w_file_perms };
1096
1097  # Allow writing and removing accessibility traces in /data/misc/a11ytrace.
1098  allow system_server accessibility_trace_data_file:dir rw_dir_perms;
1099  allow system_server accessibility_trace_data_file:file { getattr setattr create unlink w_file_perms };
1100')
1101
1102# For AppFuse.
1103allow system_server vold:fd use;
1104allow system_server fuse_device:chr_file { read write ioctl getattr };
1105allow system_server app_fuse_file:file { read write getattr };
1106
1107# For configuring sdcardfs
1108allow system_server configfs:dir { create_dir_perms };
1109allow system_server configfs:file { getattr open create unlink write };
1110
1111# Connect to adbd and use a socket transferred from it.
1112# Used for e.g. jdwp.
1113allow system_server adbd:unix_stream_socket connectto;
1114allow system_server adbd:fd use;
1115allow system_server adbd:unix_stream_socket { getattr getopt ioctl read write shutdown };
1116
1117# Read service.adb.tls.port, persist.adb.wifi. properties
1118get_prop(system_server, adbd_prop)
1119
1120# Set persist.adb.tls_server.enable property
1121set_prop(system_server, system_adbd_prop)
1122
1123# Allow invoking tools like "timeout"
1124allow system_server toolbox_exec:file rx_file_perms;
1125
1126# Allow system process to setup fs-verity
1127allowxperm system_server { apk_data_file apk_tmp_file system_data_file apex_system_server_data_file }:file ioctl FS_IOC_ENABLE_VERITY;
1128
1129# Allow system process to measure fs-verity for apps, including those being installed
1130allowxperm system_server { apk_data_file apk_tmp_file }:file ioctl FS_IOC_MEASURE_VERITY;
1131allowxperm system_server apk_tmp_file:file ioctl FS_IOC_SETFLAGS;
1132
1133# Postinstall
1134#
1135# For OTA dexopt, allow calls coming from postinstall.
1136binder_call(system_server, postinstall)
1137
1138allow system_server postinstall:fifo_file write;
1139allow system_server update_engine:fd use;
1140allow system_server update_engine:fifo_file write;
1141
1142# Access to /data/preloads
1143allow system_server preloads_data_file:file { r_file_perms unlink };
1144allow system_server preloads_data_file:dir { r_dir_perms write remove_name rmdir };
1145allow system_server preloads_media_file:file { r_file_perms unlink };
1146allow system_server preloads_media_file:dir { r_dir_perms write remove_name rmdir };
1147
1148r_dir_file(system_server, cgroup)
1149r_dir_file(system_server, cgroup_v2)
1150allow system_server ion_device:chr_file r_file_perms;
1151
1152# Access to /dev/dma_heap/system
1153allow system_server dmabuf_system_heap_device:chr_file r_file_perms;
1154# Access to /dev/dma_heap/system-secure
1155allow system_server dmabuf_system_secure_heap_device:chr_file r_file_perms;
1156
1157r_dir_file(system_server, proc_asound)
1158r_dir_file(system_server, proc_net_type)
1159r_dir_file(system_server, proc_qtaguid_stat)
1160allow system_server {
1161  proc_cmdline
1162  proc_loadavg
1163  proc_locks
1164  proc_meminfo
1165  proc_pagetypeinfo
1166  proc_pipe_conf
1167  proc_stat
1168  proc_uid_cputime_showstat
1169  proc_uid_io_stats
1170  proc_uid_time_in_state
1171  proc_uid_concurrent_active_time
1172  proc_uid_concurrent_policy_time
1173  proc_version
1174  proc_vmallocinfo
1175}:file r_file_perms;
1176
1177allow system_server proc_uid_time_in_state:dir r_dir_perms;
1178allow system_server proc_uid_cpupower:file r_file_perms;
1179
1180r_dir_file(system_server, rootfs)
1181
1182# Allow WifiService to start, stop, and read wifi-specific trace events.
1183allow system_server debugfs_tracing_instances:dir search;
1184allow system_server debugfs_wifi_tracing:dir search;
1185allow system_server debugfs_wifi_tracing:file rw_file_perms;
1186
1187# Allow BootReceiver to watch trace error_report events.
1188allow system_server debugfs_bootreceiver_tracing:dir search;
1189allow system_server debugfs_bootreceiver_tracing:file r_file_perms;
1190
1191# Allow system_server to read tracepoint ids in order to attach BPF programs to them.
1192allow system_server debugfs_tracing:file r_file_perms;
1193
1194# allow system_server to exec shell, asanwrapper & zygote(app_process) on ASAN builds. Needed to run
1195# asanwrapper.
1196with_asan(`
1197  allow system_server shell_exec:file rx_file_perms;
1198  allow system_server asanwrapper_exec:file rx_file_perms;
1199  allow system_server zygote_exec:file rx_file_perms;
1200')
1201
1202# allow system_server to read the eBPF maps that stores the traffic stats information and update
1203# the map after snapshot is recorded, and to read, update and run the maps and programs used for
1204# time in state accounting
1205allow system_server { fs_bpf fs_bpf_net_shared fs_bpf_netd_readonly fs_bpf_netd_shared }:dir search;
1206allow system_server { fs_bpf fs_bpf_net_shared fs_bpf_netd_readonly fs_bpf_netd_shared }:file { getattr read write };
1207allow system_server bpfloader:bpf { map_read map_write prog_run };
1208# in order to invoke side effect of close() on such a socket calling synchronize_rcu()
1209allow system_server self:key_socket create;
1210# Java's Os.close() in libcore/luni/src/main/java/libcore/io/BlockGuardOs.java;l=100
1211# calls if (fd.isSocket$()) if (isLingerSocket(fd)) ...
1212dontaudit system_server self:key_socket getopt;
1213
1214# Allow system_server to start clatd in its own domain and kill it.
1215domain_auto_trans(system_server, clatd_exec, clatd)
1216allow system_server clatd:process { sigkill signal };
1217
1218# ART Profiles.
1219# Allow system_server to open profile snapshots for read.
1220# System server never reads the actual content. It passes the descriptor to
1221# to privileged apps which acquire the permissions to inspect the profiles.
1222allow system_server { user_profile_root_file user_profile_data_file}:dir { getattr search };
1223allow system_server user_profile_data_file:file { getattr open read };
1224
1225# System server may dump profile data for debuggable apps in the /data/misc/profman.
1226# As such it needs to be able create files but it should never read from them.
1227# It also needs to stat the directory to check if it has the right permissions.
1228allow system_server profman_dump_data_file:file { create getattr setattr w_file_perms};
1229allow system_server profman_dump_data_file:dir rw_dir_perms;
1230
1231# On userdebug build we may profile system server. Allow it to write and create its own profile.
1232userdebug_or_eng(`
1233  allow system_server user_profile_data_file:dir w_dir_perms;
1234  allow system_server user_profile_data_file:file create_file_perms;
1235')
1236# Allow system server to load JVMTI agents under control of a property.
1237get_prop(system_server,system_jvmti_agent_prop)
1238
1239# UsbDeviceManager uses /dev/usb-ffs
1240allow system_server functionfs:dir search;
1241allow system_server functionfs:file rw_file_perms;
1242
1243# system_server contains time / time zone detection logic so reads the associated properties.
1244get_prop(system_server, time_prop)
1245
1246# system_server reads this property to know it should expect the lmkd sends notification to it
1247# on low memory kills.
1248get_prop(system_server, system_lmk_prop)
1249
1250get_prop(system_server, wifi_config_prop)
1251
1252# Only system server can access BINDER_FREEZE and BINDER_GET_FROZEN_INFO
1253allowxperm system_server binder_device:chr_file ioctl { BINDER_FREEZE BINDER_GET_FROZEN_INFO };
1254
1255# Watchdog prints debugging log to /dev/kmsg_debug.
1256userdebug_or_eng(`
1257  allow system_server kmsg_debug_device:chr_file { open append getattr };
1258')
1259# Watchdog reads sysprops framework_watchdog.fatal_* to handle watchdog timeout loop.
1260get_prop(system_server, framework_watchdog_config_prop)
1261
1262
1263# Font files are written by system server
1264allow system_server font_data_file:file create_file_perms;
1265allow system_server font_data_file:dir create_dir_perms;
1266# Allow system process to setup and measure fs-verity for font files
1267allowxperm system_server font_data_file:file ioctl { FS_IOC_ENABLE_VERITY FS_IOC_MEASURE_VERITY };
1268
1269# Read qemu.hw.mainkeys property
1270get_prop(system_server, qemu_hw_prop)
1271
1272# Allow system server to read profcollectd reports for upload.
1273userdebug_or_eng(`r_dir_file(system_server, profcollectd_data_file)')
1274
1275###
1276### Neverallow rules
1277###
1278### system_server should NEVER do any of this
1279
1280# Do not allow opening files from external storage as unsafe ejection
1281# could cause the kernel to kill the system_server.
1282neverallow system_server { sdcard_type fuse }:dir { open read write };
1283neverallow system_server { sdcard_type fuse }:file rw_file_perms;
1284
1285# system server should never be operating on zygote spawned app data
1286# files directly. Rather, they should always be passed via a
1287# file descriptor.
1288# Exclude those types that system_server needs to open directly.
1289neverallow system_server {
1290  app_data_file_type
1291  -system_app_data_file
1292  -radio_data_file
1293}:file { open create unlink link };
1294
1295# Forking and execing is inherently dangerous and racy. See, for
1296# example, https://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-them
1297# Prevent the addition of new file execs to stop the problem from
1298# getting worse. b/28035297
1299neverallow system_server {
1300  file_type
1301  -toolbox_exec
1302  -logcat_exec
1303  with_asan(`-shell_exec -asanwrapper_exec -zygote_exec')
1304}:file execute_no_trans;
1305
1306# Ensure that system_server doesn't perform any domain transitions other than
1307# transitioning to the crash_dump domain when a crash occurs or fork clatd.
1308neverallow system_server { domain -clatd -crash_dump -perfetto }:process transition;
1309neverallow system_server *:process dyntransition;
1310
1311# Ensure that system_server doesn't access anything but search in perfetto_traces_data_file:dir.
1312neverallow system_server perfetto_traces_data_file:dir ~search;
1313
1314# Only allow crash_dump to connect to system_ndebug_socket.
1315neverallow { domain -init -system_server -crash_dump } system_ndebug_socket:sock_file { open write };
1316
1317# Only allow zygotes to connect to system_unsolzygote_socket.
1318neverallow {
1319  domain
1320  -init
1321  -system_server
1322  -zygote
1323  -app_zygote
1324  -webview_zygote
1325} system_unsolzygote_socket:sock_file { open write };
1326
1327# Only allow init, system_server, flags_health_check to set properties for server configurable flags
1328neverallow {
1329  domain
1330  -init
1331  -system_server
1332  -flags_health_check
1333} {
1334  device_config_core_experiments_team_internal_prop
1335  device_config_activity_manager_native_boot_prop
1336  device_config_connectivity_prop
1337  device_config_input_native_boot_prop
1338  device_config_lmkd_native_prop
1339  device_config_netd_native_prop
1340  device_config_nnapi_native_prop
1341  device_config_edgetpu_native_prop
1342  device_config_runtime_native_boot_prop
1343  device_config_runtime_native_prop
1344  device_config_media_native_prop
1345  device_config_mglru_native_prop
1346  device_config_remote_key_provisioning_native_prop
1347  device_config_storage_native_boot_prop
1348  device_config_surface_flinger_native_boot_prop
1349  device_config_sys_traced_prop
1350  device_config_swcodec_native_prop
1351  device_config_aconfig_flags_prop
1352  device_config_window_manager_native_boot_prop
1353  device_config_tethering_u_or_later_native_prop
1354  next_boot_prop
1355}:property_service set;
1356
1357# Only allow system_server and init to set tuner_server_ctl_prop
1358neverallow {
1359  domain
1360  -system_server
1361  -init
1362} tuner_server_ctl_prop:property_service set;
1363
1364# system_server should never be executing dex2oat. This is either
1365# a bug (for example, bug 16317188), or represents an attempt by
1366# system server to dynamically load a dex file, something we do not
1367# want to allow.
1368neverallow system_server dex2oat_exec:file no_x_file_perms;
1369
1370# system_server should never execute or load executable shared libraries
1371# in /data. Executable files in /data are a persistence vector.
1372# https://bugs.chromium.org/p/project-zero/issues/detail?id=955 for example.
1373neverallow system_server data_file_type:file no_x_file_perms;
1374
1375# The only block device system_server should be writing to is
1376# the frp_block_device. This helps avoid a system_server to root
1377# escalation by writing to raw block devices.
1378# The system_server may need to read from vd_device if it uses
1379# block apexes.
1380neverallow system_server { dev_type -frp_block_device }:blk_file no_w_file_perms;
1381neverallow system_server { dev_type -frp_block_device -vd_device }:blk_file r_file_perms;
1382
1383# system_server should never use JIT functionality
1384# See https://googleprojectzero.blogspot.com/2016/12/bitunmap-attacking-android-ashmem.html
1385# in the section titled "A Short ROP Chain" for why.
1386# However, in emulator builds without OpenGL passthrough, we use software
1387# rendering via SwiftShader, which requires JIT support. These builds are
1388# never shipped to users.
1389ifelse(target_requires_insecure_execmem_for_swiftshader, `true',
1390  `allow system_server self:process execmem;',
1391  `neverallow system_server self:process execmem;')
1392neverallow system_server { ashmem_device ashmem_libcutils_device }:chr_file execute;
1393
1394# TODO: deal with tmpfs_domain pub/priv split properly
1395neverallow system_server system_server_tmpfs:file execute;
1396
1397# Resources handed off by system_server_startup
1398allow system_server system_server_startup:fd use;
1399allow system_server system_server_startup_tmpfs:file { read write map };
1400allow system_server system_server_startup:unix_dgram_socket write;
1401
1402# Allow system server to communicate to apexd
1403allow system_server apex_service:service_manager find;
1404allow system_server apexd:binder call;
1405
1406# Allow system server to scan /apex for flattened APEXes
1407allow system_server apex_mnt_dir:dir r_dir_perms;
1408
1409# Allow system server to read /apex/apex-info-list.xml
1410allow system_server apex_info_file:file r_file_perms;
1411
1412# Allow system server to communicate to system-suspend's control interface
1413allow system_server system_suspend_control_internal_service:service_manager find;
1414allow system_server system_suspend_control_service:service_manager find;
1415binder_call(system_server, system_suspend)
1416binder_call(system_suspend, system_server)
1417
1418# Allow system server to communicate to system-suspend's wakelock interface
1419wakelock_use(system_server)
1420
1421# Allow the system server to read files under /data/apex. The system_server
1422# needs these privileges to compare file signatures while processing installs.
1423#
1424# Only apexd is allowed to create new entries or write to any file under /data/apex.
1425allow system_server apex_data_file:dir { getattr search };
1426allow system_server apex_data_file:file r_file_perms;
1427
1428# Allow the system server to read files under /vendor/apex. This is where
1429# vendor APEX packages might be installed and system_server needs to parse
1430# these packages to inspect the signatures and other metadata.
1431allow system_server vendor_apex_file:dir { getattr search };
1432allow system_server vendor_apex_file:file r_file_perms;
1433
1434# Allow the system server to manage relevant apex module data files.
1435allow system_server apex_module_data_file:dir { getattr search };
1436# These are modules where the code runs in system_server, so we need full access.
1437allow system_server apex_system_server_data_file:dir create_dir_perms;
1438allow system_server apex_system_server_data_file:file create_file_perms;
1439allow system_server apex_tethering_data_file:dir create_dir_perms;
1440allow system_server apex_tethering_data_file:file create_file_perms;
1441# Legacy labels that we still need to support (b/217581286)
1442allow system_server {
1443  apex_appsearch_data_file
1444  apex_permission_data_file
1445  apex_scheduling_data_file
1446  apex_wifi_data_file
1447}:dir create_dir_perms;
1448allow system_server {
1449  apex_appsearch_data_file
1450  apex_permission_data_file
1451  apex_scheduling_data_file
1452  apex_wifi_data_file
1453}:file create_file_perms;
1454
1455# Allow PasswordSlotManager rw access to /metadata/password_slots, so GSIs and the host image can
1456# communicate which slots are available for use.
1457allow system_server metadata_file:dir search;
1458allow system_server password_slot_metadata_file:dir rw_dir_perms;
1459allow system_server password_slot_metadata_file:file create_file_perms;
1460
1461allow system_server userspace_reboot_metadata_file:dir create_dir_perms;
1462allow system_server userspace_reboot_metadata_file:file create_file_perms;
1463
1464# Allow system server rw access to files in /metadata/staged-install folder
1465allow system_server staged_install_file:dir rw_dir_perms;
1466allow system_server staged_install_file:file create_file_perms;
1467
1468allow system_server watchdog_metadata_file:dir rw_dir_perms;
1469allow system_server watchdog_metadata_file:file create_file_perms;
1470
1471allow system_server aconfig_storage_flags_metadata_file:dir rw_dir_perms;
1472allow system_server aconfig_storage_flags_metadata_file:file create_file_perms;
1473
1474allow system_server repair_mode_metadata_file:dir rw_dir_perms;
1475allow system_server repair_mode_metadata_file:file create_file_perms;
1476
1477allow system_server gsi_persistent_data_file:dir rw_dir_perms;
1478allow system_server gsi_persistent_data_file:file create_file_perms;
1479
1480# Allow system server read and remove files under /data/misc/odrefresh
1481allow system_server odrefresh_data_file:dir rw_dir_perms;
1482allow system_server odrefresh_data_file:file { r_file_perms unlink };
1483
1484# Allow system server r access to /system/bin/surfaceflinger for PinnerService.
1485allow system_server surfaceflinger_exec:file r_file_perms;
1486
1487# Allow init to set sysprop used to compute stats about userspace reboot.
1488set_prop(system_server, userspace_reboot_log_prop)
1489
1490# JVMTI agent settings are only readable from the system server.
1491neverallow {
1492  domain
1493  -system_server
1494  -dumpstate
1495  -init
1496  -vendor_init
1497} {
1498  system_jvmti_agent_prop
1499}:file no_rw_file_perms;
1500
1501# Read/Write /proc/pressure/memory
1502allow system_server proc_pressure_mem:file rw_file_perms;
1503# Read /proc/pressure/cpu and /proc/pressure/io
1504allow system_server { proc_pressure_cpu proc_pressure_io }:file r_file_perms;
1505
1506# dexoptanalyzer is currently used only for secondary dex files which
1507# system_server should never access.
1508neverallow system_server dexoptanalyzer_exec:file no_x_file_perms;
1509
1510# No ptracing others
1511neverallow system_server { domain -system_server }:process ptrace;
1512
1513# CAP_SYS_RESOURCE was traditionally needed for sensitive /proc/PID
1514# file read access. However, that is now unnecessary (b/34951864)
1515neverallow system_server system_server:global_capability_class_set sys_resource;
1516
1517# Only system_server/init should access /metadata/password_slots.
1518neverallow { domain -init -system_server } password_slot_metadata_file:dir *;
1519neverallow {
1520  domain
1521  -init
1522  -system_server
1523} password_slot_metadata_file:notdevfile_class_set ~{ relabelto getattr };
1524neverallow { domain -init -system_server } password_slot_metadata_file:notdevfile_class_set *;
1525
1526# Only system_server/init should access /metadata/userspacereboot.
1527neverallow { domain -init -system_server } userspace_reboot_metadata_file:dir *;
1528neverallow { domain -init -system_server } userspace_reboot_metadata_file:file no_rw_file_perms;
1529
1530# Only system server should access /metadata/aconfig
1531neverallow { domain -init -system_server -aconfigd } aconfig_storage_flags_metadata_file:dir *;
1532neverallow { domain -init -system_server -aconfigd } aconfig_storage_flags_metadata_file:file no_rw_file_perms;
1533
1534# Allow systemserver to read/write the invalidation property
1535set_prop(system_server, binder_cache_system_server_prop)
1536neverallow { domain -system_server -init }
1537    binder_cache_system_server_prop:property_service set;
1538
1539# Allow system server to attach BPF programs to tracepoints. Deny read permission so that
1540# system_server cannot use this access to read perf event data like process stacks.
1541allow system_server self:perf_event { open write cpu kernel };
1542neverallow system_server self:perf_event ~{ open write cpu kernel };
1543
1544# Allow writing files under /data/system/shutdown-checkpoints/
1545allow system_server shutdown_checkpoints_system_data_file:dir create_dir_perms;
1546allow system_server shutdown_checkpoints_system_data_file:file create_file_perms;
1547
1548# Do not allow any domain other than init or system server to set the property
1549neverallow { domain -init -system_server } socket_hook_prop:property_service set;
1550
1551neverallow { domain -init -system_server } boot_status_prop:property_service set;
1552
1553neverallow {
1554  domain
1555  -init
1556  -vendor_init
1557  -dumpstate
1558  -system_server
1559} wifi_config_prop:file no_rw_file_perms;
1560
1561# Only allow system server to write uhid sysfs files
1562neverallow {
1563    domain
1564    -init
1565    -system_server
1566    -ueventd
1567    -vendor_init
1568} sysfs_uhid:file no_w_file_perms;
1569
1570# BINDER_FREEZE is used to block ipc transactions to frozen processes, so it
1571# can be accessed by system_server only (b/143717177)
1572# BINDER_GET_FROZEN_INFO is used by system_server to determine the state of a frozen binder
1573# interface
1574neverallowxperm { domain -system_server } binder_device:chr_file ioctl { BINDER_FREEZE BINDER_GET_FROZEN_INFO };
1575
1576# Only system server can write the font files.
1577neverallow { domain -init -system_server } font_data_file:file no_w_file_perms;
1578neverallow { domain -init -system_server } font_data_file:dir no_w_dir_perms;
1579
1580# Allow reading /system/etc/font_fallback.xml
1581allow system_server system_font_fallback_file:file r_file_perms;
1582
1583# Allow system server to set dynamic ART properties.
1584set_prop(system_server, dalvik_dynamic_config_prop)
1585
1586# Allow system server to read binderfs
1587allow system_server binderfs_logs:dir r_dir_perms;
1588allow system_server binderfs_logs_stats:file r_file_perms;
1589
1590# Allow GameManagerService to read and write persist.graphics.game_default_frame_rate.enabled
1591set_prop(system_server, game_manager_config_prop)
1592
1593# ThreadNetworkService reads Thread Network properties
1594get_prop(system_server, threadnetwork_config_prop)
1595
1596# Do not allow any domain other than init and system server to set the property
1597neverallow {
1598  domain
1599  -init
1600  -vendor_init
1601  -dumpstate
1602  -system_server
1603} threadnetwork_config_prop:file no_rw_file_perms;
1604
1605# Allow system server to read pm.archiving.enabled prop
1606# TODO(azilio): Remove system property after archiving testing is completed.
1607get_prop(system_server, pm_archiving_enabled_prop)
1608
1609# Do not allow any domain other than init or system server to get or set the property
1610neverallow { domain -init -system_server } crashrecovery_prop:property_service set;
1611neverallow { domain -init -dumpstate -system_server } crashrecovery_prop:file no_rw_file_perms;
1612