162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Security server interface. 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Author : Stephen Smalley, <stephen.smalley.work@gmail.com> 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#ifndef _SELINUX_SECURITY_H_ 1062306a36Sopenharmony_ci#define _SELINUX_SECURITY_H_ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <linux/compiler.h> 1362306a36Sopenharmony_ci#include <linux/dcache.h> 1462306a36Sopenharmony_ci#include <linux/magic.h> 1562306a36Sopenharmony_ci#include <linux/types.h> 1662306a36Sopenharmony_ci#include <linux/rcupdate.h> 1762306a36Sopenharmony_ci#include <linux/refcount.h> 1862306a36Sopenharmony_ci#include <linux/workqueue.h> 1962306a36Sopenharmony_ci#include <linux/delay.h> 2062306a36Sopenharmony_ci#include <linux/printk.h> 2162306a36Sopenharmony_ci#include "flask.h" 2262306a36Sopenharmony_ci#include "policycap.h" 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci#define SECSID_NULL 0x00000000 /* unspecified SID */ 2562306a36Sopenharmony_ci#define SECSID_WILD 0xffffffff /* wildcard SID */ 2662306a36Sopenharmony_ci#define SECCLASS_NULL 0x0000 /* no class */ 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci/* Identify specific policy version changes */ 2962306a36Sopenharmony_ci#define POLICYDB_VERSION_BASE 15 3062306a36Sopenharmony_ci#define POLICYDB_VERSION_BOOL 16 3162306a36Sopenharmony_ci#define POLICYDB_VERSION_IPV6 17 3262306a36Sopenharmony_ci#define POLICYDB_VERSION_NLCLASS 18 3362306a36Sopenharmony_ci#define POLICYDB_VERSION_VALIDATETRANS 19 3462306a36Sopenharmony_ci#define POLICYDB_VERSION_MLS 19 3562306a36Sopenharmony_ci#define POLICYDB_VERSION_AVTAB 20 3662306a36Sopenharmony_ci#define POLICYDB_VERSION_RANGETRANS 21 3762306a36Sopenharmony_ci#define POLICYDB_VERSION_POLCAP 22 3862306a36Sopenharmony_ci#define POLICYDB_VERSION_PERMISSIVE 23 3962306a36Sopenharmony_ci#define POLICYDB_VERSION_BOUNDARY 24 4062306a36Sopenharmony_ci#define POLICYDB_VERSION_FILENAME_TRANS 25 4162306a36Sopenharmony_ci#define POLICYDB_VERSION_ROLETRANS 26 4262306a36Sopenharmony_ci#define POLICYDB_VERSION_NEW_OBJECT_DEFAULTS 27 4362306a36Sopenharmony_ci#define POLICYDB_VERSION_DEFAULT_TYPE 28 4462306a36Sopenharmony_ci#define POLICYDB_VERSION_CONSTRAINT_NAMES 29 4562306a36Sopenharmony_ci#define POLICYDB_VERSION_XPERMS_IOCTL 30 4662306a36Sopenharmony_ci#define POLICYDB_VERSION_INFINIBAND 31 4762306a36Sopenharmony_ci#define POLICYDB_VERSION_GLBLUB 32 4862306a36Sopenharmony_ci#define POLICYDB_VERSION_COMP_FTRANS 33 /* compressed filename transitions */ 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci/* Range of policy versions we understand*/ 5162306a36Sopenharmony_ci#define POLICYDB_VERSION_MIN POLICYDB_VERSION_BASE 5262306a36Sopenharmony_ci#define POLICYDB_VERSION_MAX POLICYDB_VERSION_COMP_FTRANS 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci/* Mask for just the mount related flags */ 5562306a36Sopenharmony_ci#define SE_MNTMASK 0x0f 5662306a36Sopenharmony_ci/* Super block security struct flags for mount options */ 5762306a36Sopenharmony_ci/* BE CAREFUL, these need to be the low order bits for selinux_get_mnt_opts */ 5862306a36Sopenharmony_ci#define CONTEXT_MNT 0x01 5962306a36Sopenharmony_ci#define FSCONTEXT_MNT 0x02 6062306a36Sopenharmony_ci#define ROOTCONTEXT_MNT 0x04 6162306a36Sopenharmony_ci#define DEFCONTEXT_MNT 0x08 6262306a36Sopenharmony_ci#define SBLABEL_MNT 0x10 6362306a36Sopenharmony_ci/* Non-mount related flags */ 6462306a36Sopenharmony_ci#define SE_SBINITIALIZED 0x0100 6562306a36Sopenharmony_ci#define SE_SBPROC 0x0200 6662306a36Sopenharmony_ci#define SE_SBGENFS 0x0400 6762306a36Sopenharmony_ci#define SE_SBGENFS_XATTR 0x0800 6862306a36Sopenharmony_ci#define SE_SBNATIVE 0x1000 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci#define CONTEXT_STR "context" 7162306a36Sopenharmony_ci#define FSCONTEXT_STR "fscontext" 7262306a36Sopenharmony_ci#define ROOTCONTEXT_STR "rootcontext" 7362306a36Sopenharmony_ci#define DEFCONTEXT_STR "defcontext" 7462306a36Sopenharmony_ci#define SECLABEL_STR "seclabel" 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_cistruct netlbl_lsm_secattr; 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ciextern int selinux_enabled_boot; 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_ci/* 8162306a36Sopenharmony_ci * type_datum properties 8262306a36Sopenharmony_ci * available at the kernel policy version >= POLICYDB_VERSION_BOUNDARY 8362306a36Sopenharmony_ci */ 8462306a36Sopenharmony_ci#define TYPEDATUM_PROPERTY_PRIMARY 0x0001 8562306a36Sopenharmony_ci#define TYPEDATUM_PROPERTY_ATTRIBUTE 0x0002 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci/* limitation of boundary depth */ 8862306a36Sopenharmony_ci#define POLICYDB_BOUNDS_MAXDEPTH 4 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_cistruct selinux_policy; 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_cistruct selinux_state { 9362306a36Sopenharmony_ci#ifdef CONFIG_SECURITY_SELINUX_DEVELOP 9462306a36Sopenharmony_ci bool enforcing; 9562306a36Sopenharmony_ci#endif 9662306a36Sopenharmony_ci bool initialized; 9762306a36Sopenharmony_ci bool policycap[__POLICYDB_CAP_MAX]; 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ci struct page *status_page; 10062306a36Sopenharmony_ci struct mutex status_lock; 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci struct selinux_policy __rcu *policy; 10362306a36Sopenharmony_ci struct mutex policy_mutex; 10462306a36Sopenharmony_ci} __randomize_layout; 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_civoid selinux_avc_init(void); 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ciextern struct selinux_state selinux_state; 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_cistatic inline bool selinux_initialized(void) 11162306a36Sopenharmony_ci{ 11262306a36Sopenharmony_ci /* do a synchronized load to avoid race conditions */ 11362306a36Sopenharmony_ci return smp_load_acquire(&selinux_state.initialized); 11462306a36Sopenharmony_ci} 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_cistatic inline void selinux_mark_initialized(void) 11762306a36Sopenharmony_ci{ 11862306a36Sopenharmony_ci /* do a synchronized write to avoid race conditions */ 11962306a36Sopenharmony_ci smp_store_release(&selinux_state.initialized, true); 12062306a36Sopenharmony_ci} 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ci#ifdef CONFIG_SECURITY_SELINUX_DEVELOP 12362306a36Sopenharmony_cistatic inline bool enforcing_enabled(void) 12462306a36Sopenharmony_ci{ 12562306a36Sopenharmony_ci return READ_ONCE(selinux_state.enforcing); 12662306a36Sopenharmony_ci} 12762306a36Sopenharmony_ci 12862306a36Sopenharmony_cistatic inline void enforcing_set(bool value) 12962306a36Sopenharmony_ci{ 13062306a36Sopenharmony_ci WRITE_ONCE(selinux_state.enforcing, value); 13162306a36Sopenharmony_ci} 13262306a36Sopenharmony_ci#else 13362306a36Sopenharmony_cistatic inline bool enforcing_enabled(void) 13462306a36Sopenharmony_ci{ 13562306a36Sopenharmony_ci return true; 13662306a36Sopenharmony_ci} 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_cistatic inline void enforcing_set(bool value) 13962306a36Sopenharmony_ci{ 14062306a36Sopenharmony_ci} 14162306a36Sopenharmony_ci#endif 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_cistatic inline bool checkreqprot_get(void) 14462306a36Sopenharmony_ci{ 14562306a36Sopenharmony_ci /* non-zero/true checkreqprot values are no longer supported */ 14662306a36Sopenharmony_ci return 0; 14762306a36Sopenharmony_ci} 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_cistatic inline bool selinux_policycap_netpeer(void) 15062306a36Sopenharmony_ci{ 15162306a36Sopenharmony_ci return READ_ONCE(selinux_state.policycap[POLICYDB_CAP_NETPEER]); 15262306a36Sopenharmony_ci} 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_cistatic inline bool selinux_policycap_openperm(void) 15562306a36Sopenharmony_ci{ 15662306a36Sopenharmony_ci return READ_ONCE(selinux_state.policycap[POLICYDB_CAP_OPENPERM]); 15762306a36Sopenharmony_ci} 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_cistatic inline bool selinux_policycap_extsockclass(void) 16062306a36Sopenharmony_ci{ 16162306a36Sopenharmony_ci return READ_ONCE(selinux_state.policycap[POLICYDB_CAP_EXTSOCKCLASS]); 16262306a36Sopenharmony_ci} 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_cistatic inline bool selinux_policycap_alwaysnetwork(void) 16562306a36Sopenharmony_ci{ 16662306a36Sopenharmony_ci return READ_ONCE(selinux_state.policycap[POLICYDB_CAP_ALWAYSNETWORK]); 16762306a36Sopenharmony_ci} 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_cistatic inline bool selinux_policycap_cgroupseclabel(void) 17062306a36Sopenharmony_ci{ 17162306a36Sopenharmony_ci return READ_ONCE(selinux_state.policycap[POLICYDB_CAP_CGROUPSECLABEL]); 17262306a36Sopenharmony_ci} 17362306a36Sopenharmony_ci 17462306a36Sopenharmony_cistatic inline bool selinux_policycap_nnp_nosuid_transition(void) 17562306a36Sopenharmony_ci{ 17662306a36Sopenharmony_ci return READ_ONCE( 17762306a36Sopenharmony_ci selinux_state.policycap[POLICYDB_CAP_NNP_NOSUID_TRANSITION]); 17862306a36Sopenharmony_ci} 17962306a36Sopenharmony_ci 18062306a36Sopenharmony_cistatic inline bool selinux_policycap_genfs_seclabel_symlinks(void) 18162306a36Sopenharmony_ci{ 18262306a36Sopenharmony_ci return READ_ONCE( 18362306a36Sopenharmony_ci selinux_state.policycap[POLICYDB_CAP_GENFS_SECLABEL_SYMLINKS]); 18462306a36Sopenharmony_ci} 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_cistatic inline bool selinux_policycap_ioctl_skip_cloexec(void) 18762306a36Sopenharmony_ci{ 18862306a36Sopenharmony_ci return READ_ONCE( 18962306a36Sopenharmony_ci selinux_state.policycap[POLICYDB_CAP_IOCTL_SKIP_CLOEXEC]); 19062306a36Sopenharmony_ci} 19162306a36Sopenharmony_ci 19262306a36Sopenharmony_cistruct selinux_policy_convert_data; 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_cistruct selinux_load_state { 19562306a36Sopenharmony_ci struct selinux_policy *policy; 19662306a36Sopenharmony_ci struct selinux_policy_convert_data *convert_data; 19762306a36Sopenharmony_ci}; 19862306a36Sopenharmony_ci 19962306a36Sopenharmony_ciint security_mls_enabled(void); 20062306a36Sopenharmony_ciint security_load_policy(void *data, size_t len, 20162306a36Sopenharmony_ci struct selinux_load_state *load_state); 20262306a36Sopenharmony_civoid selinux_policy_commit(struct selinux_load_state *load_state); 20362306a36Sopenharmony_civoid selinux_policy_cancel(struct selinux_load_state *load_state); 20462306a36Sopenharmony_ciint security_read_policy(void **data, size_t *len); 20562306a36Sopenharmony_ciint security_read_state_kernel(void **data, size_t *len); 20662306a36Sopenharmony_ciint security_policycap_supported(unsigned int req_cap); 20762306a36Sopenharmony_ci 20862306a36Sopenharmony_ci#define SEL_VEC_MAX 32 20962306a36Sopenharmony_cistruct av_decision { 21062306a36Sopenharmony_ci u32 allowed; 21162306a36Sopenharmony_ci u32 auditallow; 21262306a36Sopenharmony_ci u32 auditdeny; 21362306a36Sopenharmony_ci u32 seqno; 21462306a36Sopenharmony_ci u32 flags; 21562306a36Sopenharmony_ci}; 21662306a36Sopenharmony_ci 21762306a36Sopenharmony_ci#define XPERMS_ALLOWED 1 21862306a36Sopenharmony_ci#define XPERMS_AUDITALLOW 2 21962306a36Sopenharmony_ci#define XPERMS_DONTAUDIT 4 22062306a36Sopenharmony_ci 22162306a36Sopenharmony_ci#define security_xperm_set(perms, x) ((perms)[(x) >> 5] |= 1 << ((x) & 0x1f)) 22262306a36Sopenharmony_ci#define security_xperm_test(perms, x) (1 & ((perms)[(x) >> 5] >> ((x) & 0x1f))) 22362306a36Sopenharmony_cistruct extended_perms_data { 22462306a36Sopenharmony_ci u32 p[8]; 22562306a36Sopenharmony_ci}; 22662306a36Sopenharmony_ci 22762306a36Sopenharmony_cistruct extended_perms_decision { 22862306a36Sopenharmony_ci u8 used; 22962306a36Sopenharmony_ci u8 driver; 23062306a36Sopenharmony_ci struct extended_perms_data *allowed; 23162306a36Sopenharmony_ci struct extended_perms_data *auditallow; 23262306a36Sopenharmony_ci struct extended_perms_data *dontaudit; 23362306a36Sopenharmony_ci}; 23462306a36Sopenharmony_ci 23562306a36Sopenharmony_cistruct extended_perms { 23662306a36Sopenharmony_ci u16 len; /* length associated decision chain */ 23762306a36Sopenharmony_ci struct extended_perms_data drivers; /* flag drivers that are used */ 23862306a36Sopenharmony_ci}; 23962306a36Sopenharmony_ci 24062306a36Sopenharmony_ci/* definitions of av_decision.flags */ 24162306a36Sopenharmony_ci#define AVD_FLAGS_PERMISSIVE 0x0001 24262306a36Sopenharmony_ci 24362306a36Sopenharmony_civoid security_compute_av(u32 ssid, u32 tsid, 24462306a36Sopenharmony_ci u16 tclass, struct av_decision *avd, 24562306a36Sopenharmony_ci struct extended_perms *xperms); 24662306a36Sopenharmony_ci 24762306a36Sopenharmony_civoid security_compute_xperms_decision(u32 ssid, u32 tsid, u16 tclass, 24862306a36Sopenharmony_ci u8 driver, 24962306a36Sopenharmony_ci struct extended_perms_decision *xpermd); 25062306a36Sopenharmony_ci 25162306a36Sopenharmony_civoid security_compute_av_user(u32 ssid, u32 tsid, 25262306a36Sopenharmony_ci u16 tclass, struct av_decision *avd); 25362306a36Sopenharmony_ci 25462306a36Sopenharmony_ciint security_transition_sid(u32 ssid, u32 tsid, u16 tclass, 25562306a36Sopenharmony_ci const struct qstr *qstr, u32 *out_sid); 25662306a36Sopenharmony_ci 25762306a36Sopenharmony_ciint security_transition_sid_user(u32 ssid, u32 tsid, u16 tclass, 25862306a36Sopenharmony_ci const char *objname, u32 *out_sid); 25962306a36Sopenharmony_ci 26062306a36Sopenharmony_ciint security_member_sid(u32 ssid, u32 tsid, u16 tclass, u32 *out_sid); 26162306a36Sopenharmony_ci 26262306a36Sopenharmony_ciint security_change_sid(u32 ssid, u32 tsid, u16 tclass, u32 *out_sid); 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_ciint security_sid_to_context(u32 sid, char **scontext, u32 *scontext_len); 26562306a36Sopenharmony_ci 26662306a36Sopenharmony_ciint security_sid_to_context_force(u32 sid, char **scontext, u32 *scontext_len); 26762306a36Sopenharmony_ci 26862306a36Sopenharmony_ciint security_sid_to_context_inval(u32 sid, char **scontext, u32 *scontext_len); 26962306a36Sopenharmony_ci 27062306a36Sopenharmony_ciint security_context_to_sid(const char *scontext, u32 scontext_len, 27162306a36Sopenharmony_ci u32 *out_sid, gfp_t gfp); 27262306a36Sopenharmony_ci 27362306a36Sopenharmony_ciint security_context_str_to_sid(const char *scontext, u32 *out_sid, gfp_t gfp); 27462306a36Sopenharmony_ci 27562306a36Sopenharmony_ciint security_context_to_sid_default(const char *scontext, u32 scontext_len, 27662306a36Sopenharmony_ci u32 *out_sid, u32 def_sid, gfp_t gfp_flags); 27762306a36Sopenharmony_ci 27862306a36Sopenharmony_ciint security_context_to_sid_force(const char *scontext, u32 scontext_len, 27962306a36Sopenharmony_ci u32 *sid); 28062306a36Sopenharmony_ci 28162306a36Sopenharmony_ciint security_get_user_sids(u32 callsid, char *username, u32 **sids, u32 *nel); 28262306a36Sopenharmony_ci 28362306a36Sopenharmony_ciint security_port_sid(u8 protocol, u16 port, u32 *out_sid); 28462306a36Sopenharmony_ci 28562306a36Sopenharmony_ciint security_ib_pkey_sid(u64 subnet_prefix, u16 pkey_num, u32 *out_sid); 28662306a36Sopenharmony_ci 28762306a36Sopenharmony_ciint security_ib_endport_sid(const char *dev_name, u8 port_num, u32 *out_sid); 28862306a36Sopenharmony_ci 28962306a36Sopenharmony_ciint security_netif_sid(char *name, u32 *if_sid); 29062306a36Sopenharmony_ci 29162306a36Sopenharmony_ciint security_node_sid(u16 domain, void *addr, u32 addrlen, 29262306a36Sopenharmony_ci u32 *out_sid); 29362306a36Sopenharmony_ci 29462306a36Sopenharmony_ciint security_validate_transition(u32 oldsid, u32 newsid, u32 tasksid, 29562306a36Sopenharmony_ci u16 tclass); 29662306a36Sopenharmony_ci 29762306a36Sopenharmony_ciint security_validate_transition_user(u32 oldsid, u32 newsid, u32 tasksid, 29862306a36Sopenharmony_ci u16 tclass); 29962306a36Sopenharmony_ci 30062306a36Sopenharmony_ciint security_bounded_transition(u32 oldsid, u32 newsid); 30162306a36Sopenharmony_ci 30262306a36Sopenharmony_ciint security_sid_mls_copy(u32 sid, u32 mls_sid, u32 *new_sid); 30362306a36Sopenharmony_ci 30462306a36Sopenharmony_ciint security_net_peersid_resolve(u32 nlbl_sid, u32 nlbl_type, 30562306a36Sopenharmony_ci u32 xfrm_sid, 30662306a36Sopenharmony_ci u32 *peer_sid); 30762306a36Sopenharmony_ci 30862306a36Sopenharmony_ciint security_get_classes(struct selinux_policy *policy, 30962306a36Sopenharmony_ci char ***classes, u32 *nclasses); 31062306a36Sopenharmony_ciint security_get_permissions(struct selinux_policy *policy, 31162306a36Sopenharmony_ci const char *class, char ***perms, u32 *nperms); 31262306a36Sopenharmony_ciint security_get_reject_unknown(void); 31362306a36Sopenharmony_ciint security_get_allow_unknown(void); 31462306a36Sopenharmony_ci 31562306a36Sopenharmony_ci#define SECURITY_FS_USE_XATTR 1 /* use xattr */ 31662306a36Sopenharmony_ci#define SECURITY_FS_USE_TRANS 2 /* use transition SIDs, e.g. devpts/tmpfs */ 31762306a36Sopenharmony_ci#define SECURITY_FS_USE_TASK 3 /* use task SIDs, e.g. pipefs/sockfs */ 31862306a36Sopenharmony_ci#define SECURITY_FS_USE_GENFS 4 /* use the genfs support */ 31962306a36Sopenharmony_ci#define SECURITY_FS_USE_NONE 5 /* no labeling support */ 32062306a36Sopenharmony_ci#define SECURITY_FS_USE_MNTPOINT 6 /* use mountpoint labeling */ 32162306a36Sopenharmony_ci#define SECURITY_FS_USE_NATIVE 7 /* use native label support */ 32262306a36Sopenharmony_ci#define SECURITY_FS_USE_MAX 7 /* Highest SECURITY_FS_USE_XXX */ 32362306a36Sopenharmony_ci 32462306a36Sopenharmony_ciint security_fs_use(struct super_block *sb); 32562306a36Sopenharmony_ci 32662306a36Sopenharmony_ciint security_genfs_sid(const char *fstype, const char *path, u16 sclass, 32762306a36Sopenharmony_ci u32 *sid); 32862306a36Sopenharmony_ci 32962306a36Sopenharmony_ciint selinux_policy_genfs_sid(struct selinux_policy *policy, 33062306a36Sopenharmony_ci const char *fstype, const char *path, u16 sclass, 33162306a36Sopenharmony_ci u32 *sid); 33262306a36Sopenharmony_ci 33362306a36Sopenharmony_ci#ifdef CONFIG_NETLABEL 33462306a36Sopenharmony_ciint security_netlbl_secattr_to_sid(struct netlbl_lsm_secattr *secattr, 33562306a36Sopenharmony_ci u32 *sid); 33662306a36Sopenharmony_ci 33762306a36Sopenharmony_ciint security_netlbl_sid_to_secattr(u32 sid, 33862306a36Sopenharmony_ci struct netlbl_lsm_secattr *secattr); 33962306a36Sopenharmony_ci#else 34062306a36Sopenharmony_cistatic inline int security_netlbl_secattr_to_sid(struct netlbl_lsm_secattr *secattr, 34162306a36Sopenharmony_ci u32 *sid) 34262306a36Sopenharmony_ci{ 34362306a36Sopenharmony_ci return -EIDRM; 34462306a36Sopenharmony_ci} 34562306a36Sopenharmony_ci 34662306a36Sopenharmony_cistatic inline int security_netlbl_sid_to_secattr(u32 sid, 34762306a36Sopenharmony_ci struct netlbl_lsm_secattr *secattr) 34862306a36Sopenharmony_ci{ 34962306a36Sopenharmony_ci return -ENOENT; 35062306a36Sopenharmony_ci} 35162306a36Sopenharmony_ci#endif /* CONFIG_NETLABEL */ 35262306a36Sopenharmony_ci 35362306a36Sopenharmony_ciconst char *security_get_initial_sid_context(u32 sid); 35462306a36Sopenharmony_ci 35562306a36Sopenharmony_ci/* 35662306a36Sopenharmony_ci * status notifier using mmap interface 35762306a36Sopenharmony_ci */ 35862306a36Sopenharmony_ciextern struct page *selinux_kernel_status_page(void); 35962306a36Sopenharmony_ci 36062306a36Sopenharmony_ci#define SELINUX_KERNEL_STATUS_VERSION 1 36162306a36Sopenharmony_cistruct selinux_kernel_status { 36262306a36Sopenharmony_ci u32 version; /* version number of the structure */ 36362306a36Sopenharmony_ci u32 sequence; /* sequence number of seqlock logic */ 36462306a36Sopenharmony_ci u32 enforcing; /* current setting of enforcing mode */ 36562306a36Sopenharmony_ci u32 policyload; /* times of policy reloaded */ 36662306a36Sopenharmony_ci u32 deny_unknown; /* current setting of deny_unknown */ 36762306a36Sopenharmony_ci /* 36862306a36Sopenharmony_ci * The version > 0 supports above members. 36962306a36Sopenharmony_ci */ 37062306a36Sopenharmony_ci} __packed; 37162306a36Sopenharmony_ci 37262306a36Sopenharmony_ciextern void selinux_status_update_setenforce(bool enforcing); 37362306a36Sopenharmony_ciextern void selinux_status_update_policyload(u32 seqno); 37462306a36Sopenharmony_ciextern void selinux_complete_init(void); 37562306a36Sopenharmony_ciextern struct path selinux_null; 37662306a36Sopenharmony_ciextern void selnl_notify_setenforce(int val); 37762306a36Sopenharmony_ciextern void selnl_notify_policyload(u32 seqno); 37862306a36Sopenharmony_ciextern int selinux_nlmsg_lookup(u16 sclass, u16 nlmsg_type, u32 *perm); 37962306a36Sopenharmony_ci 38062306a36Sopenharmony_ciextern void avtab_cache_init(void); 38162306a36Sopenharmony_ciextern void ebitmap_cache_init(void); 38262306a36Sopenharmony_ciextern void hashtab_cache_init(void); 38362306a36Sopenharmony_ciextern int security_sidtab_hash_stats(char *page); 38462306a36Sopenharmony_ci 38562306a36Sopenharmony_ci#endif /* _SELINUX_SECURITY_H_ */ 386