2005-04-17 02:20:36 +04:00
|
|
|
/*
|
|
|
|
* 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>
|
2008-08-28 11:35:57 +04:00
|
|
|
#include <linux/audit.h>
|
2009-07-14 20:14:09 +04:00
|
|
|
#include <linux/lsm_audit.h>
|
2005-04-17 02:20:36 +04:00
|
|
|
#include <linux/in6.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
|
|
|
|
*/
|
2008-05-14 19:27:45 +04:00
|
|
|
struct avc_cache_stats {
|
2005-04-17 02:20:36 +04:00
|
|
|
unsigned int lookups;
|
|
|
|
unsigned int misses;
|
|
|
|
unsigned int allocations;
|
|
|
|
unsigned int reclaims;
|
|
|
|
unsigned int frees;
|
|
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
|
|
* AVC operations
|
|
|
|
*/
|
|
|
|
|
|
|
|
void __init avc_init(void);
|
|
|
|
|
2011-04-26 00:26:29 +04:00
|
|
|
int avc_audit(u32 ssid, u32 tsid,
|
2008-05-14 19:27:45 +04:00
|
|
|
u16 tclass, u32 requested,
|
2009-07-14 20:14:09 +04:00
|
|
|
struct av_decision *avd,
|
|
|
|
int result,
|
2011-04-26 00:26:29 +04:00
|
|
|
struct common_audit_data *a, unsigned flags);
|
2005-04-17 02:20:36 +04:00
|
|
|
|
2007-06-07 23:34:10 +04:00
|
|
|
#define AVC_STRICT 1 /* Ignore permissive mode. */
|
2005-04-17 02:20:36 +04:00
|
|
|
int avc_has_perm_noaudit(u32 ssid, u32 tsid,
|
2007-06-07 23:34:10 +04:00
|
|
|
u16 tclass, u32 requested,
|
|
|
|
unsigned flags,
|
|
|
|
struct av_decision *avd);
|
2005-04-17 02:20:36 +04:00
|
|
|
|
2011-04-26 00:26:29 +04:00
|
|
|
int avc_has_perm_flags(u32 ssid, u32 tsid,
|
|
|
|
u16 tclass, u32 requested,
|
|
|
|
struct common_audit_data *auditdata,
|
|
|
|
unsigned);
|
|
|
|
|
|
|
|
static inline int avc_has_perm(u32 ssid, u32 tsid,
|
|
|
|
u16 tclass, u32 requested,
|
|
|
|
struct common_audit_data *auditdata)
|
|
|
|
{
|
|
|
|
return avc_has_perm_flags(ssid, tsid, tclass, requested, auditdata, 0);
|
|
|
|
}
|
2005-04-17 02:20:36 +04:00
|
|
|
|
2007-09-14 04:27:07 +04:00
|
|
|
u32 avc_policy_seqno(void);
|
|
|
|
|
2005-04-17 02:20:36 +04:00
|
|
|
#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,
|
2008-05-14 19:27:45 +04:00
|
|
|
u16 tclass, u32 perms,
|
2005-04-17 02:20:36 +04:00
|
|
|
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;
|
|
|
|
|
2009-06-25 01:58:05 +04:00
|
|
|
/* Attempt to free avc node cache */
|
|
|
|
void avc_disable(void);
|
|
|
|
|
2005-04-17 02:20:36 +04:00
|
|
|
#ifdef CONFIG_SECURITY_SELINUX_AVC_STATS
|
|
|
|
DECLARE_PER_CPU(struct avc_cache_stats, avc_cache_stats);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif /* _SELINUX_AVC_H_ */
|
|
|
|
|