policy_module(readahead, 1.13.0)

########################################
#
# Declarations
#

type readahead_t;
type readahead_exec_t;
init_system_domain(readahead_t, readahead_exec_t)

type readahead_var_lib_t;
files_type(readahead_var_lib_t)
typealias readahead_var_lib_t alias readahead_etc_rw_t;

type readahead_var_run_t;
files_pid_file(readahead_var_run_t)
dev_associate(readahead_var_run_t)
init_daemon_run_dir(readahead_var_run_t, "readahead")

########################################
#
# Local policy
#

allow readahead_t self:capability { sys_admin fowner  dac_read_search };
dontaudit readahead_t self:capability { net_admin sys_tty_config };
allow readahead_t self:process { setsched signal_perms };

manage_dirs_pattern(readahead_t, readahead_var_lib_t, readahead_var_lib_t)
manage_files_pattern(readahead_t, readahead_var_lib_t, readahead_var_lib_t)

manage_dirs_pattern(readahead_t, readahead_var_run_t, readahead_var_run_t)
manage_files_pattern(readahead_t, readahead_var_run_t, readahead_var_run_t)
dev_filetrans(readahead_t, readahead_var_run_t, { dir file })
files_pid_filetrans(readahead_t, readahead_var_run_t, { dir file })
allow readahead_t readahead_var_run_t:file map;

kernel_read_all_sysctls(readahead_t)
kernel_read_system_state(readahead_t)
kernel_dontaudit_getattr_core_if(readahead_t)
kernel_list_all_proc(readahead_t)

dev_rw_sysfs(readahead_t)
dev_read_kmsg(readahead_t)
dev_read_urand(readahead_t)
dev_write_kmsg(readahead_t)
dev_getattr_generic_chr_files(readahead_t)
dev_getattr_generic_blk_files(readahead_t)
dev_getattr_all_chr_files(readahead_t)
dev_getattr_all_blk_files(readahead_t)
dev_dontaudit_read_all_blk_files(readahead_t)
dev_dontaudit_getattr_memory_dev(readahead_t)
dev_dontaudit_getattr_nvram_dev(readahead_t)
dev_dontaudit_rw_generic_chr_files(readahead_t)

domain_use_interactive_fds(readahead_t)
domain_read_all_domains_state(readahead_t)

files_create_boot_flag(readahead_t)
files_delete_root_files(readahead_t)
files_getattr_all_pipes(readahead_t)
files_list_non_security(readahead_t)
files_read_non_security_files(readahead_t)
files_search_var_lib(readahead_t)
files_dontaudit_getattr_all_sockets(readahead_t)
files_dontaudit_getattr_non_security_blk_files(readahead_t)
files_dontaudit_all_access_check(readahead_t)
files_dontaudit_read_security_files(readahead_t)
files_dontaudit_read_all_sockets(readahead_t)

ifdef(`hide_broken_symptoms', `
      files_dontaudit_write_all_files(readahead_t)
      dev_dontaudit_write_all_chr_files(readahead_t)
      dev_dontaudit_write_all_blk_files(readahead_t)
')

fs_getattr_all_fs(readahead_t)
fs_search_auto_mountpoints(readahead_t)
fs_getattr_all_pipes(readahead_t)
fs_getattr_all_files(readahead_t)
fs_read_cgroup_files(readahead_t)
fs_read_tmpfs_files(readahead_t)
fs_read_tmpfs_symlinks(readahead_t)
fs_list_inotifyfs(readahead_t)
fs_dontaudit_read_tmpfs_blk_dev(readahead_t)
fs_dontaudit_search_ramfs(readahead_t)
fs_dontaudit_read_ramfs_pipes(readahead_t)
fs_dontaudit_read_ramfs_files(readahead_t)
fs_dontaudit_use_tmpfs_chr_dev(readahead_t)

mls_file_read_all_levels(readahead_t)

storage_raw_read_fixed_disk(readahead_t)

term_dontaudit_use_console(readahead_t)

auth_dontaudit_read_shadow(readahead_t)

init_use_fds(readahead_t)
init_use_script_ptys(readahead_t)
init_getattr_initctl(readahead_t)
# needs to write to /run/systemd/notify
init_write_pid_socket(readahead_t)
init_create_pid_dirs(readahead_t)
init_pid_filetrans(readahead_t, readahead_var_run_t, dir, "readahead")

logging_send_syslog_msg(readahead_t)
logging_set_audit_parameters(readahead_t)
logging_dontaudit_search_audit_config(readahead_t)

userdom_dontaudit_use_unpriv_user_fds(readahead_t)
userdom_dontaudit_search_user_home_dirs(readahead_t)

optional_policy(`
	cron_system_entry(readahead_t, readahead_exec_t)
')

optional_policy(`
	seutil_sigchld_newrole(readahead_t)
')
