blktrace: fix documentation for blk_fill_rw()
[linux-2.6-microblaze.git] / kernel / auditsc.c
index c00aa58..434337a 100644 (file)
@@ -102,8 +102,6 @@ struct audit_aux_data {
        int                     type;
 };
 
-#define AUDIT_AUX_IPCPERM      0
-
 /* Number of target pids per aux struct. */
 #define AUDIT_AUX_PIDS 16
 
@@ -552,11 +550,11 @@ static int audit_filter_rules(struct task_struct *tsk,
                        break;
 
                case AUDIT_EXIT:
-                       if (ctx && ctx->return_valid)
+                       if (ctx && ctx->return_valid != AUDITSC_INVALID)
                                result = audit_comparator(ctx->return_code, f->op, f->val);
                        break;
                case AUDIT_SUCCESS:
-                       if (ctx && ctx->return_valid) {
+                       if (ctx && ctx->return_valid != AUDITSC_INVALID) {
                                if (f->val)
                                        result = audit_comparator(ctx->return_valid, f->op, AUDITSC_SUCCESS);
                                else
@@ -801,12 +799,12 @@ static int audit_in_mask(const struct audit_krule *rule, unsigned long val)
        return rule->mask[word] & bit;
 }
 
-/* At syscall entry and exit time, this filter is called if the
- * audit_state is not low enough that auditing cannot take place, but is
- * also not high enough that we already know we have to write an audit
- * record (i.e., the state is AUDIT_SETUP_CONTEXT or AUDIT_BUILD_CONTEXT).
+/* At syscall exit time, this filter is called if the audit_state is
+ * not low enough that auditing cannot take place, but is also not
+ * high enough that we already know we have to write an audit record
+ * (i.e., the state is AUDIT_SETUP_CONTEXT or AUDIT_BUILD_CONTEXT).
  */
-static enum audit_state audit_filter_syscall(struct task_struct *tsk,
+static void audit_filter_syscall(struct task_struct *tsk,
                                             struct audit_context *ctx,
                                             struct list_head *list)
 {
@@ -814,7 +812,7 @@ static enum audit_state audit_filter_syscall(struct task_struct *tsk,
        enum audit_state state;
 
        if (auditd_test_task(tsk))
-               return AUDIT_DISABLED;
+               return;
 
        rcu_read_lock();
        list_for_each_entry_rcu(e, list, list) {
@@ -823,11 +821,11 @@ static enum audit_state audit_filter_syscall(struct task_struct *tsk,
                                       &state, false)) {
                        rcu_read_unlock();
                        ctx->current_state = state;
-                       return state;
+                       return;
                }
        }
        rcu_read_unlock();
-       return AUDIT_BUILD_CONTEXT;
+       return;
 }
 
 /*
@@ -929,6 +927,8 @@ static inline struct audit_context *audit_alloc_context(enum audit_state state)
        context->prio = state == AUDIT_RECORD_CONTEXT ? ~0ULL : 0;
        INIT_LIST_HEAD(&context->killed_trees);
        INIT_LIST_HEAD(&context->names_list);
+       context->fds[0] = -1;
+       context->return_valid = AUDITSC_INVALID;
        return context;
 }
 
@@ -1367,7 +1367,10 @@ static void audit_log_name(struct audit_context *context, struct audit_names *n,
                        /* name was specified as a relative path and the
                         * directory component is the cwd
                         */
-                       audit_log_d_path(ab, " name=", &context->pwd);
+                       if (context->pwd.dentry && context->pwd.mnt)
+                               audit_log_d_path(ab, " name=", &context->pwd);
+                       else
+                               audit_log_format(ab, " name=(null)");
                        break;
                default:
                        /* log the name's directory component */
@@ -1435,9 +1438,6 @@ static void audit_log_proctitle(void)
        struct audit_context *context = audit_context();
        struct audit_buffer *ab;
 
-       if (!context || context->dummy)
-               return;
-
        ab = audit_log_start(context, GFP_KERNEL, AUDIT_PROCTITLE);
        if (!ab)
                return; /* audit_panic or being filtered */
@@ -1487,7 +1487,7 @@ static void audit_log_exit(void)
                         context->arch, context->major);
        if (context->personality != PER_LINUX)
                audit_log_format(ab, " per=%lx", context->personality);
-       if (context->return_valid)
+       if (context->return_valid != AUDITSC_INVALID)
                audit_log_format(ab, " success=%s exit=%ld",
                                 (context->return_valid==AUDITSC_SUCCESS)?"yes":"no",
                                 context->return_code);
@@ -1624,7 +1624,7 @@ void __audit_free(struct task_struct *tsk)
         * need to log via audit_log_exit().
         */
        if (tsk == current && !context->dummy && context->in_syscall) {
-               context->return_valid = 0;
+               context->return_valid = AUDITSC_INVALID;
                context->return_code = 0;
 
                audit_filter_syscall(tsk, context,
@@ -1866,6 +1866,8 @@ static struct audit_names *audit_alloc_name(struct audit_context *context,
        list_add_tail(&aname->list, &context->names_list);
 
        context->name_count++;
+       if (!context->pwd.dentry)
+               get_fs_pwd(current->fs, &context->pwd);
        return aname;
 }
 
@@ -1894,20 +1896,6 @@ __audit_reusename(const __user char *uptr)
        return NULL;
 }
 
-inline void _audit_getcwd(struct audit_context *context)
-{
-       if (!context->pwd.dentry)
-               get_fs_pwd(current->fs, &context->pwd);
-}
-
-void __audit_getcwd(void)
-{
-       struct audit_context *context = audit_context();
-
-       if (context->in_syscall)
-               _audit_getcwd(context);
-}
-
 /**
  * __audit_getname - add a name to the list
  * @name: name to add
@@ -1931,8 +1919,6 @@ void __audit_getname(struct filename *name)
        n->name_len = AUDIT_NAME_FULL;
        name->aname = n;
        name->refcnt++;
-
-       _audit_getcwd(context);
 }
 
 static inline int audit_copy_fcaps(struct audit_names *name,