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