linux/security/selinux/include/security.h
<<
>>
Prefs
   1/*
   2 * Security server interface.
   3 *
   4 * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
   5 *
   6 */
   7
   8#ifndef _SELINUX_SECURITY_H_
   9#define _SELINUX_SECURITY_H_
  10
  11#include <linux/magic.h>
  12#include "flask.h"
  13
  14#define SECSID_NULL                     0x00000000 /* unspecified SID */
  15#define SECSID_WILD                     0xffffffff /* wildcard SID */
  16#define SECCLASS_NULL                   0x0000 /* no class */
  17
  18/* Identify specific policy version changes */
  19#define POLICYDB_VERSION_BASE           15
  20#define POLICYDB_VERSION_BOOL           16
  21#define POLICYDB_VERSION_IPV6           17
  22#define POLICYDB_VERSION_NLCLASS        18
  23#define POLICYDB_VERSION_VALIDATETRANS  19
  24#define POLICYDB_VERSION_MLS            19
  25#define POLICYDB_VERSION_AVTAB          20
  26#define POLICYDB_VERSION_RANGETRANS     21
  27#define POLICYDB_VERSION_POLCAP         22
  28#define POLICYDB_VERSION_PERMISSIVE     23
  29#define POLICYDB_VERSION_BOUNDARY       24
  30
  31/* Range of policy versions we understand*/
  32#define POLICYDB_VERSION_MIN   POLICYDB_VERSION_BASE
  33#ifdef CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX
  34#define POLICYDB_VERSION_MAX    CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX_VALUE
  35#else
  36#define POLICYDB_VERSION_MAX    POLICYDB_VERSION_BOUNDARY
  37#endif
  38
  39/* Mask for just the mount related flags */
  40#define SE_MNTMASK      0x0f
  41/* Super block security struct flags for mount options */
  42#define CONTEXT_MNT     0x01
  43#define FSCONTEXT_MNT   0x02
  44#define ROOTCONTEXT_MNT 0x04
  45#define DEFCONTEXT_MNT  0x08
  46/* Non-mount related flags */
  47#define SE_SBINITIALIZED        0x10
  48#define SE_SBPROC               0x20
  49#define SE_SBLABELSUPP  0x40
  50
  51#define CONTEXT_STR     "context="
  52#define FSCONTEXT_STR   "fscontext="
  53#define ROOTCONTEXT_STR "rootcontext="
  54#define DEFCONTEXT_STR  "defcontext="
  55#define LABELSUPP_STR "seclabel"
  56
  57struct netlbl_lsm_secattr;
  58
  59extern int selinux_enabled;
  60extern int selinux_mls_enabled;
  61
  62/* Policy capabilities */
  63enum {
  64        POLICYDB_CAPABILITY_NETPEER,
  65        POLICYDB_CAPABILITY_OPENPERM,
  66        __POLICYDB_CAPABILITY_MAX
  67};
  68#define POLICYDB_CAPABILITY_MAX (__POLICYDB_CAPABILITY_MAX - 1)
  69
  70extern int selinux_policycap_netpeer;
  71extern int selinux_policycap_openperm;
  72
  73/*
  74 * type_datum properties
  75 * available at the kernel policy version >= POLICYDB_VERSION_BOUNDARY
  76 */
  77#define TYPEDATUM_PROPERTY_PRIMARY      0x0001
  78#define TYPEDATUM_PROPERTY_ATTRIBUTE    0x0002
  79
  80/* limitation of boundary depth  */
  81#define POLICYDB_BOUNDS_MAXDEPTH        4
  82
  83int security_load_policy(void *data, size_t len);
  84
  85int security_policycap_supported(unsigned int req_cap);
  86
  87#define SEL_VEC_MAX 32
  88struct av_decision {
  89        u32 allowed;
  90        u32 auditallow;
  91        u32 auditdeny;
  92        u32 seqno;
  93        u32 flags;
  94};
  95
  96/* definitions of av_decision.flags */
  97#define AVD_FLAGS_PERMISSIVE    0x0001
  98
  99int security_compute_av(u32 ssid, u32 tsid,
 100        u16 tclass, u32 requested,
 101        struct av_decision *avd);
 102
 103int security_transition_sid(u32 ssid, u32 tsid,
 104        u16 tclass, u32 *out_sid);
 105
 106int security_member_sid(u32 ssid, u32 tsid,
 107        u16 tclass, u32 *out_sid);
 108
 109int security_change_sid(u32 ssid, u32 tsid,
 110        u16 tclass, u32 *out_sid);
 111
 112int security_sid_to_context(u32 sid, char **scontext,
 113        u32 *scontext_len);
 114
 115int security_sid_to_context_force(u32 sid, char **scontext, u32 *scontext_len);
 116
 117int security_context_to_sid(const char *scontext, u32 scontext_len,
 118        u32 *out_sid);
 119
 120int security_context_to_sid_default(const char *scontext, u32 scontext_len,
 121                                    u32 *out_sid, u32 def_sid, gfp_t gfp_flags);
 122
 123int security_context_to_sid_force(const char *scontext, u32 scontext_len,
 124                                  u32 *sid);
 125
 126int security_get_user_sids(u32 callsid, char *username,
 127                           u32 **sids, u32 *nel);
 128
 129int security_port_sid(u8 protocol, u16 port, u32 *out_sid);
 130
 131int security_netif_sid(char *name, u32 *if_sid);
 132
 133int security_node_sid(u16 domain, void *addr, u32 addrlen,
 134        u32 *out_sid);
 135
 136int security_validate_transition(u32 oldsid, u32 newsid, u32 tasksid,
 137                                 u16 tclass);
 138
 139int security_bounded_transition(u32 oldsid, u32 newsid);
 140
 141int security_sid_mls_copy(u32 sid, u32 mls_sid, u32 *new_sid);
 142
 143int security_net_peersid_resolve(u32 nlbl_sid, u32 nlbl_type,
 144                                 u32 xfrm_sid,
 145                                 u32 *peer_sid);
 146
 147int security_get_classes(char ***classes, int *nclasses);
 148int security_get_permissions(char *class, char ***perms, int *nperms);
 149int security_get_reject_unknown(void);
 150int security_get_allow_unknown(void);
 151
 152#define SECURITY_FS_USE_XATTR           1 /* use xattr */
 153#define SECURITY_FS_USE_TRANS           2 /* use transition SIDs, e.g. devpts/tmpfs */
 154#define SECURITY_FS_USE_TASK            3 /* use task SIDs, e.g. pipefs/sockfs */
 155#define SECURITY_FS_USE_GENFS           4 /* use the genfs support */
 156#define SECURITY_FS_USE_NONE            5 /* no labeling support */
 157#define SECURITY_FS_USE_MNTPOINT        6 /* use mountpoint labeling */
 158
 159int security_fs_use(const char *fstype, unsigned int *behavior,
 160        u32 *sid);
 161
 162int security_genfs_sid(const char *fstype, char *name, u16 sclass,
 163        u32 *sid);
 164
 165#ifdef CONFIG_NETLABEL
 166int security_netlbl_secattr_to_sid(struct netlbl_lsm_secattr *secattr,
 167                                   u32 *sid);
 168
 169int security_netlbl_sid_to_secattr(u32 sid,
 170                                   struct netlbl_lsm_secattr *secattr);
 171#else
 172static inline int security_netlbl_secattr_to_sid(
 173                                            struct netlbl_lsm_secattr *secattr,
 174                                            u32 *sid)
 175{
 176        return -EIDRM;
 177}
 178
 179static inline int security_netlbl_sid_to_secattr(u32 sid,
 180                                           struct netlbl_lsm_secattr *secattr)
 181{
 182        return -ENOENT;
 183}
 184#endif /* CONFIG_NETLABEL */
 185
 186const char *security_get_initial_sid_context(u32 sid);
 187
 188#endif /* _SELINUX_SECURITY_H_ */
 189
 190