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/compiler.h>
  12#include <linux/dcache.h>
  13#include <linux/magic.h>
  14#include <linux/types.h>
  15#include "flask.h"
  16
  17#define SECSID_NULL                     0x00000000 /* unspecified SID */
  18#define SECSID_WILD                     0xffffffff /* wildcard SID */
  19#define SECCLASS_NULL                   0x0000 /* no class */
  20
  21/* Identify specific policy version changes */
  22#define POLICYDB_VERSION_BASE           15
  23#define POLICYDB_VERSION_BOOL           16
  24#define POLICYDB_VERSION_IPV6           17
  25#define POLICYDB_VERSION_NLCLASS        18
  26#define POLICYDB_VERSION_VALIDATETRANS  19
  27#define POLICYDB_VERSION_MLS            19
  28#define POLICYDB_VERSION_AVTAB          20
  29#define POLICYDB_VERSION_RANGETRANS     21
  30#define POLICYDB_VERSION_POLCAP         22
  31#define POLICYDB_VERSION_PERMISSIVE     23
  32#define POLICYDB_VERSION_BOUNDARY       24
  33#define POLICYDB_VERSION_FILENAME_TRANS 25
  34#define POLICYDB_VERSION_ROLETRANS      26
  35#define POLICYDB_VERSION_NEW_OBJECT_DEFAULTS    27
  36#define POLICYDB_VERSION_DEFAULT_TYPE   28
  37#define POLICYDB_VERSION_CONSTRAINT_NAMES       29
  38#define POLICYDB_VERSION_XPERMS_IOCTL   30
  39#define POLICYDB_VERSION_INFINIBAND             31
  40
  41/* Range of policy versions we understand*/
  42#define POLICYDB_VERSION_MIN   POLICYDB_VERSION_BASE
  43#define POLICYDB_VERSION_MAX   POLICYDB_VERSION_INFINIBAND
  44
  45/* Mask for just the mount related flags */
  46#define SE_MNTMASK      0x0f
  47/* Super block security struct flags for mount options */
  48/* BE CAREFUL, these need to be the low order bits for selinux_get_mnt_opts */
  49#define CONTEXT_MNT     0x01
  50#define FSCONTEXT_MNT   0x02
  51#define ROOTCONTEXT_MNT 0x04
  52#define DEFCONTEXT_MNT  0x08
  53#define SBLABEL_MNT     0x10
  54/* Non-mount related flags */
  55#define SE_SBINITIALIZED        0x0100
  56#define SE_SBPROC               0x0200
  57#define SE_SBGENFS              0x0400
  58
  59#define CONTEXT_STR     "context="
  60#define FSCONTEXT_STR   "fscontext="
  61#define ROOTCONTEXT_STR "rootcontext="
  62#define DEFCONTEXT_STR  "defcontext="
  63#define LABELSUPP_STR "seclabel"
  64
  65struct netlbl_lsm_secattr;
  66
  67extern int selinux_enabled;
  68
  69/* Policy capabilities */
  70enum {
  71        POLICYDB_CAPABILITY_NETPEER,
  72        POLICYDB_CAPABILITY_OPENPERM,
  73        POLICYDB_CAPABILITY_EXTSOCKCLASS,
  74        POLICYDB_CAPABILITY_ALWAYSNETWORK,
  75        POLICYDB_CAPABILITY_CGROUPSECLABEL,
  76        __POLICYDB_CAPABILITY_MAX
  77};
  78#define POLICYDB_CAPABILITY_MAX (__POLICYDB_CAPABILITY_MAX - 1)
  79
  80extern char *selinux_policycap_names[__POLICYDB_CAPABILITY_MAX];
  81
  82extern int selinux_policycap_netpeer;
  83extern int selinux_policycap_openperm;
  84extern int selinux_policycap_extsockclass;
  85extern int selinux_policycap_alwaysnetwork;
  86extern int selinux_policycap_cgroupseclabel;
  87
  88/*
  89 * type_datum properties
  90 * available at the kernel policy version >= POLICYDB_VERSION_BOUNDARY
  91 */
  92#define TYPEDATUM_PROPERTY_PRIMARY      0x0001
  93#define TYPEDATUM_PROPERTY_ATTRIBUTE    0x0002
  94
  95/* limitation of boundary depth  */
  96#define POLICYDB_BOUNDS_MAXDEPTH        4
  97
  98int security_mls_enabled(void);
  99
 100int security_load_policy(void *data, size_t len);
 101int security_read_policy(void **data, size_t *len);
 102size_t security_policydb_len(void);
 103
 104int security_policycap_supported(unsigned int req_cap);
 105
 106#define SEL_VEC_MAX 32
 107struct av_decision {
 108        u32 allowed;
 109        u32 auditallow;
 110        u32 auditdeny;
 111        u32 seqno;
 112        u32 flags;
 113};
 114
 115#define XPERMS_ALLOWED 1
 116#define XPERMS_AUDITALLOW 2
 117#define XPERMS_DONTAUDIT 4
 118
 119#define security_xperm_set(perms, x) (perms[x >> 5] |= 1 << (x & 0x1f))
 120#define security_xperm_test(perms, x) (1 & (perms[x >> 5] >> (x & 0x1f)))
 121struct extended_perms_data {
 122        u32 p[8];
 123};
 124
 125struct extended_perms_decision {
 126        u8 used;
 127        u8 driver;
 128        struct extended_perms_data *allowed;
 129        struct extended_perms_data *auditallow;
 130        struct extended_perms_data *dontaudit;
 131};
 132
 133struct extended_perms {
 134        u16 len;        /* length associated decision chain */
 135        struct extended_perms_data drivers; /* flag drivers that are used */
 136};
 137
 138/* definitions of av_decision.flags */
 139#define AVD_FLAGS_PERMISSIVE    0x0001
 140
 141void security_compute_av(u32 ssid, u32 tsid,
 142                         u16 tclass, struct av_decision *avd,
 143                         struct extended_perms *xperms);
 144
 145void security_compute_xperms_decision(u32 ssid, u32 tsid, u16 tclass,
 146                         u8 driver, struct extended_perms_decision *xpermd);
 147
 148void security_compute_av_user(u32 ssid, u32 tsid,
 149                             u16 tclass, struct av_decision *avd);
 150
 151int security_transition_sid(u32 ssid, u32 tsid, u16 tclass,
 152                            const struct qstr *qstr, u32 *out_sid);
 153
 154int security_transition_sid_user(u32 ssid, u32 tsid, u16 tclass,
 155                                 const char *objname, u32 *out_sid);
 156
 157int security_member_sid(u32 ssid, u32 tsid,
 158        u16 tclass, u32 *out_sid);
 159
 160int security_change_sid(u32 ssid, u32 tsid,
 161        u16 tclass, u32 *out_sid);
 162
 163int security_sid_to_context(u32 sid, char **scontext,
 164        u32 *scontext_len);
 165
 166int security_sid_to_context_force(u32 sid, char **scontext, u32 *scontext_len);
 167
 168int security_context_to_sid(const char *scontext, u32 scontext_len,
 169                            u32 *out_sid, gfp_t gfp);
 170
 171int security_context_str_to_sid(const char *scontext, u32 *out_sid, gfp_t gfp);
 172
 173int security_context_to_sid_default(const char *scontext, u32 scontext_len,
 174                                    u32 *out_sid, u32 def_sid, gfp_t gfp_flags);
 175
 176int security_context_to_sid_force(const char *scontext, u32 scontext_len,
 177                                  u32 *sid);
 178
 179int security_get_user_sids(u32 callsid, char *username,
 180                           u32 **sids, u32 *nel);
 181
 182int security_port_sid(u8 protocol, u16 port, u32 *out_sid);
 183
 184int security_ib_pkey_sid(u64 subnet_prefix, u16 pkey_num, u32 *out_sid);
 185
 186int security_ib_endport_sid(const char *dev_name, u8 port_num, u32 *out_sid);
 187
 188int security_netif_sid(char *name, u32 *if_sid);
 189
 190int security_node_sid(u16 domain, void *addr, u32 addrlen,
 191        u32 *out_sid);
 192
 193int security_validate_transition(u32 oldsid, u32 newsid, u32 tasksid,
 194                                 u16 tclass);
 195
 196int security_validate_transition_user(u32 oldsid, u32 newsid, u32 tasksid,
 197                                      u16 tclass);
 198
 199int security_bounded_transition(u32 oldsid, u32 newsid);
 200
 201int security_sid_mls_copy(u32 sid, u32 mls_sid, u32 *new_sid);
 202
 203int security_net_peersid_resolve(u32 nlbl_sid, u32 nlbl_type,
 204                                 u32 xfrm_sid,
 205                                 u32 *peer_sid);
 206
 207int security_get_classes(char ***classes, int *nclasses);
 208int security_get_permissions(char *class, char ***perms, int *nperms);
 209int security_get_reject_unknown(void);
 210int security_get_allow_unknown(void);
 211
 212#define SECURITY_FS_USE_XATTR           1 /* use xattr */
 213#define SECURITY_FS_USE_TRANS           2 /* use transition SIDs, e.g. devpts/tmpfs */
 214#define SECURITY_FS_USE_TASK            3 /* use task SIDs, e.g. pipefs/sockfs */
 215#define SECURITY_FS_USE_GENFS           4 /* use the genfs support */
 216#define SECURITY_FS_USE_NONE            5 /* no labeling support */
 217#define SECURITY_FS_USE_MNTPOINT        6 /* use mountpoint labeling */
 218#define SECURITY_FS_USE_NATIVE          7 /* use native label support */
 219#define SECURITY_FS_USE_MAX             7 /* Highest SECURITY_FS_USE_XXX */
 220
 221int security_fs_use(struct super_block *sb);
 222
 223int security_genfs_sid(const char *fstype, char *name, u16 sclass,
 224        u32 *sid);
 225
 226#ifdef CONFIG_NETLABEL
 227int security_netlbl_secattr_to_sid(struct netlbl_lsm_secattr *secattr,
 228                                   u32 *sid);
 229
 230int security_netlbl_sid_to_secattr(u32 sid,
 231                                   struct netlbl_lsm_secattr *secattr);
 232#else
 233static inline int security_netlbl_secattr_to_sid(
 234                                            struct netlbl_lsm_secattr *secattr,
 235                                            u32 *sid)
 236{
 237        return -EIDRM;
 238}
 239
 240static inline int security_netlbl_sid_to_secattr(u32 sid,
 241                                           struct netlbl_lsm_secattr *secattr)
 242{
 243        return -ENOENT;
 244}
 245#endif /* CONFIG_NETLABEL */
 246
 247const char *security_get_initial_sid_context(u32 sid);
 248
 249/*
 250 * status notifier using mmap interface
 251 */
 252extern struct page *selinux_kernel_status_page(void);
 253
 254#define SELINUX_KERNEL_STATUS_VERSION   1
 255struct selinux_kernel_status {
 256        u32     version;        /* version number of thie structure */
 257        u32     sequence;       /* sequence number of seqlock logic */
 258        u32     enforcing;      /* current setting of enforcing mode */
 259        u32     policyload;     /* times of policy reloaded */
 260        u32     deny_unknown;   /* current setting of deny_unknown */
 261        /*
 262         * The version > 0 supports above members.
 263         */
 264} __packed;
 265
 266extern void selinux_status_update_setenforce(int enforcing);
 267extern void selinux_status_update_policyload(int seqno);
 268extern void selinux_complete_init(void);
 269extern int selinux_disable(void);
 270extern void exit_sel_fs(void);
 271extern struct path selinux_null;
 272extern struct vfsmount *selinuxfs_mount;
 273extern void selnl_notify_setenforce(int val);
 274extern void selnl_notify_policyload(u32 seqno);
 275extern int selinux_nlmsg_lookup(u16 sclass, u16 nlmsg_type, u32 *perm);
 276
 277#endif /* _SELINUX_SECURITY_H_ */
 278
 279