]> Pileus Git - ~andy/linux/blobdiff - security/smack/smack.h
LSM: do not initialize common_audit_data to 0
[~andy/linux] / security / smack / smack.h
index 2ad00657b80198f3cd9f8acbd20a5eed31f0f218..b61e75f224d44718b99f4880bb3ff36791cd1772 100644 (file)
@@ -185,6 +185,15 @@ struct smack_known {
  */
 #define SMK_NUM_ACCESS_TYPE 5
 
+/* SMACK data */
+struct smack_audit_data {
+       const char *function;
+       char *subject;
+       char *object;
+       char *request;
+       int result;
+};
+
 /*
  * Smack audit data; is empty if CONFIG_AUDIT not set
  * to save some stack
@@ -192,6 +201,7 @@ struct smack_known {
 struct smk_audit_info {
 #ifdef CONFIG_AUDIT
        struct common_audit_data a;
+       struct smack_audit_data sad;
 #endif
 };
 /*
@@ -309,9 +319,18 @@ void smack_log(char *subject_label, char *object_label,
 static inline void smk_ad_init(struct smk_audit_info *a, const char *func,
                               char type)
 {
-       memset(a, 0, sizeof(*a));
+       memset(&a->sad, 0, sizeof(a->sad));
        a->a.type = type;
-       a->a.smack_audit_data.function = func;
+       a->a.smack_audit_data = &a->sad;
+       a->a.smack_audit_data->function = func;
+}
+
+static inline void smk_ad_init_net(struct smk_audit_info *a, const char *func,
+                                  char type, struct lsm_network_audit *net)
+{
+       smk_ad_init(a, func, type);
+       memset(net, 0, sizeof(*net));
+       a->a.u.net = net;
 }
 
 static inline void smk_ad_setfield_u_tsk(struct smk_audit_info *a,
@@ -337,7 +356,7 @@ static inline void smk_ad_setfield_u_fs_path(struct smk_audit_info *a,
 static inline void smk_ad_setfield_u_net_sk(struct smk_audit_info *a,
                                            struct sock *sk)
 {
-       a->a.u.net.sk = sk;
+       a->a.u.net->sk = sk;
 }
 
 #else /* no AUDIT */