diff options
Diffstat (limited to 'security/selinux/include/security.h')
| -rw-r--r-- | security/selinux/include/security.h | 32 | 
1 files changed, 30 insertions, 2 deletions
diff --git a/security/selinux/include/security.h b/security/selinux/include/security.h index 36993ad1c067..6a681d26bf20 100644 --- a/security/selinux/include/security.h +++ b/security/selinux/include/security.h @@ -35,13 +35,14 @@  #define POLICYDB_VERSION_NEW_OBJECT_DEFAULTS	27  #define POLICYDB_VERSION_DEFAULT_TYPE	28  #define POLICYDB_VERSION_CONSTRAINT_NAMES	29 +#define POLICYDB_VERSION_XPERMS_IOCTL	30  /* Range of policy versions we understand*/  #define POLICYDB_VERSION_MIN   POLICYDB_VERSION_BASE  #ifdef CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX  #define POLICYDB_VERSION_MAX	CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX_VALUE  #else -#define POLICYDB_VERSION_MAX	POLICYDB_VERSION_CONSTRAINT_NAMES +#define POLICYDB_VERSION_MAX	POLICYDB_VERSION_XPERMS_IOCTL  #endif  /* Mask for just the mount related flags */ @@ -109,11 +110,38 @@ struct av_decision {  	u32 flags;  }; +#define XPERMS_ALLOWED 1 +#define XPERMS_AUDITALLOW 2 +#define XPERMS_DONTAUDIT 4 + +#define security_xperm_set(perms, x) (perms[x >> 5] |= 1 << (x & 0x1f)) +#define security_xperm_test(perms, x) (1 & (perms[x >> 5] >> (x & 0x1f))) +struct extended_perms_data { +	u32 p[8]; +}; + +struct extended_perms_decision { +	u8 used; +	u8 driver; +	struct extended_perms_data *allowed; +	struct extended_perms_data *auditallow; +	struct extended_perms_data *dontaudit; +}; + +struct extended_perms { +	u16 len;	/* length associated decision chain */ +	struct extended_perms_data drivers; /* flag drivers that are used */ +}; +  /* definitions of av_decision.flags */  #define AVD_FLAGS_PERMISSIVE	0x0001  void security_compute_av(u32 ssid, u32 tsid, -			 u16 tclass, struct av_decision *avd); +			 u16 tclass, struct av_decision *avd, +			 struct extended_perms *xperms); + +void security_compute_xperms_decision(u32 ssid, u32 tsid, u16 tclass, +			 u8 driver, struct extended_perms_decision *xpermd);  void security_compute_av_user(u32 ssid, u32 tsid,  			     u16 tclass, struct av_decision *avd);  |