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