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