sky2: handle advanced error recovery config issues
[linux-2.6] / kernel / auditsc.c
1 /* auditsc.c -- System-call auditing support
2  * Handles all system-call specific auditing features.
3  *
4  * Copyright 2003-2004 Red Hat Inc., Durham, North Carolina.
5  * Copyright 2005 Hewlett-Packard Development Company, L.P.
6  * Copyright (C) 2005, 2006 IBM Corporation
7  * All Rights Reserved.
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
22  *
23  * Written by Rickard E. (Rik) Faith <faith@redhat.com>
24  *
25  * Many of the ideas implemented here are from Stephen C. Tweedie,
26  * especially the idea of avoiding a copy by using getname.
27  *
28  * The method for actual interception of syscall entry and exit (not in
29  * this file -- see entry.S) is based on a GPL'd patch written by
30  * okir@suse.de and Copyright 2003 SuSE Linux AG.
31  *
32  * POSIX message queue support added by George Wilson <ltcgcw@us.ibm.com>,
33  * 2006.
34  *
35  * The support of additional filter rules compares (>, <, >=, <=) was
36  * added by Dustin Kirkland <dustin.kirkland@us.ibm.com>, 2005.
37  *
38  * Modified by Amy Griffis <amy.griffis@hp.com> to collect additional
39  * filesystem information.
40  *
41  * Subject and object context labeling support added by <danjones@us.ibm.com>
42  * and <dustin.kirkland@us.ibm.com> for LSPP certification compliance.
43  */
44
45 #include <linux/init.h>
46 #include <asm/types.h>
47 #include <asm/atomic.h>
48 #include <linux/fs.h>
49 #include <linux/namei.h>
50 #include <linux/mm.h>
51 #include <linux/module.h>
52 #include <linux/mount.h>
53 #include <linux/socket.h>
54 #include <linux/mqueue.h>
55 #include <linux/audit.h>
56 #include <linux/personality.h>
57 #include <linux/time.h>
58 #include <linux/netlink.h>
59 #include <linux/compiler.h>
60 #include <asm/unistd.h>
61 #include <linux/security.h>
62 #include <linux/list.h>
63 #include <linux/tty.h>
64 #include <linux/selinux.h>
65 #include <linux/binfmts.h>
66 #include <linux/highmem.h>
67 #include <linux/syscalls.h>
68 #include <linux/inotify.h>
69
70 #include "audit.h"
71
72 extern struct list_head audit_filter_list[];
73
74 /* AUDIT_NAMES is the number of slots we reserve in the audit_context
75  * for saving names from getname(). */
76 #define AUDIT_NAMES    20
77
78 /* Indicates that audit should log the full pathname. */
79 #define AUDIT_NAME_FULL -1
80
81 /* number of audit rules */
82 int audit_n_rules;
83
84 /* determines whether we collect data for signals sent */
85 int audit_signals;
86
87 /* When fs/namei.c:getname() is called, we store the pointer in name and
88  * we don't let putname() free it (instead we free all of the saved
89  * pointers at syscall exit time).
90  *
91  * Further, in fs/namei.c:path_lookup() we store the inode and device. */
92 struct audit_names {
93         const char      *name;
94         int             name_len;       /* number of name's characters to log */
95         unsigned        name_put;       /* call __putname() for this name */
96         unsigned long   ino;
97         dev_t           dev;
98         umode_t         mode;
99         uid_t           uid;
100         gid_t           gid;
101         dev_t           rdev;
102         u32             osid;
103 };
104
105 struct audit_aux_data {
106         struct audit_aux_data   *next;
107         int                     type;
108 };
109
110 #define AUDIT_AUX_IPCPERM       0
111
112 /* Number of target pids per aux struct. */
113 #define AUDIT_AUX_PIDS  16
114
115 struct audit_aux_data_mq_open {
116         struct audit_aux_data   d;
117         int                     oflag;
118         mode_t                  mode;
119         struct mq_attr          attr;
120 };
121
122 struct audit_aux_data_mq_sendrecv {
123         struct audit_aux_data   d;
124         mqd_t                   mqdes;
125         size_t                  msg_len;
126         unsigned int            msg_prio;
127         struct timespec         abs_timeout;
128 };
129
130 struct audit_aux_data_mq_notify {
131         struct audit_aux_data   d;
132         mqd_t                   mqdes;
133         struct sigevent         notification;
134 };
135
136 struct audit_aux_data_mq_getsetattr {
137         struct audit_aux_data   d;
138         mqd_t                   mqdes;
139         struct mq_attr          mqstat;
140 };
141
142 struct audit_aux_data_ipcctl {
143         struct audit_aux_data   d;
144         struct ipc_perm         p;
145         unsigned long           qbytes;
146         uid_t                   uid;
147         gid_t                   gid;
148         mode_t                  mode;
149         u32                     osid;
150 };
151
152 struct audit_aux_data_execve {
153         struct audit_aux_data   d;
154         int argc;
155         int envc;
156         struct mm_struct *mm;
157 };
158
159 struct audit_aux_data_socketcall {
160         struct audit_aux_data   d;
161         int                     nargs;
162         unsigned long           args[0];
163 };
164
165 struct audit_aux_data_sockaddr {
166         struct audit_aux_data   d;
167         int                     len;
168         char                    a[0];
169 };
170
171 struct audit_aux_data_fd_pair {
172         struct  audit_aux_data d;
173         int     fd[2];
174 };
175
176 struct audit_aux_data_pids {
177         struct audit_aux_data   d;
178         pid_t                   target_pid[AUDIT_AUX_PIDS];
179         u32                     target_sid[AUDIT_AUX_PIDS];
180         int                     pid_count;
181 };
182
183 struct audit_tree_refs {
184         struct audit_tree_refs *next;
185         struct audit_chunk *c[31];
186 };
187
188 /* The per-task audit context. */
189 struct audit_context {
190         int                 dummy;      /* must be the first element */
191         int                 in_syscall; /* 1 if task is in a syscall */
192         enum audit_state    state;
193         unsigned int        serial;     /* serial number for record */
194         struct timespec     ctime;      /* time of syscall entry */
195         uid_t               loginuid;   /* login uid (identity) */
196         int                 major;      /* syscall number */
197         unsigned long       argv[4];    /* syscall arguments */
198         int                 return_valid; /* return code is valid */
199         long                return_code;/* syscall return code */
200         int                 auditable;  /* 1 if record should be written */
201         int                 name_count;
202         struct audit_names  names[AUDIT_NAMES];
203         char *              filterkey;  /* key for rule that triggered record */
204         struct dentry *     pwd;
205         struct vfsmount *   pwdmnt;
206         struct audit_context *previous; /* For nested syscalls */
207         struct audit_aux_data *aux;
208         struct audit_aux_data *aux_pids;
209
210                                 /* Save things to print about task_struct */
211         pid_t               pid, ppid;
212         uid_t               uid, euid, suid, fsuid;
213         gid_t               gid, egid, sgid, fsgid;
214         unsigned long       personality;
215         int                 arch;
216
217         pid_t               target_pid;
218         u32                 target_sid;
219
220         struct audit_tree_refs *trees, *first_trees;
221         int tree_count;
222
223 #if AUDIT_DEBUG
224         int                 put_count;
225         int                 ino_count;
226 #endif
227 };
228
229 #define ACC_MODE(x) ("\004\002\006\006"[(x)&O_ACCMODE])
230 static inline int open_arg(int flags, int mask)
231 {
232         int n = ACC_MODE(flags);
233         if (flags & (O_TRUNC | O_CREAT))
234                 n |= AUDIT_PERM_WRITE;
235         return n & mask;
236 }
237
238 static int audit_match_perm(struct audit_context *ctx, int mask)
239 {
240         unsigned n = ctx->major;
241         switch (audit_classify_syscall(ctx->arch, n)) {
242         case 0: /* native */
243                 if ((mask & AUDIT_PERM_WRITE) &&
244                      audit_match_class(AUDIT_CLASS_WRITE, n))
245                         return 1;
246                 if ((mask & AUDIT_PERM_READ) &&
247                      audit_match_class(AUDIT_CLASS_READ, n))
248                         return 1;
249                 if ((mask & AUDIT_PERM_ATTR) &&
250                      audit_match_class(AUDIT_CLASS_CHATTR, n))
251                         return 1;
252                 return 0;
253         case 1: /* 32bit on biarch */
254                 if ((mask & AUDIT_PERM_WRITE) &&
255                      audit_match_class(AUDIT_CLASS_WRITE_32, n))
256                         return 1;
257                 if ((mask & AUDIT_PERM_READ) &&
258                      audit_match_class(AUDIT_CLASS_READ_32, n))
259                         return 1;
260                 if ((mask & AUDIT_PERM_ATTR) &&
261                      audit_match_class(AUDIT_CLASS_CHATTR_32, n))
262                         return 1;
263                 return 0;
264         case 2: /* open */
265                 return mask & ACC_MODE(ctx->argv[1]);
266         case 3: /* openat */
267                 return mask & ACC_MODE(ctx->argv[2]);
268         case 4: /* socketcall */
269                 return ((mask & AUDIT_PERM_WRITE) && ctx->argv[0] == SYS_BIND);
270         case 5: /* execve */
271                 return mask & AUDIT_PERM_EXEC;
272         default:
273                 return 0;
274         }
275 }
276
277 /*
278  * We keep a linked list of fixed-sized (31 pointer) arrays of audit_chunk *;
279  * ->first_trees points to its beginning, ->trees - to the current end of data.
280  * ->tree_count is the number of free entries in array pointed to by ->trees.
281  * Original condition is (NULL, NULL, 0); as soon as it grows we never revert to NULL,
282  * "empty" becomes (p, p, 31) afterwards.  We don't shrink the list (and seriously,
283  * it's going to remain 1-element for almost any setup) until we free context itself.
284  * References in it _are_ dropped - at the same time we free/drop aux stuff.
285  */
286
287 #ifdef CONFIG_AUDIT_TREE
288 static int put_tree_ref(struct audit_context *ctx, struct audit_chunk *chunk)
289 {
290         struct audit_tree_refs *p = ctx->trees;
291         int left = ctx->tree_count;
292         if (likely(left)) {
293                 p->c[--left] = chunk;
294                 ctx->tree_count = left;
295                 return 1;
296         }
297         if (!p)
298                 return 0;
299         p = p->next;
300         if (p) {
301                 p->c[30] = chunk;
302                 ctx->trees = p;
303                 ctx->tree_count = 30;
304                 return 1;
305         }
306         return 0;
307 }
308
309 static int grow_tree_refs(struct audit_context *ctx)
310 {
311         struct audit_tree_refs *p = ctx->trees;
312         ctx->trees = kzalloc(sizeof(struct audit_tree_refs), GFP_KERNEL);
313         if (!ctx->trees) {
314                 ctx->trees = p;
315                 return 0;
316         }
317         if (p)
318                 p->next = ctx->trees;
319         else
320                 ctx->first_trees = ctx->trees;
321         ctx->tree_count = 31;
322         return 1;
323 }
324 #endif
325
326 static void unroll_tree_refs(struct audit_context *ctx,
327                       struct audit_tree_refs *p, int count)
328 {
329 #ifdef CONFIG_AUDIT_TREE
330         struct audit_tree_refs *q;
331         int n;
332         if (!p) {
333                 /* we started with empty chain */
334                 p = ctx->first_trees;
335                 count = 31;
336                 /* if the very first allocation has failed, nothing to do */
337                 if (!p)
338                         return;
339         }
340         n = count;
341         for (q = p; q != ctx->trees; q = q->next, n = 31) {
342                 while (n--) {
343                         audit_put_chunk(q->c[n]);
344                         q->c[n] = NULL;
345                 }
346         }
347         while (n-- > ctx->tree_count) {
348                 audit_put_chunk(q->c[n]);
349                 q->c[n] = NULL;
350         }
351         ctx->trees = p;
352         ctx->tree_count = count;
353 #endif
354 }
355
356 static void free_tree_refs(struct audit_context *ctx)
357 {
358         struct audit_tree_refs *p, *q;
359         for (p = ctx->first_trees; p; p = q) {
360                 q = p->next;
361                 kfree(p);
362         }
363 }
364
365 static int match_tree_refs(struct audit_context *ctx, struct audit_tree *tree)
366 {
367 #ifdef CONFIG_AUDIT_TREE
368         struct audit_tree_refs *p;
369         int n;
370         if (!tree)
371                 return 0;
372         /* full ones */
373         for (p = ctx->first_trees; p != ctx->trees; p = p->next) {
374                 for (n = 0; n < 31; n++)
375                         if (audit_tree_match(p->c[n], tree))
376                                 return 1;
377         }
378         /* partial */
379         if (p) {
380                 for (n = ctx->tree_count; n < 31; n++)
381                         if (audit_tree_match(p->c[n], tree))
382                                 return 1;
383         }
384 #endif
385         return 0;
386 }
387
388 /* Determine if any context name data matches a rule's watch data */
389 /* Compare a task_struct with an audit_rule.  Return 1 on match, 0
390  * otherwise. */
391 static int audit_filter_rules(struct task_struct *tsk,
392                               struct audit_krule *rule,
393                               struct audit_context *ctx,
394                               struct audit_names *name,
395                               enum audit_state *state)
396 {
397         int i, j, need_sid = 1;
398         u32 sid;
399
400         for (i = 0; i < rule->field_count; i++) {
401                 struct audit_field *f = &rule->fields[i];
402                 int result = 0;
403
404                 switch (f->type) {
405                 case AUDIT_PID:
406                         result = audit_comparator(tsk->pid, f->op, f->val);
407                         break;
408                 case AUDIT_PPID:
409                         if (ctx) {
410                                 if (!ctx->ppid)
411                                         ctx->ppid = sys_getppid();
412                                 result = audit_comparator(ctx->ppid, f->op, f->val);
413                         }
414                         break;
415                 case AUDIT_UID:
416                         result = audit_comparator(tsk->uid, f->op, f->val);
417                         break;
418                 case AUDIT_EUID:
419                         result = audit_comparator(tsk->euid, f->op, f->val);
420                         break;
421                 case AUDIT_SUID:
422                         result = audit_comparator(tsk->suid, f->op, f->val);
423                         break;
424                 case AUDIT_FSUID:
425                         result = audit_comparator(tsk->fsuid, f->op, f->val);
426                         break;
427                 case AUDIT_GID:
428                         result = audit_comparator(tsk->gid, f->op, f->val);
429                         break;
430                 case AUDIT_EGID:
431                         result = audit_comparator(tsk->egid, f->op, f->val);
432                         break;
433                 case AUDIT_SGID:
434                         result = audit_comparator(tsk->sgid, f->op, f->val);
435                         break;
436                 case AUDIT_FSGID:
437                         result = audit_comparator(tsk->fsgid, f->op, f->val);
438                         break;
439                 case AUDIT_PERS:
440                         result = audit_comparator(tsk->personality, f->op, f->val);
441                         break;
442                 case AUDIT_ARCH:
443                         if (ctx)
444                                 result = audit_comparator(ctx->arch, f->op, f->val);
445                         break;
446
447                 case AUDIT_EXIT:
448                         if (ctx && ctx->return_valid)
449                                 result = audit_comparator(ctx->return_code, f->op, f->val);
450                         break;
451                 case AUDIT_SUCCESS:
452                         if (ctx && ctx->return_valid) {
453                                 if (f->val)
454                                         result = audit_comparator(ctx->return_valid, f->op, AUDITSC_SUCCESS);
455                                 else
456                                         result = audit_comparator(ctx->return_valid, f->op, AUDITSC_FAILURE);
457                         }
458                         break;
459                 case AUDIT_DEVMAJOR:
460                         if (name)
461                                 result = audit_comparator(MAJOR(name->dev),
462                                                           f->op, f->val);
463                         else if (ctx) {
464                                 for (j = 0; j < ctx->name_count; j++) {
465                                         if (audit_comparator(MAJOR(ctx->names[j].dev),  f->op, f->val)) {
466                                                 ++result;
467                                                 break;
468                                         }
469                                 }
470                         }
471                         break;
472                 case AUDIT_DEVMINOR:
473                         if (name)
474                                 result = audit_comparator(MINOR(name->dev),
475                                                           f->op, f->val);
476                         else if (ctx) {
477                                 for (j = 0; j < ctx->name_count; j++) {
478                                         if (audit_comparator(MINOR(ctx->names[j].dev), f->op, f->val)) {
479                                                 ++result;
480                                                 break;
481                                         }
482                                 }
483                         }
484                         break;
485                 case AUDIT_INODE:
486                         if (name)
487                                 result = (name->ino == f->val);
488                         else if (ctx) {
489                                 for (j = 0; j < ctx->name_count; j++) {
490                                         if (audit_comparator(ctx->names[j].ino, f->op, f->val)) {
491                                                 ++result;
492                                                 break;
493                                         }
494                                 }
495                         }
496                         break;
497                 case AUDIT_WATCH:
498                         if (name && rule->watch->ino != (unsigned long)-1)
499                                 result = (name->dev == rule->watch->dev &&
500                                           name->ino == rule->watch->ino);
501                         break;
502                 case AUDIT_DIR:
503                         if (ctx)
504                                 result = match_tree_refs(ctx, rule->tree);
505                         break;
506                 case AUDIT_LOGINUID:
507                         result = 0;
508                         if (ctx)
509                                 result = audit_comparator(ctx->loginuid, f->op, f->val);
510                         break;
511                 case AUDIT_SUBJ_USER:
512                 case AUDIT_SUBJ_ROLE:
513                 case AUDIT_SUBJ_TYPE:
514                 case AUDIT_SUBJ_SEN:
515                 case AUDIT_SUBJ_CLR:
516                         /* NOTE: this may return negative values indicating
517                            a temporary error.  We simply treat this as a
518                            match for now to avoid losing information that
519                            may be wanted.   An error message will also be
520                            logged upon error */
521                         if (f->se_rule) {
522                                 if (need_sid) {
523                                         selinux_get_task_sid(tsk, &sid);
524                                         need_sid = 0;
525                                 }
526                                 result = selinux_audit_rule_match(sid, f->type,
527                                                                   f->op,
528                                                                   f->se_rule,
529                                                                   ctx);
530                         }
531                         break;
532                 case AUDIT_OBJ_USER:
533                 case AUDIT_OBJ_ROLE:
534                 case AUDIT_OBJ_TYPE:
535                 case AUDIT_OBJ_LEV_LOW:
536                 case AUDIT_OBJ_LEV_HIGH:
537                         /* The above note for AUDIT_SUBJ_USER...AUDIT_SUBJ_CLR
538                            also applies here */
539                         if (f->se_rule) {
540                                 /* Find files that match */
541                                 if (name) {
542                                         result = selinux_audit_rule_match(
543                                                    name->osid, f->type, f->op,
544                                                    f->se_rule, ctx);
545                                 } else if (ctx) {
546                                         for (j = 0; j < ctx->name_count; j++) {
547                                                 if (selinux_audit_rule_match(
548                                                       ctx->names[j].osid,
549                                                       f->type, f->op,
550                                                       f->se_rule, ctx)) {
551                                                         ++result;
552                                                         break;
553                                                 }
554                                         }
555                                 }
556                                 /* Find ipc objects that match */
557                                 if (ctx) {
558                                         struct audit_aux_data *aux;
559                                         for (aux = ctx->aux; aux;
560                                              aux = aux->next) {
561                                                 if (aux->type == AUDIT_IPC) {
562                                                         struct audit_aux_data_ipcctl *axi = (void *)aux;
563                                                         if (selinux_audit_rule_match(axi->osid, f->type, f->op, f->se_rule, ctx)) {
564                                                                 ++result;
565                                                                 break;
566                                                         }
567                                                 }
568                                         }
569                                 }
570                         }
571                         break;
572                 case AUDIT_ARG0:
573                 case AUDIT_ARG1:
574                 case AUDIT_ARG2:
575                 case AUDIT_ARG3:
576                         if (ctx)
577                                 result = audit_comparator(ctx->argv[f->type-AUDIT_ARG0], f->op, f->val);
578                         break;
579                 case AUDIT_FILTERKEY:
580                         /* ignore this field for filtering */
581                         result = 1;
582                         break;
583                 case AUDIT_PERM:
584                         result = audit_match_perm(ctx, f->val);
585                         break;
586                 }
587
588                 if (!result)
589                         return 0;
590         }
591         if (rule->filterkey)
592                 ctx->filterkey = kstrdup(rule->filterkey, GFP_ATOMIC);
593         switch (rule->action) {
594         case AUDIT_NEVER:    *state = AUDIT_DISABLED;       break;
595         case AUDIT_ALWAYS:   *state = AUDIT_RECORD_CONTEXT; break;
596         }
597         return 1;
598 }
599
600 /* At process creation time, we can determine if system-call auditing is
601  * completely disabled for this task.  Since we only have the task
602  * structure at this point, we can only check uid and gid.
603  */
604 static enum audit_state audit_filter_task(struct task_struct *tsk)
605 {
606         struct audit_entry *e;
607         enum audit_state   state;
608
609         rcu_read_lock();
610         list_for_each_entry_rcu(e, &audit_filter_list[AUDIT_FILTER_TASK], list) {
611                 if (audit_filter_rules(tsk, &e->rule, NULL, NULL, &state)) {
612                         rcu_read_unlock();
613                         return state;
614                 }
615         }
616         rcu_read_unlock();
617         return AUDIT_BUILD_CONTEXT;
618 }
619
620 /* At syscall entry and exit time, this filter is called if the
621  * audit_state is not low enough that auditing cannot take place, but is
622  * also not high enough that we already know we have to write an audit
623  * record (i.e., the state is AUDIT_SETUP_CONTEXT or AUDIT_BUILD_CONTEXT).
624  */
625 static enum audit_state audit_filter_syscall(struct task_struct *tsk,
626                                              struct audit_context *ctx,
627                                              struct list_head *list)
628 {
629         struct audit_entry *e;
630         enum audit_state state;
631
632         if (audit_pid && tsk->tgid == audit_pid)
633                 return AUDIT_DISABLED;
634
635         rcu_read_lock();
636         if (!list_empty(list)) {
637                 int word = AUDIT_WORD(ctx->major);
638                 int bit  = AUDIT_BIT(ctx->major);
639
640                 list_for_each_entry_rcu(e, list, list) {
641                         if ((e->rule.mask[word] & bit) == bit &&
642                             audit_filter_rules(tsk, &e->rule, ctx, NULL,
643                                                &state)) {
644                                 rcu_read_unlock();
645                                 return state;
646                         }
647                 }
648         }
649         rcu_read_unlock();
650         return AUDIT_BUILD_CONTEXT;
651 }
652
653 /* At syscall exit time, this filter is called if any audit_names[] have been
654  * collected during syscall processing.  We only check rules in sublists at hash
655  * buckets applicable to the inode numbers in audit_names[].
656  * Regarding audit_state, same rules apply as for audit_filter_syscall().
657  */
658 enum audit_state audit_filter_inodes(struct task_struct *tsk,
659                                      struct audit_context *ctx)
660 {
661         int i;
662         struct audit_entry *e;
663         enum audit_state state;
664
665         if (audit_pid && tsk->tgid == audit_pid)
666                 return AUDIT_DISABLED;
667
668         rcu_read_lock();
669         for (i = 0; i < ctx->name_count; i++) {
670                 int word = AUDIT_WORD(ctx->major);
671                 int bit  = AUDIT_BIT(ctx->major);
672                 struct audit_names *n = &ctx->names[i];
673                 int h = audit_hash_ino((u32)n->ino);
674                 struct list_head *list = &audit_inode_hash[h];
675
676                 if (list_empty(list))
677                         continue;
678
679                 list_for_each_entry_rcu(e, list, list) {
680                         if ((e->rule.mask[word] & bit) == bit &&
681                             audit_filter_rules(tsk, &e->rule, ctx, n, &state)) {
682                                 rcu_read_unlock();
683                                 return state;
684                         }
685                 }
686         }
687         rcu_read_unlock();
688         return AUDIT_BUILD_CONTEXT;
689 }
690
691 void audit_set_auditable(struct audit_context *ctx)
692 {
693         ctx->auditable = 1;
694 }
695
696 static inline struct audit_context *audit_get_context(struct task_struct *tsk,
697                                                       int return_valid,
698                                                       int return_code)
699 {
700         struct audit_context *context = tsk->audit_context;
701
702         if (likely(!context))
703                 return NULL;
704         context->return_valid = return_valid;
705         context->return_code  = return_code;
706
707         if (context->in_syscall && !context->dummy && !context->auditable) {
708                 enum audit_state state;
709
710                 state = audit_filter_syscall(tsk, context, &audit_filter_list[AUDIT_FILTER_EXIT]);
711                 if (state == AUDIT_RECORD_CONTEXT) {
712                         context->auditable = 1;
713                         goto get_context;
714                 }
715
716                 state = audit_filter_inodes(tsk, context);
717                 if (state == AUDIT_RECORD_CONTEXT)
718                         context->auditable = 1;
719
720         }
721
722 get_context:
723
724         tsk->audit_context = NULL;
725         return context;
726 }
727
728 static inline void audit_free_names(struct audit_context *context)
729 {
730         int i;
731
732 #if AUDIT_DEBUG == 2
733         if (context->auditable
734             ||context->put_count + context->ino_count != context->name_count) {
735                 printk(KERN_ERR "%s:%d(:%d): major=%d in_syscall=%d"
736                        " name_count=%d put_count=%d"
737                        " ino_count=%d [NOT freeing]\n",
738                        __FILE__, __LINE__,
739                        context->serial, context->major, context->in_syscall,
740                        context->name_count, context->put_count,
741                        context->ino_count);
742                 for (i = 0; i < context->name_count; i++) {
743                         printk(KERN_ERR "names[%d] = %p = %s\n", i,
744                                context->names[i].name,
745                                context->names[i].name ?: "(null)");
746                 }
747                 dump_stack();
748                 return;
749         }
750 #endif
751 #if AUDIT_DEBUG
752         context->put_count  = 0;
753         context->ino_count  = 0;
754 #endif
755
756         for (i = 0; i < context->name_count; i++) {
757                 if (context->names[i].name && context->names[i].name_put)
758                         __putname(context->names[i].name);
759         }
760         context->name_count = 0;
761         if (context->pwd)
762                 dput(context->pwd);
763         if (context->pwdmnt)
764                 mntput(context->pwdmnt);
765         context->pwd = NULL;
766         context->pwdmnt = NULL;
767 }
768
769 static inline void audit_free_aux(struct audit_context *context)
770 {
771         struct audit_aux_data *aux;
772
773         while ((aux = context->aux)) {
774                 context->aux = aux->next;
775                 kfree(aux);
776         }
777         while ((aux = context->aux_pids)) {
778                 context->aux_pids = aux->next;
779                 kfree(aux);
780         }
781 }
782
783 static inline void audit_zero_context(struct audit_context *context,
784                                       enum audit_state state)
785 {
786         uid_t loginuid = context->loginuid;
787
788         memset(context, 0, sizeof(*context));
789         context->state      = state;
790         context->loginuid   = loginuid;
791 }
792
793 static inline struct audit_context *audit_alloc_context(enum audit_state state)
794 {
795         struct audit_context *context;
796
797         if (!(context = kmalloc(sizeof(*context), GFP_KERNEL)))
798                 return NULL;
799         audit_zero_context(context, state);
800         return context;
801 }
802
803 /**
804  * audit_alloc - allocate an audit context block for a task
805  * @tsk: task
806  *
807  * Filter on the task information and allocate a per-task audit context
808  * if necessary.  Doing so turns on system call auditing for the
809  * specified task.  This is called from copy_process, so no lock is
810  * needed.
811  */
812 int audit_alloc(struct task_struct *tsk)
813 {
814         struct audit_context *context;
815         enum audit_state     state;
816
817         if (likely(!audit_enabled))
818                 return 0; /* Return if not auditing. */
819
820         state = audit_filter_task(tsk);
821         if (likely(state == AUDIT_DISABLED))
822                 return 0;
823
824         if (!(context = audit_alloc_context(state))) {
825                 audit_log_lost("out of memory in audit_alloc");
826                 return -ENOMEM;
827         }
828
829                                 /* Preserve login uid */
830         context->loginuid = -1;
831         if (current->audit_context)
832                 context->loginuid = current->audit_context->loginuid;
833
834         tsk->audit_context  = context;
835         set_tsk_thread_flag(tsk, TIF_SYSCALL_AUDIT);
836         return 0;
837 }
838
839 static inline void audit_free_context(struct audit_context *context)
840 {
841         struct audit_context *previous;
842         int                  count = 0;
843
844         do {
845                 previous = context->previous;
846                 if (previous || (count &&  count < 10)) {
847                         ++count;
848                         printk(KERN_ERR "audit(:%d): major=%d name_count=%d:"
849                                " freeing multiple contexts (%d)\n",
850                                context->serial, context->major,
851                                context->name_count, count);
852                 }
853                 audit_free_names(context);
854                 unroll_tree_refs(context, NULL, 0);
855                 free_tree_refs(context);
856                 audit_free_aux(context);
857                 kfree(context->filterkey);
858                 kfree(context);
859                 context  = previous;
860         } while (context);
861         if (count >= 10)
862                 printk(KERN_ERR "audit: freed %d contexts\n", count);
863 }
864
865 void audit_log_task_context(struct audit_buffer *ab)
866 {
867         char *ctx = NULL;
868         unsigned len;
869         int error;
870         u32 sid;
871
872         selinux_get_task_sid(current, &sid);
873         if (!sid)
874                 return;
875
876         error = selinux_sid_to_string(sid, &ctx, &len);
877         if (error) {
878                 if (error != -EINVAL)
879                         goto error_path;
880                 return;
881         }
882
883         audit_log_format(ab, " subj=%s", ctx);
884         kfree(ctx);
885         return;
886
887 error_path:
888         audit_panic("error in audit_log_task_context");
889         return;
890 }
891
892 EXPORT_SYMBOL(audit_log_task_context);
893
894 static void audit_log_task_info(struct audit_buffer *ab, struct task_struct *tsk)
895 {
896         char name[sizeof(tsk->comm)];
897         struct mm_struct *mm = tsk->mm;
898         struct vm_area_struct *vma;
899
900         /* tsk == current */
901
902         get_task_comm(name, tsk);
903         audit_log_format(ab, " comm=");
904         audit_log_untrustedstring(ab, name);
905
906         if (mm) {
907                 down_read(&mm->mmap_sem);
908                 vma = mm->mmap;
909                 while (vma) {
910                         if ((vma->vm_flags & VM_EXECUTABLE) &&
911                             vma->vm_file) {
912                                 audit_log_d_path(ab, "exe=",
913                                                  vma->vm_file->f_path.dentry,
914                                                  vma->vm_file->f_path.mnt);
915                                 break;
916                         }
917                         vma = vma->vm_next;
918                 }
919                 up_read(&mm->mmap_sem);
920         }
921         audit_log_task_context(ab);
922 }
923
924 static int audit_log_pid_context(struct audit_context *context, pid_t pid,
925                                  u32 sid)
926 {
927         struct audit_buffer *ab;
928         char *s = NULL;
929         u32 len;
930         int rc = 0;
931
932         ab = audit_log_start(context, GFP_KERNEL, AUDIT_OBJ_PID);
933         if (!ab)
934                 return 1;
935
936         if (selinux_sid_to_string(sid, &s, &len)) {
937                 audit_log_format(ab, "opid=%d obj=(none)", pid);
938                 rc = 1;
939         } else
940                 audit_log_format(ab, "opid=%d  obj=%s", pid, s);
941         audit_log_end(ab);
942         kfree(s);
943
944         return rc;
945 }
946
947 static void audit_log_execve_info(struct audit_buffer *ab,
948                 struct audit_aux_data_execve *axi)
949 {
950         int i;
951         long len, ret;
952         const char __user *p;
953         char *buf;
954
955         if (axi->mm != current->mm)
956                 return; /* execve failed, no additional info */
957
958         p = (const char __user *)axi->mm->arg_start;
959
960         for (i = 0; i < axi->argc; i++, p += len) {
961                 len = strnlen_user(p, MAX_ARG_STRLEN);
962                 /*
963                  * We just created this mm, if we can't find the strings
964                  * we just copied into it something is _very_ wrong. Similar
965                  * for strings that are too long, we should not have created
966                  * any.
967                  */
968                 if (!len || len > MAX_ARG_STRLEN) {
969                         WARN_ON(1);
970                         send_sig(SIGKILL, current, 0);
971                 }
972
973                 buf = kmalloc(len, GFP_KERNEL);
974                 if (!buf) {
975                         audit_panic("out of memory for argv string\n");
976                         break;
977                 }
978
979                 ret = copy_from_user(buf, p, len);
980                 /*
981                  * There is no reason for this copy to be short. We just
982                  * copied them here, and the mm hasn't been exposed to user-
983                  * space yet.
984                  */
985                 if (ret) {
986                         WARN_ON(1);
987                         send_sig(SIGKILL, current, 0);
988                 }
989
990                 audit_log_format(ab, "a%d=", i);
991                 audit_log_untrustedstring(ab, buf);
992                 audit_log_format(ab, "\n");
993
994                 kfree(buf);
995         }
996 }
997
998 static void audit_log_exit(struct audit_context *context, struct task_struct *tsk)
999 {
1000         int i, call_panic = 0;
1001         struct audit_buffer *ab;
1002         struct audit_aux_data *aux;
1003         const char *tty;
1004
1005         /* tsk == current */
1006         context->pid = tsk->pid;
1007         if (!context->ppid)
1008                 context->ppid = sys_getppid();
1009         context->uid = tsk->uid;
1010         context->gid = tsk->gid;
1011         context->euid = tsk->euid;
1012         context->suid = tsk->suid;
1013         context->fsuid = tsk->fsuid;
1014         context->egid = tsk->egid;
1015         context->sgid = tsk->sgid;
1016         context->fsgid = tsk->fsgid;
1017         context->personality = tsk->personality;
1018
1019         ab = audit_log_start(context, GFP_KERNEL, AUDIT_SYSCALL);
1020         if (!ab)
1021                 return;         /* audit_panic has been called */
1022         audit_log_format(ab, "arch=%x syscall=%d",
1023                          context->arch, context->major);
1024         if (context->personality != PER_LINUX)
1025                 audit_log_format(ab, " per=%lx", context->personality);
1026         if (context->return_valid)
1027                 audit_log_format(ab, " success=%s exit=%ld",
1028                                  (context->return_valid==AUDITSC_SUCCESS)?"yes":"no",
1029                                  context->return_code);
1030
1031         mutex_lock(&tty_mutex);
1032         read_lock(&tasklist_lock);
1033         if (tsk->signal && tsk->signal->tty && tsk->signal->tty->name)
1034                 tty = tsk->signal->tty->name;
1035         else
1036                 tty = "(none)";
1037         read_unlock(&tasklist_lock);
1038         audit_log_format(ab,
1039                   " a0=%lx a1=%lx a2=%lx a3=%lx items=%d"
1040                   " ppid=%d pid=%d auid=%u uid=%u gid=%u"
1041                   " euid=%u suid=%u fsuid=%u"
1042                   " egid=%u sgid=%u fsgid=%u tty=%s",
1043                   context->argv[0],
1044                   context->argv[1],
1045                   context->argv[2],
1046                   context->argv[3],
1047                   context->name_count,
1048                   context->ppid,
1049                   context->pid,
1050                   context->loginuid,
1051                   context->uid,
1052                   context->gid,
1053                   context->euid, context->suid, context->fsuid,
1054                   context->egid, context->sgid, context->fsgid, tty);
1055
1056         mutex_unlock(&tty_mutex);
1057
1058         audit_log_task_info(ab, tsk);
1059         if (context->filterkey) {
1060                 audit_log_format(ab, " key=");
1061                 audit_log_untrustedstring(ab, context->filterkey);
1062         } else
1063                 audit_log_format(ab, " key=(null)");
1064         audit_log_end(ab);
1065
1066         for (aux = context->aux; aux; aux = aux->next) {
1067
1068                 ab = audit_log_start(context, GFP_KERNEL, aux->type);
1069                 if (!ab)
1070                         continue; /* audit_panic has been called */
1071
1072                 switch (aux->type) {
1073                 case AUDIT_MQ_OPEN: {
1074                         struct audit_aux_data_mq_open *axi = (void *)aux;
1075                         audit_log_format(ab,
1076                                 "oflag=0x%x mode=%#o mq_flags=0x%lx mq_maxmsg=%ld "
1077                                 "mq_msgsize=%ld mq_curmsgs=%ld",
1078                                 axi->oflag, axi->mode, axi->attr.mq_flags,
1079                                 axi->attr.mq_maxmsg, axi->attr.mq_msgsize,
1080                                 axi->attr.mq_curmsgs);
1081                         break; }
1082
1083                 case AUDIT_MQ_SENDRECV: {
1084                         struct audit_aux_data_mq_sendrecv *axi = (void *)aux;
1085                         audit_log_format(ab,
1086                                 "mqdes=%d msg_len=%zd msg_prio=%u "
1087                                 "abs_timeout_sec=%ld abs_timeout_nsec=%ld",
1088                                 axi->mqdes, axi->msg_len, axi->msg_prio,
1089                                 axi->abs_timeout.tv_sec, axi->abs_timeout.tv_nsec);
1090                         break; }
1091
1092                 case AUDIT_MQ_NOTIFY: {
1093                         struct audit_aux_data_mq_notify *axi = (void *)aux;
1094                         audit_log_format(ab,
1095                                 "mqdes=%d sigev_signo=%d",
1096                                 axi->mqdes,
1097                                 axi->notification.sigev_signo);
1098                         break; }
1099
1100                 case AUDIT_MQ_GETSETATTR: {
1101                         struct audit_aux_data_mq_getsetattr *axi = (void *)aux;
1102                         audit_log_format(ab,
1103                                 "mqdes=%d mq_flags=0x%lx mq_maxmsg=%ld mq_msgsize=%ld "
1104                                 "mq_curmsgs=%ld ",
1105                                 axi->mqdes,
1106                                 axi->mqstat.mq_flags, axi->mqstat.mq_maxmsg,
1107                                 axi->mqstat.mq_msgsize, axi->mqstat.mq_curmsgs);
1108                         break; }
1109
1110                 case AUDIT_IPC: {
1111                         struct audit_aux_data_ipcctl *axi = (void *)aux;
1112                         audit_log_format(ab, 
1113                                  "ouid=%u ogid=%u mode=%#o",
1114                                  axi->uid, axi->gid, axi->mode);
1115                         if (axi->osid != 0) {
1116                                 char *ctx = NULL;
1117                                 u32 len;
1118                                 if (selinux_sid_to_string(
1119                                                 axi->osid, &ctx, &len)) {
1120                                         audit_log_format(ab, " osid=%u",
1121                                                         axi->osid);
1122                                         call_panic = 1;
1123                                 } else
1124                                         audit_log_format(ab, " obj=%s", ctx);
1125                                 kfree(ctx);
1126                         }
1127                         break; }
1128
1129                 case AUDIT_IPC_SET_PERM: {
1130                         struct audit_aux_data_ipcctl *axi = (void *)aux;
1131                         audit_log_format(ab,
1132                                 "qbytes=%lx ouid=%u ogid=%u mode=%#o",
1133                                 axi->qbytes, axi->uid, axi->gid, axi->mode);
1134                         break; }
1135
1136                 case AUDIT_EXECVE: {
1137                         struct audit_aux_data_execve *axi = (void *)aux;
1138                         audit_log_execve_info(ab, axi);
1139                         break; }
1140
1141                 case AUDIT_SOCKETCALL: {
1142                         int i;
1143                         struct audit_aux_data_socketcall *axs = (void *)aux;
1144                         audit_log_format(ab, "nargs=%d", axs->nargs);
1145                         for (i=0; i<axs->nargs; i++)
1146                                 audit_log_format(ab, " a%d=%lx", i, axs->args[i]);
1147                         break; }
1148
1149                 case AUDIT_SOCKADDR: {
1150                         struct audit_aux_data_sockaddr *axs = (void *)aux;
1151
1152                         audit_log_format(ab, "saddr=");
1153                         audit_log_hex(ab, axs->a, axs->len);
1154                         break; }
1155
1156                 case AUDIT_FD_PAIR: {
1157                         struct audit_aux_data_fd_pair *axs = (void *)aux;
1158                         audit_log_format(ab, "fd0=%d fd1=%d", axs->fd[0], axs->fd[1]);
1159                         break; }
1160
1161                 }
1162                 audit_log_end(ab);
1163         }
1164
1165         for (aux = context->aux_pids; aux; aux = aux->next) {
1166                 struct audit_aux_data_pids *axs = (void *)aux;
1167                 int i;
1168
1169                 for (i = 0; i < axs->pid_count; i++)
1170                         if (audit_log_pid_context(context, axs->target_pid[i],
1171                                                   axs->target_sid[i]))
1172                                 call_panic = 1;
1173         }
1174
1175         if (context->target_pid &&
1176             audit_log_pid_context(context, context->target_pid,
1177                                   context->target_sid))
1178                         call_panic = 1;
1179
1180         if (context->pwd && context->pwdmnt) {
1181                 ab = audit_log_start(context, GFP_KERNEL, AUDIT_CWD);
1182                 if (ab) {
1183                         audit_log_d_path(ab, "cwd=", context->pwd, context->pwdmnt);
1184                         audit_log_end(ab);
1185                 }
1186         }
1187         for (i = 0; i < context->name_count; i++) {
1188                 struct audit_names *n = &context->names[i];
1189
1190                 ab = audit_log_start(context, GFP_KERNEL, AUDIT_PATH);
1191                 if (!ab)
1192                         continue; /* audit_panic has been called */
1193
1194                 audit_log_format(ab, "item=%d", i);
1195
1196                 if (n->name) {
1197                         switch(n->name_len) {
1198                         case AUDIT_NAME_FULL:
1199                                 /* log the full path */
1200                                 audit_log_format(ab, " name=");
1201                                 audit_log_untrustedstring(ab, n->name);
1202                                 break;
1203                         case 0:
1204                                 /* name was specified as a relative path and the
1205                                  * directory component is the cwd */
1206                                 audit_log_d_path(ab, " name=", context->pwd,
1207                                                  context->pwdmnt);
1208                                 break;
1209                         default:
1210                                 /* log the name's directory component */
1211                                 audit_log_format(ab, " name=");
1212                                 audit_log_n_untrustedstring(ab, n->name_len,
1213                                                             n->name);
1214                         }
1215                 } else
1216                         audit_log_format(ab, " name=(null)");
1217
1218                 if (n->ino != (unsigned long)-1) {
1219                         audit_log_format(ab, " inode=%lu"
1220                                          " dev=%02x:%02x mode=%#o"
1221                                          " ouid=%u ogid=%u rdev=%02x:%02x",
1222                                          n->ino,
1223                                          MAJOR(n->dev),
1224                                          MINOR(n->dev),
1225                                          n->mode,
1226                                          n->uid,
1227                                          n->gid,
1228                                          MAJOR(n->rdev),
1229                                          MINOR(n->rdev));
1230                 }
1231                 if (n->osid != 0) {
1232                         char *ctx = NULL;
1233                         u32 len;
1234                         if (selinux_sid_to_string(
1235                                 n->osid, &ctx, &len)) {
1236                                 audit_log_format(ab, " osid=%u", n->osid);
1237                                 call_panic = 2;
1238                         } else
1239                                 audit_log_format(ab, " obj=%s", ctx);
1240                         kfree(ctx);
1241                 }
1242
1243                 audit_log_end(ab);
1244         }
1245         if (call_panic)
1246                 audit_panic("error converting sid to string");
1247 }
1248
1249 /**
1250  * audit_free - free a per-task audit context
1251  * @tsk: task whose audit context block to free
1252  *
1253  * Called from copy_process and do_exit
1254  */
1255 void audit_free(struct task_struct *tsk)
1256 {
1257         struct audit_context *context;
1258
1259         context = audit_get_context(tsk, 0, 0);
1260         if (likely(!context))
1261                 return;
1262
1263         /* Check for system calls that do not go through the exit
1264          * function (e.g., exit_group), then free context block.
1265          * We use GFP_ATOMIC here because we might be doing this
1266          * in the context of the idle thread */
1267         /* that can happen only if we are called from do_exit() */
1268         if (context->in_syscall && context->auditable)
1269                 audit_log_exit(context, tsk);
1270
1271         audit_free_context(context);
1272 }
1273
1274 /**
1275  * audit_syscall_entry - fill in an audit record at syscall entry
1276  * @tsk: task being audited
1277  * @arch: architecture type
1278  * @major: major syscall type (function)
1279  * @a1: additional syscall register 1
1280  * @a2: additional syscall register 2
1281  * @a3: additional syscall register 3
1282  * @a4: additional syscall register 4
1283  *
1284  * Fill in audit context at syscall entry.  This only happens if the
1285  * audit context was created when the task was created and the state or
1286  * filters demand the audit context be built.  If the state from the
1287  * per-task filter or from the per-syscall filter is AUDIT_RECORD_CONTEXT,
1288  * then the record will be written at syscall exit time (otherwise, it
1289  * will only be written if another part of the kernel requests that it
1290  * be written).
1291  */
1292 void audit_syscall_entry(int arch, int major,
1293                          unsigned long a1, unsigned long a2,
1294                          unsigned long a3, unsigned long a4)
1295 {
1296         struct task_struct *tsk = current;
1297         struct audit_context *context = tsk->audit_context;
1298         enum audit_state     state;
1299
1300         BUG_ON(!context);
1301
1302         /*
1303          * This happens only on certain architectures that make system
1304          * calls in kernel_thread via the entry.S interface, instead of
1305          * with direct calls.  (If you are porting to a new
1306          * architecture, hitting this condition can indicate that you
1307          * got the _exit/_leave calls backward in entry.S.)
1308          *
1309          * i386     no
1310          * x86_64   no
1311          * ppc64    yes (see arch/powerpc/platforms/iseries/misc.S)
1312          *
1313          * This also happens with vm86 emulation in a non-nested manner
1314          * (entries without exits), so this case must be caught.
1315          */
1316         if (context->in_syscall) {
1317                 struct audit_context *newctx;
1318
1319 #if AUDIT_DEBUG
1320                 printk(KERN_ERR
1321                        "audit(:%d) pid=%d in syscall=%d;"
1322                        " entering syscall=%d\n",
1323                        context->serial, tsk->pid, context->major, major);
1324 #endif
1325                 newctx = audit_alloc_context(context->state);
1326                 if (newctx) {
1327                         newctx->previous   = context;
1328                         context            = newctx;
1329                         tsk->audit_context = newctx;
1330                 } else  {
1331                         /* If we can't alloc a new context, the best we
1332                          * can do is to leak memory (any pending putname
1333                          * will be lost).  The only other alternative is
1334                          * to abandon auditing. */
1335                         audit_zero_context(context, context->state);
1336                 }
1337         }
1338         BUG_ON(context->in_syscall || context->name_count);
1339
1340         if (!audit_enabled)
1341                 return;
1342
1343         context->arch       = arch;
1344         context->major      = major;
1345         context->argv[0]    = a1;
1346         context->argv[1]    = a2;
1347         context->argv[2]    = a3;
1348         context->argv[3]    = a4;
1349
1350         state = context->state;
1351         context->dummy = !audit_n_rules;
1352         if (!context->dummy && (state == AUDIT_SETUP_CONTEXT || state == AUDIT_BUILD_CONTEXT))
1353                 state = audit_filter_syscall(tsk, context, &audit_filter_list[AUDIT_FILTER_ENTRY]);
1354         if (likely(state == AUDIT_DISABLED))
1355                 return;
1356
1357         context->serial     = 0;
1358         context->ctime      = CURRENT_TIME;
1359         context->in_syscall = 1;
1360         context->auditable  = !!(state == AUDIT_RECORD_CONTEXT);
1361         context->ppid       = 0;
1362 }
1363
1364 /**
1365  * audit_syscall_exit - deallocate audit context after a system call
1366  * @tsk: task being audited
1367  * @valid: success/failure flag
1368  * @return_code: syscall return value
1369  *
1370  * Tear down after system call.  If the audit context has been marked as
1371  * auditable (either because of the AUDIT_RECORD_CONTEXT state from
1372  * filtering, or because some other part of the kernel write an audit
1373  * message), then write out the syscall information.  In call cases,
1374  * free the names stored from getname().
1375  */
1376 void audit_syscall_exit(int valid, long return_code)
1377 {
1378         struct task_struct *tsk = current;
1379         struct audit_context *context;
1380
1381         context = audit_get_context(tsk, valid, return_code);
1382
1383         if (likely(!context))
1384                 return;
1385
1386         if (context->in_syscall && context->auditable)
1387                 audit_log_exit(context, tsk);
1388
1389         context->in_syscall = 0;
1390         context->auditable  = 0;
1391
1392         if (context->previous) {
1393                 struct audit_context *new_context = context->previous;
1394                 context->previous  = NULL;
1395                 audit_free_context(context);
1396                 tsk->audit_context = new_context;
1397         } else {
1398                 audit_free_names(context);
1399                 unroll_tree_refs(context, NULL, 0);
1400                 audit_free_aux(context);
1401                 context->aux = NULL;
1402                 context->aux_pids = NULL;
1403                 context->target_pid = 0;
1404                 context->target_sid = 0;
1405                 kfree(context->filterkey);
1406                 context->filterkey = NULL;
1407                 tsk->audit_context = context;
1408         }
1409 }
1410
1411 static inline void handle_one(const struct inode *inode)
1412 {
1413 #ifdef CONFIG_AUDIT_TREE
1414         struct audit_context *context;
1415         struct audit_tree_refs *p;
1416         struct audit_chunk *chunk;
1417         int count;
1418         if (likely(list_empty(&inode->inotify_watches)))
1419                 return;
1420         context = current->audit_context;
1421         p = context->trees;
1422         count = context->tree_count;
1423         rcu_read_lock();
1424         chunk = audit_tree_lookup(inode);
1425         rcu_read_unlock();
1426         if (!chunk)
1427                 return;
1428         if (likely(put_tree_ref(context, chunk)))
1429                 return;
1430         if (unlikely(!grow_tree_refs(context))) {
1431                 printk(KERN_WARNING "out of memory, audit has lost a tree reference");
1432                 audit_set_auditable(context);
1433                 audit_put_chunk(chunk);
1434                 unroll_tree_refs(context, p, count);
1435                 return;
1436         }
1437         put_tree_ref(context, chunk);
1438 #endif
1439 }
1440
1441 static void handle_path(const struct dentry *dentry)
1442 {
1443 #ifdef CONFIG_AUDIT_TREE
1444         struct audit_context *context;
1445         struct audit_tree_refs *p;
1446         const struct dentry *d, *parent;
1447         struct audit_chunk *drop;
1448         unsigned long seq;
1449         int count;
1450
1451         context = current->audit_context;
1452         p = context->trees;
1453         count = context->tree_count;
1454 retry:
1455         drop = NULL;
1456         d = dentry;
1457         rcu_read_lock();
1458         seq = read_seqbegin(&rename_lock);
1459         for(;;) {
1460                 struct inode *inode = d->d_inode;
1461                 if (inode && unlikely(!list_empty(&inode->inotify_watches))) {
1462                         struct audit_chunk *chunk;
1463                         chunk = audit_tree_lookup(inode);
1464                         if (chunk) {
1465                                 if (unlikely(!put_tree_ref(context, chunk))) {
1466                                         drop = chunk;
1467                                         break;
1468                                 }
1469                         }
1470                 }
1471                 parent = d->d_parent;
1472                 if (parent == d)
1473                         break;
1474                 d = parent;
1475         }
1476         if (unlikely(read_seqretry(&rename_lock, seq) || drop)) {  /* in this order */
1477                 rcu_read_unlock();
1478                 if (!drop) {
1479                         /* just a race with rename */
1480                         unroll_tree_refs(context, p, count);
1481                         goto retry;
1482                 }
1483                 audit_put_chunk(drop);
1484                 if (grow_tree_refs(context)) {
1485                         /* OK, got more space */
1486                         unroll_tree_refs(context, p, count);
1487                         goto retry;
1488                 }
1489                 /* too bad */
1490                 printk(KERN_WARNING
1491                         "out of memory, audit has lost a tree reference");
1492                 unroll_tree_refs(context, p, count);
1493                 audit_set_auditable(context);
1494                 return;
1495         }
1496         rcu_read_unlock();
1497 #endif
1498 }
1499
1500 /**
1501  * audit_getname - add a name to the list
1502  * @name: name to add
1503  *
1504  * Add a name to the list of audit names for this context.
1505  * Called from fs/namei.c:getname().
1506  */
1507 void __audit_getname(const char *name)
1508 {
1509         struct audit_context *context = current->audit_context;
1510
1511         if (IS_ERR(name) || !name)
1512                 return;
1513
1514         if (!context->in_syscall) {
1515 #if AUDIT_DEBUG == 2
1516                 printk(KERN_ERR "%s:%d(:%d): ignoring getname(%p)\n",
1517                        __FILE__, __LINE__, context->serial, name);
1518                 dump_stack();
1519 #endif
1520                 return;
1521         }
1522         BUG_ON(context->name_count >= AUDIT_NAMES);
1523         context->names[context->name_count].name = name;
1524         context->names[context->name_count].name_len = AUDIT_NAME_FULL;
1525         context->names[context->name_count].name_put = 1;
1526         context->names[context->name_count].ino  = (unsigned long)-1;
1527         context->names[context->name_count].osid = 0;
1528         ++context->name_count;
1529         if (!context->pwd) {
1530                 read_lock(&current->fs->lock);
1531                 context->pwd = dget(current->fs->pwd);
1532                 context->pwdmnt = mntget(current->fs->pwdmnt);
1533                 read_unlock(&current->fs->lock);
1534         }
1535
1536 }
1537
1538 /* audit_putname - intercept a putname request
1539  * @name: name to intercept and delay for putname
1540  *
1541  * If we have stored the name from getname in the audit context,
1542  * then we delay the putname until syscall exit.
1543  * Called from include/linux/fs.h:putname().
1544  */
1545 void audit_putname(const char *name)
1546 {
1547         struct audit_context *context = current->audit_context;
1548
1549         BUG_ON(!context);
1550         if (!context->in_syscall) {
1551 #if AUDIT_DEBUG == 2
1552                 printk(KERN_ERR "%s:%d(:%d): __putname(%p)\n",
1553                        __FILE__, __LINE__, context->serial, name);
1554                 if (context->name_count) {
1555                         int i;
1556                         for (i = 0; i < context->name_count; i++)
1557                                 printk(KERN_ERR "name[%d] = %p = %s\n", i,
1558                                        context->names[i].name,
1559                                        context->names[i].name ?: "(null)");
1560                 }
1561 #endif
1562                 __putname(name);
1563         }
1564 #if AUDIT_DEBUG
1565         else {
1566                 ++context->put_count;
1567                 if (context->put_count > context->name_count) {
1568                         printk(KERN_ERR "%s:%d(:%d): major=%d"
1569                                " in_syscall=%d putname(%p) name_count=%d"
1570                                " put_count=%d\n",
1571                                __FILE__, __LINE__,
1572                                context->serial, context->major,
1573                                context->in_syscall, name, context->name_count,
1574                                context->put_count);
1575                         dump_stack();
1576                 }
1577         }
1578 #endif
1579 }
1580
1581 static int audit_inc_name_count(struct audit_context *context,
1582                                 const struct inode *inode)
1583 {
1584         if (context->name_count >= AUDIT_NAMES) {
1585                 if (inode)
1586                         printk(KERN_DEBUG "name_count maxed, losing inode data: "
1587                                "dev=%02x:%02x, inode=%lu",
1588                                MAJOR(inode->i_sb->s_dev),
1589                                MINOR(inode->i_sb->s_dev),
1590                                inode->i_ino);
1591
1592                 else
1593                         printk(KERN_DEBUG "name_count maxed, losing inode data");
1594                 return 1;
1595         }
1596         context->name_count++;
1597 #if AUDIT_DEBUG
1598         context->ino_count++;
1599 #endif
1600         return 0;
1601 }
1602
1603 /* Copy inode data into an audit_names. */
1604 static void audit_copy_inode(struct audit_names *name, const struct inode *inode)
1605 {
1606         name->ino   = inode->i_ino;
1607         name->dev   = inode->i_sb->s_dev;
1608         name->mode  = inode->i_mode;
1609         name->uid   = inode->i_uid;
1610         name->gid   = inode->i_gid;
1611         name->rdev  = inode->i_rdev;
1612         selinux_get_inode_sid(inode, &name->osid);
1613 }
1614
1615 /**
1616  * audit_inode - store the inode and device from a lookup
1617  * @name: name being audited
1618  * @dentry: dentry being audited
1619  *
1620  * Called from fs/namei.c:path_lookup().
1621  */
1622 void __audit_inode(const char *name, const struct dentry *dentry)
1623 {
1624         int idx;
1625         struct audit_context *context = current->audit_context;
1626         const struct inode *inode = dentry->d_inode;
1627
1628         if (!context->in_syscall)
1629                 return;
1630         if (context->name_count
1631             && context->names[context->name_count-1].name
1632             && context->names[context->name_count-1].name == name)
1633                 idx = context->name_count - 1;
1634         else if (context->name_count > 1
1635                  && context->names[context->name_count-2].name
1636                  && context->names[context->name_count-2].name == name)
1637                 idx = context->name_count - 2;
1638         else {
1639                 /* FIXME: how much do we care about inodes that have no
1640                  * associated name? */
1641                 if (audit_inc_name_count(context, inode))
1642                         return;
1643                 idx = context->name_count - 1;
1644                 context->names[idx].name = NULL;
1645         }
1646         handle_path(dentry);
1647         audit_copy_inode(&context->names[idx], inode);
1648 }
1649
1650 /**
1651  * audit_inode_child - collect inode info for created/removed objects
1652  * @dname: inode's dentry name
1653  * @dentry: dentry being audited
1654  * @parent: inode of dentry parent
1655  *
1656  * For syscalls that create or remove filesystem objects, audit_inode
1657  * can only collect information for the filesystem object's parent.
1658  * This call updates the audit context with the child's information.
1659  * Syscalls that create a new filesystem object must be hooked after
1660  * the object is created.  Syscalls that remove a filesystem object
1661  * must be hooked prior, in order to capture the target inode during
1662  * unsuccessful attempts.
1663  */
1664 void __audit_inode_child(const char *dname, const struct dentry *dentry,
1665                          const struct inode *parent)
1666 {
1667         int idx;
1668         struct audit_context *context = current->audit_context;
1669         const char *found_parent = NULL, *found_child = NULL;
1670         const struct inode *inode = dentry->d_inode;
1671         int dirlen = 0;
1672
1673         if (!context->in_syscall)
1674                 return;
1675
1676         if (inode)
1677                 handle_one(inode);
1678         /* determine matching parent */
1679         if (!dname)
1680                 goto add_names;
1681
1682         /* parent is more likely, look for it first */
1683         for (idx = 0; idx < context->name_count; idx++) {
1684                 struct audit_names *n = &context->names[idx];
1685
1686                 if (!n->name)
1687                         continue;
1688
1689                 if (n->ino == parent->i_ino &&
1690                     !audit_compare_dname_path(dname, n->name, &dirlen)) {
1691                         n->name_len = dirlen; /* update parent data in place */
1692                         found_parent = n->name;
1693                         goto add_names;
1694                 }
1695         }
1696
1697         /* no matching parent, look for matching child */
1698         for (idx = 0; idx < context->name_count; idx++) {
1699                 struct audit_names *n = &context->names[idx];
1700
1701                 if (!n->name)
1702                         continue;
1703
1704                 /* strcmp() is the more likely scenario */
1705                 if (!strcmp(dname, n->name) ||
1706                      !audit_compare_dname_path(dname, n->name, &dirlen)) {
1707                         if (inode)
1708                                 audit_copy_inode(n, inode);
1709                         else
1710                                 n->ino = (unsigned long)-1;
1711                         found_child = n->name;
1712                         goto add_names;
1713                 }
1714         }
1715
1716 add_names:
1717         if (!found_parent) {
1718                 if (audit_inc_name_count(context, parent))
1719                         return;
1720                 idx = context->name_count - 1;
1721                 context->names[idx].name = NULL;
1722                 audit_copy_inode(&context->names[idx], parent);
1723         }
1724
1725         if (!found_child) {
1726                 if (audit_inc_name_count(context, inode))
1727                         return;
1728                 idx = context->name_count - 1;
1729
1730                 /* Re-use the name belonging to the slot for a matching parent
1731                  * directory. All names for this context are relinquished in
1732                  * audit_free_names() */
1733                 if (found_parent) {
1734                         context->names[idx].name = found_parent;
1735                         context->names[idx].name_len = AUDIT_NAME_FULL;
1736                         /* don't call __putname() */
1737                         context->names[idx].name_put = 0;
1738                 } else {
1739                         context->names[idx].name = NULL;
1740                 }
1741
1742                 if (inode)
1743                         audit_copy_inode(&context->names[idx], inode);
1744                 else
1745                         context->names[idx].ino = (unsigned long)-1;
1746         }
1747 }
1748 EXPORT_SYMBOL_GPL(__audit_inode_child);
1749
1750 /**
1751  * auditsc_get_stamp - get local copies of audit_context values
1752  * @ctx: audit_context for the task
1753  * @t: timespec to store time recorded in the audit_context
1754  * @serial: serial value that is recorded in the audit_context
1755  *
1756  * Also sets the context as auditable.
1757  */
1758 void auditsc_get_stamp(struct audit_context *ctx,
1759                        struct timespec *t, unsigned int *serial)
1760 {
1761         if (!ctx->serial)
1762                 ctx->serial = audit_serial();
1763         t->tv_sec  = ctx->ctime.tv_sec;
1764         t->tv_nsec = ctx->ctime.tv_nsec;
1765         *serial    = ctx->serial;
1766         ctx->auditable = 1;
1767 }
1768
1769 /**
1770  * audit_set_loginuid - set a task's audit_context loginuid
1771  * @task: task whose audit context is being modified
1772  * @loginuid: loginuid value
1773  *
1774  * Returns 0.
1775  *
1776  * Called (set) from fs/proc/base.c::proc_loginuid_write().
1777  */
1778 int audit_set_loginuid(struct task_struct *task, uid_t loginuid)
1779 {
1780         struct audit_context *context = task->audit_context;
1781
1782         if (context) {
1783                 /* Only log if audit is enabled */
1784                 if (context->in_syscall) {
1785                         struct audit_buffer *ab;
1786
1787                         ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_LOGIN);
1788                         if (ab) {
1789                                 audit_log_format(ab, "login pid=%d uid=%u "
1790                                         "old auid=%u new auid=%u",
1791                                         task->pid, task->uid,
1792                                         context->loginuid, loginuid);
1793                                 audit_log_end(ab);
1794                         }
1795                 }
1796                 context->loginuid = loginuid;
1797         }
1798         return 0;
1799 }
1800
1801 /**
1802  * audit_get_loginuid - get the loginuid for an audit_context
1803  * @ctx: the audit_context
1804  *
1805  * Returns the context's loginuid or -1 if @ctx is NULL.
1806  */
1807 uid_t audit_get_loginuid(struct audit_context *ctx)
1808 {
1809         return ctx ? ctx->loginuid : -1;
1810 }
1811
1812 EXPORT_SYMBOL(audit_get_loginuid);
1813
1814 /**
1815  * __audit_mq_open - record audit data for a POSIX MQ open
1816  * @oflag: open flag
1817  * @mode: mode bits
1818  * @u_attr: queue attributes
1819  *
1820  * Returns 0 for success or NULL context or < 0 on error.
1821  */
1822 int __audit_mq_open(int oflag, mode_t mode, struct mq_attr __user *u_attr)
1823 {
1824         struct audit_aux_data_mq_open *ax;
1825         struct audit_context *context = current->audit_context;
1826
1827         if (!audit_enabled)
1828                 return 0;
1829
1830         if (likely(!context))
1831                 return 0;
1832
1833         ax = kmalloc(sizeof(*ax), GFP_ATOMIC);
1834         if (!ax)
1835                 return -ENOMEM;
1836
1837         if (u_attr != NULL) {
1838                 if (copy_from_user(&ax->attr, u_attr, sizeof(ax->attr))) {
1839                         kfree(ax);
1840                         return -EFAULT;
1841                 }
1842         } else
1843                 memset(&ax->attr, 0, sizeof(ax->attr));
1844
1845         ax->oflag = oflag;
1846         ax->mode = mode;
1847
1848         ax->d.type = AUDIT_MQ_OPEN;
1849         ax->d.next = context->aux;
1850         context->aux = (void *)ax;
1851         return 0;
1852 }
1853
1854 /**
1855  * __audit_mq_timedsend - record audit data for a POSIX MQ timed send
1856  * @mqdes: MQ descriptor
1857  * @msg_len: Message length
1858  * @msg_prio: Message priority
1859  * @u_abs_timeout: Message timeout in absolute time
1860  *
1861  * Returns 0 for success or NULL context or < 0 on error.
1862  */
1863 int __audit_mq_timedsend(mqd_t mqdes, size_t msg_len, unsigned int msg_prio,
1864                         const struct timespec __user *u_abs_timeout)
1865 {
1866         struct audit_aux_data_mq_sendrecv *ax;
1867         struct audit_context *context = current->audit_context;
1868
1869         if (!audit_enabled)
1870                 return 0;
1871
1872         if (likely(!context))
1873                 return 0;
1874
1875         ax = kmalloc(sizeof(*ax), GFP_ATOMIC);
1876         if (!ax)
1877                 return -ENOMEM;
1878
1879         if (u_abs_timeout != NULL) {
1880                 if (copy_from_user(&ax->abs_timeout, u_abs_timeout, sizeof(ax->abs_timeout))) {
1881                         kfree(ax);
1882                         return -EFAULT;
1883                 }
1884         } else
1885                 memset(&ax->abs_timeout, 0, sizeof(ax->abs_timeout));
1886
1887         ax->mqdes = mqdes;
1888         ax->msg_len = msg_len;
1889         ax->msg_prio = msg_prio;
1890
1891         ax->d.type = AUDIT_MQ_SENDRECV;
1892         ax->d.next = context->aux;
1893         context->aux = (void *)ax;
1894         return 0;
1895 }
1896
1897 /**
1898  * __audit_mq_timedreceive - record audit data for a POSIX MQ timed receive
1899  * @mqdes: MQ descriptor
1900  * @msg_len: Message length
1901  * @u_msg_prio: Message priority
1902  * @u_abs_timeout: Message timeout in absolute time
1903  *
1904  * Returns 0 for success or NULL context or < 0 on error.
1905  */
1906 int __audit_mq_timedreceive(mqd_t mqdes, size_t msg_len,
1907                                 unsigned int __user *u_msg_prio,
1908                                 const struct timespec __user *u_abs_timeout)
1909 {
1910         struct audit_aux_data_mq_sendrecv *ax;
1911         struct audit_context *context = current->audit_context;
1912
1913         if (!audit_enabled)
1914                 return 0;
1915
1916         if (likely(!context))
1917                 return 0;
1918
1919         ax = kmalloc(sizeof(*ax), GFP_ATOMIC);
1920         if (!ax)
1921                 return -ENOMEM;
1922
1923         if (u_msg_prio != NULL) {
1924                 if (get_user(ax->msg_prio, u_msg_prio)) {
1925                         kfree(ax);
1926                         return -EFAULT;
1927                 }
1928         } else
1929                 ax->msg_prio = 0;
1930
1931         if (u_abs_timeout != NULL) {
1932                 if (copy_from_user(&ax->abs_timeout, u_abs_timeout, sizeof(ax->abs_timeout))) {
1933                         kfree(ax);
1934                         return -EFAULT;
1935                 }
1936         } else
1937                 memset(&ax->abs_timeout, 0, sizeof(ax->abs_timeout));
1938
1939         ax->mqdes = mqdes;
1940         ax->msg_len = msg_len;
1941
1942         ax->d.type = AUDIT_MQ_SENDRECV;
1943         ax->d.next = context->aux;
1944         context->aux = (void *)ax;
1945         return 0;
1946 }
1947
1948 /**
1949  * __audit_mq_notify - record audit data for a POSIX MQ notify
1950  * @mqdes: MQ descriptor
1951  * @u_notification: Notification event
1952  *
1953  * Returns 0 for success or NULL context or < 0 on error.
1954  */
1955
1956 int __audit_mq_notify(mqd_t mqdes, const struct sigevent __user *u_notification)
1957 {
1958         struct audit_aux_data_mq_notify *ax;
1959         struct audit_context *context = current->audit_context;
1960
1961         if (!audit_enabled)
1962                 return 0;
1963
1964         if (likely(!context))
1965                 return 0;
1966
1967         ax = kmalloc(sizeof(*ax), GFP_ATOMIC);
1968         if (!ax)
1969                 return -ENOMEM;
1970
1971         if (u_notification != NULL) {
1972                 if (copy_from_user(&ax->notification, u_notification, sizeof(ax->notification))) {
1973                         kfree(ax);
1974                         return -EFAULT;
1975                 }
1976         } else
1977                 memset(&ax->notification, 0, sizeof(ax->notification));
1978
1979         ax->mqdes = mqdes;
1980
1981         ax->d.type = AUDIT_MQ_NOTIFY;
1982         ax->d.next = context->aux;
1983         context->aux = (void *)ax;
1984         return 0;
1985 }
1986
1987 /**
1988  * __audit_mq_getsetattr - record audit data for a POSIX MQ get/set attribute
1989  * @mqdes: MQ descriptor
1990  * @mqstat: MQ flags
1991  *
1992  * Returns 0 for success or NULL context or < 0 on error.
1993  */
1994 int __audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat)
1995 {
1996         struct audit_aux_data_mq_getsetattr *ax;
1997         struct audit_context *context = current->audit_context;
1998
1999         if (!audit_enabled)
2000                 return 0;
2001
2002         if (likely(!context))
2003                 return 0;
2004
2005         ax = kmalloc(sizeof(*ax), GFP_ATOMIC);
2006         if (!ax)
2007                 return -ENOMEM;
2008
2009         ax->mqdes = mqdes;
2010         ax->mqstat = *mqstat;
2011
2012         ax->d.type = AUDIT_MQ_GETSETATTR;
2013         ax->d.next = context->aux;
2014         context->aux = (void *)ax;
2015         return 0;
2016 }
2017
2018 /**
2019  * audit_ipc_obj - record audit data for ipc object
2020  * @ipcp: ipc permissions
2021  *
2022  * Returns 0 for success or NULL context or < 0 on error.
2023  */
2024 int __audit_ipc_obj(struct kern_ipc_perm *ipcp)
2025 {
2026         struct audit_aux_data_ipcctl *ax;
2027         struct audit_context *context = current->audit_context;
2028
2029         ax = kmalloc(sizeof(*ax), GFP_ATOMIC);
2030         if (!ax)
2031                 return -ENOMEM;
2032
2033         ax->uid = ipcp->uid;
2034         ax->gid = ipcp->gid;
2035         ax->mode = ipcp->mode;
2036         selinux_get_ipc_sid(ipcp, &ax->osid);
2037
2038         ax->d.type = AUDIT_IPC;
2039         ax->d.next = context->aux;
2040         context->aux = (void *)ax;
2041         return 0;
2042 }
2043
2044 /**
2045  * audit_ipc_set_perm - record audit data for new ipc permissions
2046  * @qbytes: msgq bytes
2047  * @uid: msgq user id
2048  * @gid: msgq group id
2049  * @mode: msgq mode (permissions)
2050  *
2051  * Returns 0 for success or NULL context or < 0 on error.
2052  */
2053 int __audit_ipc_set_perm(unsigned long qbytes, uid_t uid, gid_t gid, mode_t mode)
2054 {
2055         struct audit_aux_data_ipcctl *ax;
2056         struct audit_context *context = current->audit_context;
2057
2058         ax = kmalloc(sizeof(*ax), GFP_ATOMIC);
2059         if (!ax)
2060                 return -ENOMEM;
2061
2062         ax->qbytes = qbytes;
2063         ax->uid = uid;
2064         ax->gid = gid;
2065         ax->mode = mode;
2066
2067         ax->d.type = AUDIT_IPC_SET_PERM;
2068         ax->d.next = context->aux;
2069         context->aux = (void *)ax;
2070         return 0;
2071 }
2072
2073 int audit_argv_kb = 32;
2074
2075 int audit_bprm(struct linux_binprm *bprm)
2076 {
2077         struct audit_aux_data_execve *ax;
2078         struct audit_context *context = current->audit_context;
2079
2080         if (likely(!audit_enabled || !context || context->dummy))
2081                 return 0;
2082
2083         /*
2084          * Even though the stack code doesn't limit the arg+env size any more,
2085          * the audit code requires that _all_ arguments be logged in a single
2086          * netlink skb. Hence cap it :-(
2087          */
2088         if (bprm->argv_len > (audit_argv_kb << 10))
2089                 return -E2BIG;
2090
2091         ax = kmalloc(sizeof(*ax), GFP_KERNEL);
2092         if (!ax)
2093                 return -ENOMEM;
2094
2095         ax->argc = bprm->argc;
2096         ax->envc = bprm->envc;
2097         ax->mm = bprm->mm;
2098         ax->d.type = AUDIT_EXECVE;
2099         ax->d.next = context->aux;
2100         context->aux = (void *)ax;
2101         return 0;
2102 }
2103
2104
2105 /**
2106  * audit_socketcall - record audit data for sys_socketcall
2107  * @nargs: number of args
2108  * @args: args array
2109  *
2110  * Returns 0 for success or NULL context or < 0 on error.
2111  */
2112 int audit_socketcall(int nargs, unsigned long *args)
2113 {
2114         struct audit_aux_data_socketcall *ax;
2115         struct audit_context *context = current->audit_context;
2116
2117         if (likely(!context || context->dummy))
2118                 return 0;
2119
2120         ax = kmalloc(sizeof(*ax) + nargs * sizeof(unsigned long), GFP_KERNEL);
2121         if (!ax)
2122                 return -ENOMEM;
2123
2124         ax->nargs = nargs;
2125         memcpy(ax->args, args, nargs * sizeof(unsigned long));
2126
2127         ax->d.type = AUDIT_SOCKETCALL;
2128         ax->d.next = context->aux;
2129         context->aux = (void *)ax;
2130         return 0;
2131 }
2132
2133 /**
2134  * __audit_fd_pair - record audit data for pipe and socketpair
2135  * @fd1: the first file descriptor
2136  * @fd2: the second file descriptor
2137  *
2138  * Returns 0 for success or NULL context or < 0 on error.
2139  */
2140 int __audit_fd_pair(int fd1, int fd2)
2141 {
2142         struct audit_context *context = current->audit_context;
2143         struct audit_aux_data_fd_pair *ax;
2144
2145         if (likely(!context)) {
2146                 return 0;
2147         }
2148
2149         ax = kmalloc(sizeof(*ax), GFP_KERNEL);
2150         if (!ax) {
2151                 return -ENOMEM;
2152         }
2153
2154         ax->fd[0] = fd1;
2155         ax->fd[1] = fd2;
2156
2157         ax->d.type = AUDIT_FD_PAIR;
2158         ax->d.next = context->aux;
2159         context->aux = (void *)ax;
2160         return 0;
2161 }
2162
2163 /**
2164  * audit_sockaddr - record audit data for sys_bind, sys_connect, sys_sendto
2165  * @len: data length in user space
2166  * @a: data address in kernel space
2167  *
2168  * Returns 0 for success or NULL context or < 0 on error.
2169  */
2170 int audit_sockaddr(int len, void *a)
2171 {
2172         struct audit_aux_data_sockaddr *ax;
2173         struct audit_context *context = current->audit_context;
2174
2175         if (likely(!context || context->dummy))
2176                 return 0;
2177
2178         ax = kmalloc(sizeof(*ax) + len, GFP_KERNEL);
2179         if (!ax)
2180                 return -ENOMEM;
2181
2182         ax->len = len;
2183         memcpy(ax->a, a, len);
2184
2185         ax->d.type = AUDIT_SOCKADDR;
2186         ax->d.next = context->aux;
2187         context->aux = (void *)ax;
2188         return 0;
2189 }
2190
2191 void __audit_ptrace(struct task_struct *t)
2192 {
2193         struct audit_context *context = current->audit_context;
2194
2195         context->target_pid = t->pid;
2196         selinux_get_task_sid(t, &context->target_sid);
2197 }
2198
2199 /**
2200  * audit_signal_info - record signal info for shutting down audit subsystem
2201  * @sig: signal value
2202  * @t: task being signaled
2203  *
2204  * If the audit subsystem is being terminated, record the task (pid)
2205  * and uid that is doing that.
2206  */
2207 int __audit_signal_info(int sig, struct task_struct *t)
2208 {
2209         struct audit_aux_data_pids *axp;
2210         struct task_struct *tsk = current;
2211         struct audit_context *ctx = tsk->audit_context;
2212         extern pid_t audit_sig_pid;
2213         extern uid_t audit_sig_uid;
2214         extern u32 audit_sig_sid;
2215
2216         if (audit_pid && t->tgid == audit_pid) {
2217                 if (sig == SIGTERM || sig == SIGHUP || sig == SIGUSR1) {
2218                         audit_sig_pid = tsk->pid;
2219                         if (ctx)
2220                                 audit_sig_uid = ctx->loginuid;
2221                         else
2222                                 audit_sig_uid = tsk->uid;
2223                         selinux_get_task_sid(tsk, &audit_sig_sid);
2224                 }
2225                 if (!audit_signals || audit_dummy_context())
2226                         return 0;
2227         }
2228
2229         /* optimize the common case by putting first signal recipient directly
2230          * in audit_context */
2231         if (!ctx->target_pid) {
2232                 ctx->target_pid = t->tgid;
2233                 selinux_get_task_sid(t, &ctx->target_sid);
2234                 return 0;
2235         }
2236
2237         axp = (void *)ctx->aux_pids;
2238         if (!axp || axp->pid_count == AUDIT_AUX_PIDS) {
2239                 axp = kzalloc(sizeof(*axp), GFP_ATOMIC);
2240                 if (!axp)
2241                         return -ENOMEM;
2242
2243                 axp->d.type = AUDIT_OBJ_PID;
2244                 axp->d.next = ctx->aux_pids;
2245                 ctx->aux_pids = (void *)axp;
2246         }
2247         BUG_ON(axp->pid_count >= AUDIT_AUX_PIDS);
2248
2249         axp->target_pid[axp->pid_count] = t->tgid;
2250         selinux_get_task_sid(t, &axp->target_sid[axp->pid_count]);
2251         axp->pid_count++;
2252
2253         return 0;
2254 }
2255
2256 /**
2257  * audit_core_dumps - record information about processes that end abnormally
2258  * @signr: signal value
2259  *
2260  * If a process ends with a core dump, something fishy is going on and we
2261  * should record the event for investigation.
2262  */
2263 void audit_core_dumps(long signr)
2264 {
2265         struct audit_buffer *ab;
2266         u32 sid;
2267
2268         if (!audit_enabled)
2269                 return;
2270
2271         if (signr == SIGQUIT)   /* don't care for those */
2272                 return;
2273
2274         ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_ANOM_ABEND);
2275         audit_log_format(ab, "auid=%u uid=%u gid=%u",
2276                         audit_get_loginuid(current->audit_context),
2277                         current->uid, current->gid);
2278         selinux_get_task_sid(current, &sid);
2279         if (sid) {
2280                 char *ctx = NULL;
2281                 u32 len;
2282
2283                 if (selinux_sid_to_string(sid, &ctx, &len))
2284                         audit_log_format(ab, " ssid=%u", sid);
2285                 else
2286                         audit_log_format(ab, " subj=%s", ctx);
2287                 kfree(ctx);
2288         }
2289         audit_log_format(ab, " pid=%d comm=", current->pid);
2290         audit_log_untrustedstring(ab, current->comm);
2291         audit_log_format(ab, " sig=%ld", signr);
2292         audit_log_end(ab);
2293 }