]> Pileus Git - ~andy/linux/blobdiff - include/linux/lsm_audit.h
LSM: remove the task field from common_audit_data
[~andy/linux] / include / linux / lsm_audit.h
index eab507f2b1cb649484f9e96028b51c7cce737e12..75368c1aac78dc567358a759dfafc57711ff2bed 100644 (file)
 #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 {
@@ -36,28 +53,11 @@ struct common_audit_data {
 #define LSM_AUDIT_DATA_KMOD    8
 #define LSM_AUDIT_DATA_INODE   9
 #define LSM_AUDIT_DATA_DENTRY  10
-       struct task_struct *tsk;
        union   {
                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 +72,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
@@ -144,8 +95,10 @@ int ipv6_skb_to_auditdata(struct sk_buff *skb,
 /* Initialize an LSM audit data structure. */
 #define COMMON_AUDIT_DATA_INIT(_d, _t) \
        { memset((_d), 0, sizeof(struct common_audit_data)); \
-        (_d)->type = LSM_AUDIT_DATA_##_t; }
+        (_d)->type = _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