blob: 02337a0b85a6497c9c5c5d2fa6041aad39035fc4 [file] [log] [blame]
Chenbo Feng566411e2018-01-02 15:31:18 -08001# bpf program loader
2type bpfloader, domain;
Nick Kralevich5e372712018-09-27 10:21:37 -07003type bpfloader_exec, system_file_type, exec_type, file_type;
Chenbo Feng566411e2018-01-02 15:31:18 -08004typeattribute bpfloader coredomain;
5
Steven Moreland233d4aa2022-02-07 23:15:00 +00006# allow bpfloader to write to the kernel log (starts early)
7allow bpfloader kmsg_device:chr_file w_file_perms;
8
Maciej Żenczykowski49c73b02020-01-30 22:08:43 -08009# These permissions are required to pin ebpf maps & programs.
Maciej Żenczykowskid68cb482021-01-29 14:36:32 -080010allow bpfloader { fs_bpf fs_bpf_tethering }:dir { add_name create search write };
11allow bpfloader { fs_bpf fs_bpf_tethering }:file { create read setattr };
12allow fs_bpf_tethering 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 Żenczykowskid68cb482021-01-29 14:36:32 -080021set_prop(bpfloader, bpf_progs_loaded_prop)
22
Connor O'Briendbe26842022-01-18 22:57:41 -080023allow bpfloader bpfloader_exec:file execute_no_trans;
24
Nick Kralevich095fbea2018-09-13 11:07:14 -070025###
26### Neverallow rules
27###
Maciej Żenczykowski49c73b02020-01-30 22:08:43 -080028
Maciej Żenczykowskid68cb482021-01-29 14:36:32 -080029# TODO: get rid of init & vendor_init; Note: we don't care about getattr/mounton/search
30neverallow { domain -init -vendor_init } { fs_bpf fs_bpf_tethering }:dir { open read setattr };
31neverallow { domain -bpfloader } { fs_bpf fs_bpf_tethering }:dir { add_name create write };
32neverallow domain { fs_bpf fs_bpf_tethering }:dir ~{ add_name create getattr mounton open read search setattr write };
Maciej Żenczykowski49c73b02020-01-30 22:08:43 -080033
34# TODO: get rid of init & vendor_init
Maciej Żenczykowskid68cb482021-01-29 14:36:32 -080035neverallow { domain -bpfloader -init -vendor_init } { fs_bpf fs_bpf_tethering }:file { map open setattr };
36neverallow { domain -bpfloader } { fs_bpf fs_bpf_tethering }:file create;
Alessio Balsinifd3e9d82021-11-11 18:42:11 +000037neverallow { domain -bpfloader -gpuservice -init -lmkd -mediaprovider_app -netd -netutils_wrapper -network_stack -system_server -vendor_init } { fs_bpf }:file read;
38neverallow { domain -bpfloader -gpuservice -init -lmkd -netd -netutils_wrapper -network_stack -system_server -vendor_init } { fs_bpf_tethering }:file read;
Maciej Żenczykowskid68cb482021-01-29 14:36:32 -080039neverallow { domain -bpfloader -gpuservice -netd -netutils_wrapper -network_stack -system_server } { fs_bpf fs_bpf_tethering }:file write;
40neverallow domain { fs_bpf fs_bpf_tethering }:file ~{ create map open read setattr write };
Maciej Żenczykowski49c73b02020-01-30 22:08:43 -080041
Maciej Żenczykowski487fcb82019-04-08 21:34:53 -070042neverallow { domain -bpfloader } *:bpf { map_create prog_load };
Alessio Balsinifd3e9d82021-11-11 18:42:11 +000043neverallow { domain -bpfloader -gpuservice -mediaprovider_app -netd -netutils_wrapper -network_stack -system_server } *:bpf prog_run;
44neverallow { domain -bpfloader -gpuservice -lmkd -mediaprovider_app -netd -network_stack -system_server } *:bpf { map_read map_write };
Maciej Żenczykowski49c73b02020-01-30 22:08:43 -080045
Joel Fernandes147cf642018-11-29 13:07:40 -080046neverallow { domain -bpfloader -init } bpfloader_exec:file { execute execute_no_trans };
Maciej Żenczykowski49c73b02020-01-30 22:08:43 -080047
Maciej Żenczykowskid68cb482021-01-29 14:36:32 -080048neverallow bpfloader *:{ tcp_socket udp_socket rawip_socket } *;
Joel Galensond65f26f2018-05-23 08:36:40 -070049
Nick Kralevich095fbea2018-09-13 11:07:14 -070050# No domain should be allowed to ptrace bpfloader
51neverallow { domain userdebug_or_eng(`-llkd') } bpfloader:process ptrace;
Maciej Żenczykowski3702f332021-11-11 01:51:15 -080052
53# Currently only bpfloader.rc (which runs as init) can do bpf sysctl setup
54# this should perhaps be moved to the bpfloader binary itself. Allow both.
55neverallow { domain -bpfloader -init } proc_bpf:file write;