| /* | 
 |  * Access vector cache interface for object managers. | 
 |  * | 
 |  * Author : Stephen Smalley, <sds@epoch.ncsc.mil> | 
 |  */ | 
 | #ifndef _SELINUX_AVC_H_ | 
 | #define _SELINUX_AVC_H_ | 
 |  | 
 | #include <linux/stddef.h> | 
 | #include <linux/errno.h> | 
 | #include <linux/kernel.h> | 
 | #include <linux/kdev_t.h> | 
 | #include <linux/spinlock.h> | 
 | #include <linux/init.h> | 
 | #include <linux/audit.h> | 
 | #include <linux/lsm_audit.h> | 
 | #include <linux/in6.h> | 
 | #include <linux/path.h> | 
 | #include <asm/system.h> | 
 | #include "flask.h" | 
 | #include "av_permissions.h" | 
 | #include "security.h" | 
 |  | 
 | #ifdef CONFIG_SECURITY_SELINUX_DEVELOP | 
 | extern int selinux_enforcing; | 
 | #else | 
 | #define selinux_enforcing 1 | 
 | #endif | 
 |  | 
 | /* | 
 |  * An entry in the AVC. | 
 |  */ | 
 | struct avc_entry; | 
 |  | 
 | struct task_struct; | 
 | struct inode; | 
 | struct sock; | 
 | struct sk_buff; | 
 |  | 
 | /* | 
 |  * AVC statistics | 
 |  */ | 
 | struct avc_cache_stats { | 
 | 	unsigned int lookups; | 
 | 	unsigned int hits; | 
 | 	unsigned int misses; | 
 | 	unsigned int allocations; | 
 | 	unsigned int reclaims; | 
 | 	unsigned int frees; | 
 | }; | 
 |  | 
 | /* | 
 |  * AVC operations | 
 |  */ | 
 |  | 
 | void __init avc_init(void); | 
 |  | 
 | void avc_audit(u32 ssid, u32 tsid, | 
 | 	       u16 tclass, u32 requested, | 
 | 	       struct av_decision *avd, | 
 | 	       int result, | 
 | 	       struct common_audit_data *a); | 
 |  | 
 | #define AVC_STRICT 1 /* Ignore permissive mode. */ | 
 | int avc_has_perm_noaudit(u32 ssid, u32 tsid, | 
 | 			 u16 tclass, u32 requested, | 
 | 			 unsigned flags, | 
 | 			 struct av_decision *avd); | 
 |  | 
 | int avc_has_perm(u32 ssid, u32 tsid, | 
 | 		 u16 tclass, u32 requested, | 
 | 		 struct common_audit_data *auditdata); | 
 |  | 
 | u32 avc_policy_seqno(void); | 
 |  | 
 | #define AVC_CALLBACK_GRANT		1 | 
 | #define AVC_CALLBACK_TRY_REVOKE		2 | 
 | #define AVC_CALLBACK_REVOKE		4 | 
 | #define AVC_CALLBACK_RESET		8 | 
 | #define AVC_CALLBACK_AUDITALLOW_ENABLE	16 | 
 | #define AVC_CALLBACK_AUDITALLOW_DISABLE	32 | 
 | #define AVC_CALLBACK_AUDITDENY_ENABLE	64 | 
 | #define AVC_CALLBACK_AUDITDENY_DISABLE	128 | 
 |  | 
 | int avc_add_callback(int (*callback)(u32 event, u32 ssid, u32 tsid, | 
 | 				     u16 tclass, u32 perms, | 
 | 				     u32 *out_retained), | 
 | 		     u32 events, u32 ssid, u32 tsid, | 
 | 		     u16 tclass, u32 perms); | 
 |  | 
 | /* Exported to selinuxfs */ | 
 | int avc_get_hash_stats(char *page); | 
 | extern unsigned int avc_cache_threshold; | 
 |  | 
 | /* Attempt to free avc node cache */ | 
 | void avc_disable(void); | 
 |  | 
 | #ifdef CONFIG_SECURITY_SELINUX_AVC_STATS | 
 | DECLARE_PER_CPU(struct avc_cache_stats, avc_cache_stats); | 
 | #endif | 
 |  | 
 | #endif /* _SELINUX_AVC_H_ */ | 
 |  |