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