2005-04-16 15:20:36 -07:00
/*
* Security server interface .
*
* Author : Stephen Smalley , < sds @ epoch . ncsc . mil >
*
*/
# ifndef _SELINUX_SECURITY_H_
# define _SELINUX_SECURITY_H_
# include "flask.h"
# define SECSID_NULL 0x00000000 /* unspecified SID */
# define SECSID_WILD 0xffffffff /* wildcard SID */
# define SECCLASS_NULL 0x0000 /* no class */
# define SELINUX_MAGIC 0xf97cff8c
/* Identify specific policy version changes */
# define POLICYDB_VERSION_BASE 15
# define POLICYDB_VERSION_BOOL 16
# define POLICYDB_VERSION_IPV6 17
# define POLICYDB_VERSION_NLCLASS 18
# define POLICYDB_VERSION_VALIDATETRANS 19
# define POLICYDB_VERSION_MLS 19
2005-09-03 15:55:16 -07:00
# define POLICYDB_VERSION_AVTAB 20
2006-09-25 23:31:59 -07:00
# define POLICYDB_VERSION_RANGETRANS 21
2008-01-29 08:38:19 -05:00
# define POLICYDB_VERSION_POLCAP 22
2008-03-31 12:17:33 +11:00
# define POLICYDB_VERSION_PERMISSIVE 23
2008-08-28 16:35:57 +09:00
# define POLICYDB_VERSION_BOUNDARY 24
2005-04-16 15:20:36 -07:00
/* Range of policy versions we understand*/
# define POLICYDB_VERSION_MIN POLICYDB_VERSION_BASE
2006-09-25 23:31:58 -07:00
# ifdef CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX
# define POLICYDB_VERSION_MAX CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX_VALUE
# else
2008-08-28 16:35:57 +09:00
# define POLICYDB_VERSION_MAX POLICYDB_VERSION_BOUNDARY
2006-09-25 23:31:58 -07:00
# endif
2005-04-16 15:20:36 -07:00
2009-01-16 09:22:02 -05:00
/* Mask for just the mount related flags */
# define SE_MNTMASK 0x0f
/* Super block security struct flags for mount options */
2008-03-05 10:31:54 -05:00
# define CONTEXT_MNT 0x01
# define FSCONTEXT_MNT 0x02
# define ROOTCONTEXT_MNT 0x04
# define DEFCONTEXT_MNT 0x08
2009-01-16 09:22:02 -05:00
/* Non-mount related flags */
# define SE_SBINITIALIZED 0x10
# define SE_SBPROC 0x20
2009-01-16 09:22:03 -05:00
# define SE_SBLABELSUPP 0x40
2008-03-05 10:31:54 -05:00
2008-04-01 13:24:09 -04:00
# define CONTEXT_STR "context="
# define FSCONTEXT_STR "fscontext="
# define ROOTCONTEXT_STR "rootcontext="
# define DEFCONTEXT_STR "defcontext="
2009-01-16 09:22:03 -05:00
# define LABELSUPP_STR "seclabel"
2008-04-01 13:24:09 -04:00
2007-02-28 15:14:22 -05:00
struct netlbl_lsm_secattr ;
2006-11-17 23:01:03 -05:00
2005-04-16 15:20:36 -07:00
extern int selinux_enabled ;
extern int selinux_mls_enabled ;
2008-01-29 08:38:19 -05:00
/* Policy capabilities */
enum {
POLICYDB_CAPABILITY_NETPEER ,
2008-02-28 12:58:40 -05:00
POLICYDB_CAPABILITY_OPENPERM ,
2008-01-29 08:38:19 -05:00
__POLICYDB_CAPABILITY_MAX
} ;
# define POLICYDB_CAPABILITY_MAX (__POLICYDB_CAPABILITY_MAX - 1)
extern int selinux_policycap_netpeer ;
2008-02-28 12:58:40 -05:00
extern int selinux_policycap_openperm ;
2008-01-29 08:38:19 -05:00
2008-08-28 16:35:57 +09:00
/*
* type_datum properties
* available at the kernel policy version > = POLICYDB_VERSION_BOUNDARY
*/
# define TYPEDATUM_PROPERTY_PRIMARY 0x0001
# define TYPEDATUM_PROPERTY_ATTRIBUTE 0x0002
/* limitation of boundary depth */
# define POLICYDB_BOUNDS_MAXDEPTH 4
2008-04-22 17:46:11 -04:00
int security_load_policy ( void * data , size_t len ) ;
2005-04-16 15:20:36 -07:00
2008-01-29 08:38:19 -05:00
int security_policycap_supported ( unsigned int req_cap ) ;
2007-05-23 09:12:09 -04:00
# define SEL_VEC_MAX 32
2005-04-16 15:20:36 -07:00
struct av_decision {
u32 allowed ;
u32 auditallow ;
u32 auditdeny ;
u32 seqno ;
} ;
2008-03-31 12:17:33 +11:00
int security_permissive_sid ( u32 sid ) ;
2005-04-16 15:20:36 -07:00
int security_compute_av ( u32 ssid , u32 tsid ,
u16 tclass , u32 requested ,
struct av_decision * avd ) ;
int security_transition_sid ( u32 ssid , u32 tsid ,
u16 tclass , u32 * out_sid ) ;
int security_member_sid ( u32 ssid , u32 tsid ,
u16 tclass , u32 * out_sid ) ;
int security_change_sid ( u32 ssid , u32 tsid ,
u16 tclass , u32 * out_sid ) ;
int security_sid_to_context ( u32 sid , char * * scontext ,
u32 * scontext_len ) ;
2008-05-07 13:03:20 -04:00
int security_sid_to_context_force ( u32 sid , char * * scontext , u32 * scontext_len ) ;
2008-04-29 00:59:41 -07:00
int security_context_to_sid ( const char * scontext , u32 scontext_len ,
2005-04-16 15:20:36 -07:00
u32 * out_sid ) ;
2008-04-29 20:52:51 +01:00
int security_context_to_sid_default ( const char * scontext , u32 scontext_len ,
2008-04-04 08:46:05 -04:00
u32 * out_sid , u32 def_sid , gfp_t gfp_flags ) ;
2005-07-28 01:07:37 -07:00
2008-05-07 13:03:20 -04:00
int security_context_to_sid_force ( const char * scontext , u32 scontext_len ,
u32 * sid ) ;
2005-04-16 15:20:36 -07:00
int security_get_user_sids ( u32 callsid , char * username ,
u32 * * sids , u32 * nel ) ;
2008-04-10 10:48:14 -04:00
int security_port_sid ( u8 protocol , u16 port , u32 * out_sid ) ;
2005-04-16 15:20:36 -07:00
2008-01-29 08:38:08 -05:00
int security_netif_sid ( char * name , u32 * if_sid ) ;
2005-04-16 15:20:36 -07:00
int security_node_sid ( u16 domain , void * addr , u32 addrlen ,
u32 * out_sid ) ;
int security_validate_transition ( u32 oldsid , u32 newsid , u32 tasksid ,
2008-04-22 17:46:11 -04:00
u16 tclass ) ;
2005-04-16 15:20:36 -07:00
2008-08-28 16:35:57 +09:00
int security_bounded_transition ( u32 oldsid , u32 newsid ) ;
2006-07-24 23:27:16 -07:00
int security_sid_mls_copy ( u32 sid , u32 mls_sid , u32 * new_sid ) ;
2008-01-29 08:38:23 -05:00
int security_net_peersid_resolve ( u32 nlbl_sid , u32 nlbl_type ,
u32 xfrm_sid ,
u32 * peer_sid ) ;
2007-05-23 09:12:06 -04:00
int security_get_classes ( char * * * classes , int * nclasses ) ;
int security_get_permissions ( char * class , char * * * perms , int * nperms ) ;
2007-09-21 14:37:10 -04:00
int security_get_reject_unknown ( void ) ;
int security_get_allow_unknown ( void ) ;
2007-05-23 09:12:06 -04:00
2005-04-16 15:20:36 -07:00
# define SECURITY_FS_USE_XATTR 1 /* use xattr */
# define SECURITY_FS_USE_TRANS 2 /* use transition SIDs, e.g. devpts/tmpfs */
# define SECURITY_FS_USE_TASK 3 /* use task SIDs, e.g. pipefs/sockfs */
# define SECURITY_FS_USE_GENFS 4 /* use the genfs support */
# define SECURITY_FS_USE_NONE 5 /* no labeling support */
# define SECURITY_FS_USE_MNTPOINT 6 /* use mountpoint labeling */
int security_fs_use ( const char * fstype , unsigned int * behavior ,
2008-07-15 18:32:49 +10:00
u32 * sid ) ;
2005-04-16 15:20:36 -07:00
int security_genfs_sid ( const char * fstype , char * name , u16 sclass ,
u32 * sid ) ;
2007-02-28 15:14:22 -05:00
# ifdef CONFIG_NETLABEL
int security_netlbl_secattr_to_sid ( struct netlbl_lsm_secattr * secattr ,
u32 * sid ) ;
int security_netlbl_sid_to_secattr ( u32 sid ,
struct netlbl_lsm_secattr * secattr ) ;
# else
static inline int security_netlbl_secattr_to_sid (
struct netlbl_lsm_secattr * secattr ,
u32 * sid )
{
return - EIDRM ;
}
static inline int security_netlbl_sid_to_secattr ( u32 sid ,
struct netlbl_lsm_secattr * secattr )
{
return - ENOENT ;
}
# endif /* CONFIG_NETLABEL */
2007-04-04 10:11:29 -04:00
const char * security_get_initial_sid_context ( u32 sid ) ;
2005-04-16 15:20:36 -07:00
# endif /* _SELINUX_SECURITY_H_ */