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