blob: 4fe38432d90c3620076874d4431f1a8664ad0aed [file] [log] [blame]
Nick Kralevich5e372712018-09-27 10:21:37 -07001type bpfloader_exec, system_file_type, exec_type, file_type;
Chenbo Feng566411e2018-01-02 15:31:18 -08002
Steven Moreland65981752022-02-10 00:32:44 +00003typeattribute bpfloader bpfdomain;
4
Steven Moreland233d4aa2022-02-07 23:15:00 +00005# allow bpfloader to write to the kernel log (starts early)
6allow bpfloader kmsg_device:chr_file w_file_perms;
7
Maciej Żenczykowski49c73b02020-01-30 22:08:43 -08008# These permissions are required to pin ebpf maps & programs.
Neill Kapron23871ea2024-11-26 18:12:40 +00009allow bpfloader bpffs_type:dir { add_name create open read remove_name search setattr write };
Maciej Żenczykowski1fcf7c82022-07-01 18:20:01 -070010allow bpfloader bpffs_type:file { create getattr read rename setattr };
Maciej Żenczykowskid5098f92022-07-18 03:34:30 -070011allow bpfloader bpffs_type:lnk_file { create getattr read };
Maciej Żenczykowskib13921c2022-05-21 05:03:29 -070012allow { bpffs_type -fs_bpf } fs_bpf:filesystem associate;
Chenbo Feng566411e2018-01-02 15:31:18 -080013
Maciej Żenczykowski49c73b02020-01-30 22:08:43 -080014# Allow bpfloader to create bpf maps and programs.
15allow bpfloader self:bpf { map_create map_read map_write prog_load prog_run };
Chenbo Feng566411e2018-01-02 15:31:18 -080016
Maciej Żenczykowski94c30682021-03-01 23:16:46 -080017allow bpfloader self:capability { chown sys_admin net_admin };
Nick Kralevich095fbea2018-09-13 11:07:14 -070018
Paul Lawrencee3e26b72021-11-12 00:53:26 +000019allow bpfloader sysfs_fs_fuse_bpf:file r_file_perms;
20
Maciej Żenczykowski446c8c02024-03-14 10:47:30 +000021allow bpfloader proc_bpf:file rw_file_perms;
Maciej Żenczykowski4a960862022-12-03 12:19:31 +000022
Maciej Żenczykowskid68cb482021-01-29 14:36:32 -080023set_prop(bpfloader, bpf_progs_loaded_prop)
24
Connor O'Briendbe26842022-01-18 22:57:41 -080025allow bpfloader bpfloader_exec:file execute_no_trans;
26
Nick Kralevich095fbea2018-09-13 11:07:14 -070027###
28### Neverallow rules
29###
Maciej Żenczykowski49c73b02020-01-30 22:08:43 -080030
Maciej Żenczykowskiebb45f92022-12-01 14:45:35 +000031# Note: we don't care about getattr/mounton/search
Neill Kapron23871ea2024-11-26 18:12:40 +000032neverallow { domain } bpffs_type:dir ~{ add_name create getattr mounton open read remove_name search setattr write };
33neverallow { domain -bpfloader } bpffs_type:dir { add_name create open read remove_name setattr write };
Maciej Żenczykowski49c73b02020-01-30 22:08:43 -080034
Maciej Żenczykowski9a768052022-12-03 09:13:05 +000035neverallow { domain } bpffs_type:file ~{ create getattr map open read rename setattr write };
Maciej Żenczykowski52c8a2e2023-03-27 18:14:40 -070036neverallow { domain -bpfloader } bpffs_type:file { create map open rename setattr };
37neverallow { domain -bpfloader -gpuservice -lmkd -mediaprovider_app -netd -netutils_wrapper -system_server } fs_bpf:file { getattr read };
38neverallow { domain -bpfloader } fs_bpf_loader:file { getattr read };
39neverallow { domain -bpfloader -network_stack } fs_bpf_net_private:file { getattr read };
40neverallow { domain -bpfloader -network_stack -system_server } fs_bpf_net_shared:file { getattr read };
41neverallow { domain -bpfloader -netd -network_stack -system_server } fs_bpf_netd_readonly:file { getattr read };
42neverallow { domain -bpfloader -netd -netutils_wrapper -network_stack -system_server } fs_bpf_netd_shared:file { getattr read };
43neverallow { domain -bpfloader -network_stack } fs_bpf_tethering:file { getattr read };
Yu-Ting Tsengbaea6412024-01-16 14:02:59 -080044neverallow { domain -bpfloader -uprobestats } fs_bpf_uprobestats:file { getattr read };
Carlos Galoea1bd5d2024-03-12 20:04:41 +000045neverallow { domain -bpfloader -gpuservice -lmkd -netd -netutils_wrapper -network_stack -system_server -uprobestats } { bpffs_type -fs_bpf_vendor }:file write;
Maciej Żenczykowski49c73b02020-01-30 22:08:43 -080046
Maciej Żenczykowskid5098f92022-07-18 03:34:30 -070047neverallow { domain -bpfloader } bpffs_type:lnk_file ~read;
48neverallow { domain -bpfdomain } bpffs_type:lnk_file read;
49
Maciej Żenczykowski28960d32023-06-13 20:44:48 -070050neverallow { domain -bpfloader } *:bpf prog_load;
51neverallow { domain -bpfdomain } *:bpf { map_create map_read map_write prog_run };
Maciej Żenczykowski9a768052022-12-03 09:13:05 +000052
53# 'fs_bpf_loader' is for internal use of the BpfLoader oneshot boot time process.
Maciej Żenczykowskie14e69a2022-12-01 14:45:35 +000054neverallow { domain -bpfloader } fs_bpf_loader:bpf *;
Maciej Żenczykowski9a768052022-12-03 09:13:05 +000055neverallow { domain -bpfloader } fs_bpf_loader:file *;
Steven Morelandc27d24c2019-12-13 15:18:32 -080056
Paul Lawrence874e9742025-01-27 13:29:30 -080057neverallow { domain -bpfloader -init } bpfloader_exec:file { execute execute_no_trans };
Maciej Żenczykowski49c73b02020-01-30 22:08:43 -080058
Maciej Żenczykowski37ca69e2023-11-18 03:36:05 +000059neverallow { coredomain -bpfloader -netd -netutils_wrapper } fs_bpf_vendor:file *;
Steven Morelandc27d24c2019-12-13 15:18:32 -080060
Maciej Żenczykowskid68cb482021-01-29 14:36:32 -080061neverallow bpfloader *:{ tcp_socket udp_socket rawip_socket } *;
Joel Galensond65f26f2018-05-23 08:36:40 -070062
Nick Kralevich095fbea2018-09-13 11:07:14 -070063# No domain should be allowed to ptrace bpfloader
64neverallow { domain userdebug_or_eng(`-llkd') } bpfloader:process ptrace;
Maciej Żenczykowski3702f332021-11-11 01:51:15 -080065
Maciej Żenczykowski4a960862022-12-03 12:19:31 +000066neverallow { domain -bpfloader } proc_bpf:file write;