diff options
Diffstat (limited to 'include/linux/lsm_audit.h')
| -rw-r--r-- | include/linux/lsm_audit.h | 96 | 
1 files changed, 25 insertions, 71 deletions
diff --git a/include/linux/lsm_audit.h b/include/linux/lsm_audit.h index eab507f2b1c..fad48aab893 100644 --- a/include/linux/lsm_audit.h +++ b/include/linux/lsm_audit.h @@ -22,6 +22,23 @@  #include <linux/key.h>  #include <linux/skbuff.h> +struct lsm_network_audit { +	int netif; +	struct sock *sk; +	u16 family; +	__be16 dport; +	__be16 sport; +	union { +		struct { +			__be32 daddr; +			__be32 saddr; +		} v4; +		struct { +			struct in6_addr daddr; +			struct in6_addr saddr; +		} v6; +	} fam; +};  /* Auxiliary data to use in generating the audit record. */  struct common_audit_data { @@ -41,23 +58,7 @@ struct common_audit_data {  		struct path path;  		struct dentry *dentry;  		struct inode *inode; -		struct { -			int netif; -			struct sock *sk; -			u16 family; -			__be16 dport; -			__be16 sport; -			union { -				struct { -					__be32 daddr; -					__be32 saddr; -				} v4; -				struct { -					struct in6_addr daddr; -					struct in6_addr saddr; -				} v6; -			} fam; -		} net; +		struct lsm_network_audit *net;  		int cap;  		int ipc_id;  		struct task_struct *tsk; @@ -72,64 +73,15 @@ struct common_audit_data {  	/* this union contains LSM specific data */  	union {  #ifdef CONFIG_SECURITY_SMACK -		/* SMACK data */ -		struct smack_audit_data { -			const char *function; -			char *subject; -			char *object; -			char *request; -			int result; -		} smack_audit_data; +		struct smack_audit_data *smack_audit_data;  #endif  #ifdef CONFIG_SECURITY_SELINUX -		/* SELinux data */ -		struct { -			u32 ssid; -			u32 tsid; -			u16 tclass; -			u32 requested; -			u32 audited; -			u32 denied; -			/* -			 * auditdeny is a bit tricky and unintuitive.  See the -			 * comments in avc.c for it's meaning and usage. -			 */ -			u32 auditdeny; -			struct av_decision *avd; -			int result; -		} selinux_audit_data; +		struct selinux_audit_data *selinux_audit_data;  #endif  #ifdef CONFIG_SECURITY_APPARMOR -		struct { -			int error; -			int op; -			int type; -			void *profile; -			const char *name; -			const char *info; -			union { -				void *target; -				struct { -					long pos; -					void *target; -				} iface; -				struct { -					int rlim; -					unsigned long max; -				} rlim; -				struct { -					const char *target; -					u32 request; -					u32 denied; -					uid_t ouid; -				} fs; -			}; -		} apparmor_audit_data; +		struct apparmor_audit_data *apparmor_audit_data;  #endif -	}; -	/* these callback will be implemented by a specific LSM */ -	void (*lsm_pre_audit)(struct audit_buffer *, void *); -	void (*lsm_post_audit)(struct audit_buffer *, void *); +	}; /* per LSM data pointer union */  };  #define v4info fam.v4 @@ -146,6 +98,8 @@ int ipv6_skb_to_auditdata(struct sk_buff *skb,  	{ memset((_d), 0, sizeof(struct common_audit_data)); \  	 (_d)->type = LSM_AUDIT_DATA_##_t; } -void common_lsm_audit(struct common_audit_data *a); +void common_lsm_audit(struct common_audit_data *a, +	void (*pre_audit)(struct audit_buffer *, void *), +	void (*post_audit)(struct audit_buffer *, void *));  #endif  |