xref: /linux/security/apparmor/lsm.c (revision de62de59c27881c59c7df2e535cb9e1275cd52cc)
1 /*
2  * AppArmor security module
3  *
4  * This file contains AppArmor LSM hooks.
5  *
6  * Copyright (C) 1998-2008 Novell/SUSE
7  * Copyright 2009-2010 Canonical Ltd.
8  *
9  * This program is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License as
11  * published by the Free Software Foundation, version 2 of the
12  * License.
13  */
14 
15 #include <linux/lsm_hooks.h>
16 #include <linux/moduleparam.h>
17 #include <linux/mm.h>
18 #include <linux/mman.h>
19 #include <linux/mount.h>
20 #include <linux/namei.h>
21 #include <linux/ptrace.h>
22 #include <linux/ctype.h>
23 #include <linux/sysctl.h>
24 #include <linux/audit.h>
25 #include <linux/user_namespace.h>
26 #include <linux/kmemleak.h>
27 #include <net/sock.h>
28 
29 #include "include/apparmor.h"
30 #include "include/apparmorfs.h"
31 #include "include/audit.h"
32 #include "include/capability.h"
33 #include "include/context.h"
34 #include "include/file.h"
35 #include "include/ipc.h"
36 #include "include/path.h"
37 #include "include/label.h"
38 #include "include/policy.h"
39 #include "include/policy_ns.h"
40 #include "include/procattr.h"
41 #include "include/mount.h"
42 
43 /* Flag indicating whether initialization completed */
44 int apparmor_initialized;
45 
46 DEFINE_PER_CPU(struct aa_buffers, aa_buffers);
47 
48 
49 /*
50  * LSM hook functions
51  */
52 
53 /*
54  * put the associated labels
55  */
56 static void apparmor_cred_free(struct cred *cred)
57 {
58 	aa_put_label(cred_label(cred));
59 	cred_label(cred) = NULL;
60 }
61 
62 /*
63  * allocate the apparmor part of blank credentials
64  */
65 static int apparmor_cred_alloc_blank(struct cred *cred, gfp_t gfp)
66 {
67 	cred_label(cred) = NULL;
68 	return 0;
69 }
70 
71 /*
72  * prepare new cred label for modification by prepare_cred block
73  */
74 static int apparmor_cred_prepare(struct cred *new, const struct cred *old,
75 				 gfp_t gfp)
76 {
77 	cred_label(new) = aa_get_newest_label(cred_label(old));
78 	return 0;
79 }
80 
81 /*
82  * transfer the apparmor data to a blank set of creds
83  */
84 static void apparmor_cred_transfer(struct cred *new, const struct cred *old)
85 {
86 	cred_label(new) = aa_get_newest_label(cred_label(old));
87 }
88 
89 static void apparmor_task_free(struct task_struct *task)
90 {
91 
92 	aa_free_task_ctx(task_ctx(task));
93 	task_ctx(task) = NULL;
94 }
95 
96 static int apparmor_task_alloc(struct task_struct *task,
97 			       unsigned long clone_flags)
98 {
99 	struct aa_task_ctx *new = aa_alloc_task_ctx(GFP_KERNEL);
100 
101 	if (!new)
102 		return -ENOMEM;
103 
104 	aa_dup_task_ctx(new, task_ctx(current));
105 	task_ctx(task) = new;
106 
107 	return 0;
108 }
109 
110 static int apparmor_ptrace_access_check(struct task_struct *child,
111 					unsigned int mode)
112 {
113 	struct aa_label *tracer, *tracee;
114 	int error;
115 
116 	tracer = begin_current_label_crit_section();
117 	tracee = aa_get_task_label(child);
118 	error = aa_may_ptrace(tracer, tracee,
119 		  mode == PTRACE_MODE_READ ? AA_PTRACE_READ : AA_PTRACE_TRACE);
120 	aa_put_label(tracee);
121 	end_current_label_crit_section(tracer);
122 
123 	return error;
124 }
125 
126 static int apparmor_ptrace_traceme(struct task_struct *parent)
127 {
128 	struct aa_label *tracer, *tracee;
129 	int error;
130 
131 	tracee = begin_current_label_crit_section();
132 	tracer = aa_get_task_label(parent);
133 	error = aa_may_ptrace(tracer, tracee, AA_PTRACE_TRACE);
134 	aa_put_label(tracer);
135 	end_current_label_crit_section(tracee);
136 
137 	return error;
138 }
139 
140 /* Derived from security/commoncap.c:cap_capget */
141 static int apparmor_capget(struct task_struct *target, kernel_cap_t *effective,
142 			   kernel_cap_t *inheritable, kernel_cap_t *permitted)
143 {
144 	struct aa_label *label;
145 	const struct cred *cred;
146 
147 	rcu_read_lock();
148 	cred = __task_cred(target);
149 	label = aa_get_newest_cred_label(cred);
150 
151 	/*
152 	 * cap_capget is stacked ahead of this and will
153 	 * initialize effective and permitted.
154 	 */
155 	if (!unconfined(label)) {
156 		struct aa_profile *profile;
157 		struct label_it i;
158 
159 		label_for_each_confined(i, label, profile) {
160 			if (COMPLAIN_MODE(profile))
161 				continue;
162 			*effective = cap_intersect(*effective,
163 						   profile->caps.allow);
164 			*permitted = cap_intersect(*permitted,
165 						   profile->caps.allow);
166 		}
167 	}
168 	rcu_read_unlock();
169 	aa_put_label(label);
170 
171 	return 0;
172 }
173 
174 static int apparmor_capable(const struct cred *cred, struct user_namespace *ns,
175 			    int cap, int audit)
176 {
177 	struct aa_label *label;
178 	int error = 0;
179 
180 	label = aa_get_newest_cred_label(cred);
181 	if (!unconfined(label))
182 		error = aa_capable(label, cap, audit);
183 	aa_put_label(label);
184 
185 	return error;
186 }
187 
188 /**
189  * common_perm - basic common permission check wrapper fn for paths
190  * @op: operation being checked
191  * @path: path to check permission of  (NOT NULL)
192  * @mask: requested permissions mask
193  * @cond: conditional info for the permission request  (NOT NULL)
194  *
195  * Returns: %0 else error code if error or permission denied
196  */
197 static int common_perm(const char *op, const struct path *path, u32 mask,
198 		       struct path_cond *cond)
199 {
200 	struct aa_label *label;
201 	int error = 0;
202 
203 	label = __begin_current_label_crit_section();
204 	if (!unconfined(label))
205 		error = aa_path_perm(op, label, path, 0, mask, cond);
206 	__end_current_label_crit_section(label);
207 
208 	return error;
209 }
210 
211 /**
212  * common_perm_cond - common permission wrapper around inode cond
213  * @op: operation being checked
214  * @path: location to check (NOT NULL)
215  * @mask: requested permissions mask
216  *
217  * Returns: %0 else error code if error or permission denied
218  */
219 static int common_perm_cond(const char *op, const struct path *path, u32 mask)
220 {
221 	struct path_cond cond = { d_backing_inode(path->dentry)->i_uid,
222 				  d_backing_inode(path->dentry)->i_mode
223 	};
224 
225 	if (!path_mediated_fs(path->dentry))
226 		return 0;
227 
228 	return common_perm(op, path, mask, &cond);
229 }
230 
231 /**
232  * common_perm_dir_dentry - common permission wrapper when path is dir, dentry
233  * @op: operation being checked
234  * @dir: directory of the dentry  (NOT NULL)
235  * @dentry: dentry to check  (NOT NULL)
236  * @mask: requested permissions mask
237  * @cond: conditional info for the permission request  (NOT NULL)
238  *
239  * Returns: %0 else error code if error or permission denied
240  */
241 static int common_perm_dir_dentry(const char *op, const struct path *dir,
242 				  struct dentry *dentry, u32 mask,
243 				  struct path_cond *cond)
244 {
245 	struct path path = { .mnt = dir->mnt, .dentry = dentry };
246 
247 	return common_perm(op, &path, mask, cond);
248 }
249 
250 /**
251  * common_perm_rm - common permission wrapper for operations doing rm
252  * @op: operation being checked
253  * @dir: directory that the dentry is in  (NOT NULL)
254  * @dentry: dentry being rm'd  (NOT NULL)
255  * @mask: requested permission mask
256  *
257  * Returns: %0 else error code if error or permission denied
258  */
259 static int common_perm_rm(const char *op, const struct path *dir,
260 			  struct dentry *dentry, u32 mask)
261 {
262 	struct inode *inode = d_backing_inode(dentry);
263 	struct path_cond cond = { };
264 
265 	if (!inode || !path_mediated_fs(dentry))
266 		return 0;
267 
268 	cond.uid = inode->i_uid;
269 	cond.mode = inode->i_mode;
270 
271 	return common_perm_dir_dentry(op, dir, dentry, mask, &cond);
272 }
273 
274 /**
275  * common_perm_create - common permission wrapper for operations doing create
276  * @op: operation being checked
277  * @dir: directory that dentry will be created in  (NOT NULL)
278  * @dentry: dentry to create   (NOT NULL)
279  * @mask: request permission mask
280  * @mode: created file mode
281  *
282  * Returns: %0 else error code if error or permission denied
283  */
284 static int common_perm_create(const char *op, const struct path *dir,
285 			      struct dentry *dentry, u32 mask, umode_t mode)
286 {
287 	struct path_cond cond = { current_fsuid(), mode };
288 
289 	if (!path_mediated_fs(dir->dentry))
290 		return 0;
291 
292 	return common_perm_dir_dentry(op, dir, dentry, mask, &cond);
293 }
294 
295 static int apparmor_path_unlink(const struct path *dir, struct dentry *dentry)
296 {
297 	return common_perm_rm(OP_UNLINK, dir, dentry, AA_MAY_DELETE);
298 }
299 
300 static int apparmor_path_mkdir(const struct path *dir, struct dentry *dentry,
301 			       umode_t mode)
302 {
303 	return common_perm_create(OP_MKDIR, dir, dentry, AA_MAY_CREATE,
304 				  S_IFDIR);
305 }
306 
307 static int apparmor_path_rmdir(const struct path *dir, struct dentry *dentry)
308 {
309 	return common_perm_rm(OP_RMDIR, dir, dentry, AA_MAY_DELETE);
310 }
311 
312 static int apparmor_path_mknod(const struct path *dir, struct dentry *dentry,
313 			       umode_t mode, unsigned int dev)
314 {
315 	return common_perm_create(OP_MKNOD, dir, dentry, AA_MAY_CREATE, mode);
316 }
317 
318 static int apparmor_path_truncate(const struct path *path)
319 {
320 	return common_perm_cond(OP_TRUNC, path, MAY_WRITE | AA_MAY_SETATTR);
321 }
322 
323 static int apparmor_path_symlink(const struct path *dir, struct dentry *dentry,
324 				 const char *old_name)
325 {
326 	return common_perm_create(OP_SYMLINK, dir, dentry, AA_MAY_CREATE,
327 				  S_IFLNK);
328 }
329 
330 static int apparmor_path_link(struct dentry *old_dentry, const struct path *new_dir,
331 			      struct dentry *new_dentry)
332 {
333 	struct aa_label *label;
334 	int error = 0;
335 
336 	if (!path_mediated_fs(old_dentry))
337 		return 0;
338 
339 	label = begin_current_label_crit_section();
340 	if (!unconfined(label))
341 		error = aa_path_link(label, old_dentry, new_dir, new_dentry);
342 	end_current_label_crit_section(label);
343 
344 	return error;
345 }
346 
347 static int apparmor_path_rename(const struct path *old_dir, struct dentry *old_dentry,
348 				const struct path *new_dir, struct dentry *new_dentry)
349 {
350 	struct aa_label *label;
351 	int error = 0;
352 
353 	if (!path_mediated_fs(old_dentry))
354 		return 0;
355 
356 	label = begin_current_label_crit_section();
357 	if (!unconfined(label)) {
358 		struct path old_path = { .mnt = old_dir->mnt,
359 					 .dentry = old_dentry };
360 		struct path new_path = { .mnt = new_dir->mnt,
361 					 .dentry = new_dentry };
362 		struct path_cond cond = { d_backing_inode(old_dentry)->i_uid,
363 					  d_backing_inode(old_dentry)->i_mode
364 		};
365 
366 		error = aa_path_perm(OP_RENAME_SRC, label, &old_path, 0,
367 				     MAY_READ | AA_MAY_GETATTR | MAY_WRITE |
368 				     AA_MAY_SETATTR | AA_MAY_DELETE,
369 				     &cond);
370 		if (!error)
371 			error = aa_path_perm(OP_RENAME_DEST, label, &new_path,
372 					     0, MAY_WRITE | AA_MAY_SETATTR |
373 					     AA_MAY_CREATE, &cond);
374 
375 	}
376 	end_current_label_crit_section(label);
377 
378 	return error;
379 }
380 
381 static int apparmor_path_chmod(const struct path *path, umode_t mode)
382 {
383 	return common_perm_cond(OP_CHMOD, path, AA_MAY_CHMOD);
384 }
385 
386 static int apparmor_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
387 {
388 	return common_perm_cond(OP_CHOWN, path, AA_MAY_CHOWN);
389 }
390 
391 static int apparmor_inode_getattr(const struct path *path)
392 {
393 	return common_perm_cond(OP_GETATTR, path, AA_MAY_GETATTR);
394 }
395 
396 static int apparmor_file_open(struct file *file, const struct cred *cred)
397 {
398 	struct aa_file_ctx *fctx = file_ctx(file);
399 	struct aa_label *label;
400 	int error = 0;
401 
402 	if (!path_mediated_fs(file->f_path.dentry))
403 		return 0;
404 
405 	/* If in exec, permission is handled by bprm hooks.
406 	 * Cache permissions granted by the previous exec check, with
407 	 * implicit read and executable mmap which are required to
408 	 * actually execute the image.
409 	 */
410 	if (current->in_execve) {
411 		fctx->allow = MAY_EXEC | MAY_READ | AA_EXEC_MMAP;
412 		return 0;
413 	}
414 
415 	label = aa_get_newest_cred_label(cred);
416 	if (!unconfined(label)) {
417 		struct inode *inode = file_inode(file);
418 		struct path_cond cond = { inode->i_uid, inode->i_mode };
419 
420 		error = aa_path_perm(OP_OPEN, label, &file->f_path, 0,
421 				     aa_map_file_to_perms(file), &cond);
422 		/* todo cache full allowed permissions set and state */
423 		fctx->allow = aa_map_file_to_perms(file);
424 	}
425 	aa_put_label(label);
426 
427 	return error;
428 }
429 
430 static int apparmor_file_alloc_security(struct file *file)
431 {
432 	int error = 0;
433 
434 	/* freed by apparmor_file_free_security */
435 	struct aa_label *label = begin_current_label_crit_section();
436 	file->f_security = aa_alloc_file_ctx(label, GFP_KERNEL);
437 	if (!file_ctx(file))
438 		error = -ENOMEM;
439 	end_current_label_crit_section(label);
440 
441 	return error;
442 }
443 
444 static void apparmor_file_free_security(struct file *file)
445 {
446 	aa_free_file_ctx(file_ctx(file));
447 }
448 
449 static int common_file_perm(const char *op, struct file *file, u32 mask)
450 {
451 	struct aa_label *label;
452 	int error = 0;
453 
454 	/* don't reaudit files closed during inheritance */
455 	if (file->f_path.dentry == aa_null.dentry)
456 		return -EACCES;
457 
458 	label = __begin_current_label_crit_section();
459 	error = aa_file_perm(op, label, file, mask);
460 	__end_current_label_crit_section(label);
461 
462 	return error;
463 }
464 
465 static int apparmor_file_receive(struct file *file)
466 {
467 	return common_file_perm(OP_FRECEIVE, file, aa_map_file_to_perms(file));
468 }
469 
470 static int apparmor_file_permission(struct file *file, int mask)
471 {
472 	return common_file_perm(OP_FPERM, file, mask);
473 }
474 
475 static int apparmor_file_lock(struct file *file, unsigned int cmd)
476 {
477 	u32 mask = AA_MAY_LOCK;
478 
479 	if (cmd == F_WRLCK)
480 		mask |= MAY_WRITE;
481 
482 	return common_file_perm(OP_FLOCK, file, mask);
483 }
484 
485 static int common_mmap(const char *op, struct file *file, unsigned long prot,
486 		       unsigned long flags)
487 {
488 	int mask = 0;
489 
490 	if (!file || !file_ctx(file))
491 		return 0;
492 
493 	if (prot & PROT_READ)
494 		mask |= MAY_READ;
495 	/*
496 	 * Private mappings don't require write perms since they don't
497 	 * write back to the files
498 	 */
499 	if ((prot & PROT_WRITE) && !(flags & MAP_PRIVATE))
500 		mask |= MAY_WRITE;
501 	if (prot & PROT_EXEC)
502 		mask |= AA_EXEC_MMAP;
503 
504 	return common_file_perm(op, file, mask);
505 }
506 
507 static int apparmor_mmap_file(struct file *file, unsigned long reqprot,
508 			      unsigned long prot, unsigned long flags)
509 {
510 	return common_mmap(OP_FMMAP, file, prot, flags);
511 }
512 
513 static int apparmor_file_mprotect(struct vm_area_struct *vma,
514 				  unsigned long reqprot, unsigned long prot)
515 {
516 	return common_mmap(OP_FMPROT, vma->vm_file, prot,
517 			   !(vma->vm_flags & VM_SHARED) ? MAP_PRIVATE : 0);
518 }
519 
520 static int apparmor_sb_mount(const char *dev_name, const struct path *path,
521 			     const char *type, unsigned long flags, void *data)
522 {
523 	struct aa_label *label;
524 	int error = 0;
525 
526 	/* Discard magic */
527 	if ((flags & MS_MGC_MSK) == MS_MGC_VAL)
528 		flags &= ~MS_MGC_MSK;
529 
530 	flags &= ~AA_MS_IGNORE_MASK;
531 
532 	label = __begin_current_label_crit_section();
533 	if (!unconfined(label)) {
534 		if (flags & MS_REMOUNT)
535 			error = aa_remount(label, path, flags, data);
536 		else if (flags & MS_BIND)
537 			error = aa_bind_mount(label, path, dev_name, flags);
538 		else if (flags & (MS_SHARED | MS_PRIVATE | MS_SLAVE |
539 				  MS_UNBINDABLE))
540 			error = aa_mount_change_type(label, path, flags);
541 		else if (flags & MS_MOVE)
542 			error = aa_move_mount(label, path, dev_name);
543 		else
544 			error = aa_new_mount(label, dev_name, path, type,
545 					     flags, data);
546 	}
547 	__end_current_label_crit_section(label);
548 
549 	return error;
550 }
551 
552 static int apparmor_sb_umount(struct vfsmount *mnt, int flags)
553 {
554 	struct aa_label *label;
555 	int error = 0;
556 
557 	label = __begin_current_label_crit_section();
558 	if (!unconfined(label))
559 		error = aa_umount(label, mnt, flags);
560 	__end_current_label_crit_section(label);
561 
562 	return error;
563 }
564 
565 static int apparmor_sb_pivotroot(const struct path *old_path,
566 				 const struct path *new_path)
567 {
568 	struct aa_label *label;
569 	int error = 0;
570 
571 	label = aa_get_current_label();
572 	if (!unconfined(label))
573 		error = aa_pivotroot(label, old_path, new_path);
574 	aa_put_label(label);
575 
576 	return error;
577 }
578 
579 static int apparmor_getprocattr(struct task_struct *task, char *name,
580 				char **value)
581 {
582 	int error = -ENOENT;
583 	/* released below */
584 	const struct cred *cred = get_task_cred(task);
585 	struct aa_task_ctx *ctx = task_ctx(current);
586 	struct aa_label *label = NULL;
587 
588 	if (strcmp(name, "current") == 0)
589 		label = aa_get_newest_label(cred_label(cred));
590 	else if (strcmp(name, "prev") == 0  && ctx->previous)
591 		label = aa_get_newest_label(ctx->previous);
592 	else if (strcmp(name, "exec") == 0 && ctx->onexec)
593 		label = aa_get_newest_label(ctx->onexec);
594 	else
595 		error = -EINVAL;
596 
597 	if (label)
598 		error = aa_getprocattr(label, value);
599 
600 	aa_put_label(label);
601 	put_cred(cred);
602 
603 	return error;
604 }
605 
606 static int apparmor_setprocattr(const char *name, void *value,
607 				size_t size)
608 {
609 	char *command, *largs = NULL, *args = value;
610 	size_t arg_size;
611 	int error;
612 	DEFINE_AUDIT_DATA(sa, LSM_AUDIT_DATA_NONE, OP_SETPROCATTR);
613 
614 	if (size == 0)
615 		return -EINVAL;
616 
617 	/* AppArmor requires that the buffer must be null terminated atm */
618 	if (args[size - 1] != '\0') {
619 		/* null terminate */
620 		largs = args = kmalloc(size + 1, GFP_KERNEL);
621 		if (!args)
622 			return -ENOMEM;
623 		memcpy(args, value, size);
624 		args[size] = '\0';
625 	}
626 
627 	error = -EINVAL;
628 	args = strim(args);
629 	command = strsep(&args, " ");
630 	if (!args)
631 		goto out;
632 	args = skip_spaces(args);
633 	if (!*args)
634 		goto out;
635 
636 	arg_size = size - (args - (largs ? largs : (char *) value));
637 	if (strcmp(name, "current") == 0) {
638 		if (strcmp(command, "changehat") == 0) {
639 			error = aa_setprocattr_changehat(args, arg_size,
640 							 AA_CHANGE_NOFLAGS);
641 		} else if (strcmp(command, "permhat") == 0) {
642 			error = aa_setprocattr_changehat(args, arg_size,
643 							 AA_CHANGE_TEST);
644 		} else if (strcmp(command, "changeprofile") == 0) {
645 			error = aa_change_profile(args, AA_CHANGE_NOFLAGS);
646 		} else if (strcmp(command, "permprofile") == 0) {
647 			error = aa_change_profile(args, AA_CHANGE_TEST);
648 		} else if (strcmp(command, "stack") == 0) {
649 			error = aa_change_profile(args, AA_CHANGE_STACK);
650 		} else
651 			goto fail;
652 	} else if (strcmp(name, "exec") == 0) {
653 		if (strcmp(command, "exec") == 0)
654 			error = aa_change_profile(args, AA_CHANGE_ONEXEC);
655 		else if (strcmp(command, "stack") == 0)
656 			error = aa_change_profile(args, (AA_CHANGE_ONEXEC |
657 							 AA_CHANGE_STACK));
658 		else
659 			goto fail;
660 	} else
661 		/* only support the "current" and "exec" process attributes */
662 		goto fail;
663 
664 	if (!error)
665 		error = size;
666 out:
667 	kfree(largs);
668 	return error;
669 
670 fail:
671 	aad(&sa)->label = begin_current_label_crit_section();
672 	aad(&sa)->info = name;
673 	aad(&sa)->error = error = -EINVAL;
674 	aa_audit_msg(AUDIT_APPARMOR_DENIED, &sa, NULL);
675 	end_current_label_crit_section(aad(&sa)->label);
676 	goto out;
677 }
678 
679 /**
680  * apparmor_bprm_committing_creds - do task cleanup on committing new creds
681  * @bprm: binprm for the exec  (NOT NULL)
682  */
683 static void apparmor_bprm_committing_creds(struct linux_binprm *bprm)
684 {
685 	struct aa_label *label = aa_current_raw_label();
686 	struct aa_label *new_label = cred_label(bprm->cred);
687 
688 	/* bail out if unconfined or not changing profile */
689 	if ((new_label->proxy == label->proxy) ||
690 	    (unconfined(new_label)))
691 		return;
692 
693 	aa_inherit_files(bprm->cred, current->files);
694 
695 	current->pdeath_signal = 0;
696 
697 	/* reset soft limits and set hard limits for the new label */
698 	__aa_transition_rlimits(label, new_label);
699 }
700 
701 /**
702  * apparmor_bprm_committed_cred - do cleanup after new creds committed
703  * @bprm: binprm for the exec  (NOT NULL)
704  */
705 static void apparmor_bprm_committed_creds(struct linux_binprm *bprm)
706 {
707 	/* clear out temporary/transitional state from the context */
708 	aa_clear_task_ctx_trans(task_ctx(current));
709 
710 	return;
711 }
712 
713 static int apparmor_task_setrlimit(struct task_struct *task,
714 		unsigned int resource, struct rlimit *new_rlim)
715 {
716 	struct aa_label *label = __begin_current_label_crit_section();
717 	int error = 0;
718 
719 	if (!unconfined(label))
720 		error = aa_task_setrlimit(label, task, resource, new_rlim);
721 	__end_current_label_crit_section(label);
722 
723 	return error;
724 }
725 
726 static int apparmor_task_kill(struct task_struct *target, struct siginfo *info,
727 			      int sig, u32 secid)
728 {
729 	struct aa_label *cl, *tl;
730 	int error;
731 
732 	if (secid)
733 		/* TODO: after secid to label mapping is done.
734 		 *  Dealing with USB IO specific behavior
735 		 */
736 		return 0;
737 	cl = __begin_current_label_crit_section();
738 	tl = aa_get_task_label(target);
739 	error = aa_may_signal(cl, tl, sig);
740 	aa_put_label(tl);
741 	__end_current_label_crit_section(cl);
742 
743 	return error;
744 }
745 
746 static struct security_hook_list apparmor_hooks[] __lsm_ro_after_init = {
747 	LSM_HOOK_INIT(ptrace_access_check, apparmor_ptrace_access_check),
748 	LSM_HOOK_INIT(ptrace_traceme, apparmor_ptrace_traceme),
749 	LSM_HOOK_INIT(capget, apparmor_capget),
750 	LSM_HOOK_INIT(capable, apparmor_capable),
751 
752 	LSM_HOOK_INIT(sb_mount, apparmor_sb_mount),
753 	LSM_HOOK_INIT(sb_umount, apparmor_sb_umount),
754 	LSM_HOOK_INIT(sb_pivotroot, apparmor_sb_pivotroot),
755 
756 	LSM_HOOK_INIT(path_link, apparmor_path_link),
757 	LSM_HOOK_INIT(path_unlink, apparmor_path_unlink),
758 	LSM_HOOK_INIT(path_symlink, apparmor_path_symlink),
759 	LSM_HOOK_INIT(path_mkdir, apparmor_path_mkdir),
760 	LSM_HOOK_INIT(path_rmdir, apparmor_path_rmdir),
761 	LSM_HOOK_INIT(path_mknod, apparmor_path_mknod),
762 	LSM_HOOK_INIT(path_rename, apparmor_path_rename),
763 	LSM_HOOK_INIT(path_chmod, apparmor_path_chmod),
764 	LSM_HOOK_INIT(path_chown, apparmor_path_chown),
765 	LSM_HOOK_INIT(path_truncate, apparmor_path_truncate),
766 	LSM_HOOK_INIT(inode_getattr, apparmor_inode_getattr),
767 
768 	LSM_HOOK_INIT(file_open, apparmor_file_open),
769 	LSM_HOOK_INIT(file_receive, apparmor_file_receive),
770 	LSM_HOOK_INIT(file_permission, apparmor_file_permission),
771 	LSM_HOOK_INIT(file_alloc_security, apparmor_file_alloc_security),
772 	LSM_HOOK_INIT(file_free_security, apparmor_file_free_security),
773 	LSM_HOOK_INIT(mmap_file, apparmor_mmap_file),
774 	LSM_HOOK_INIT(file_mprotect, apparmor_file_mprotect),
775 	LSM_HOOK_INIT(file_lock, apparmor_file_lock),
776 
777 	LSM_HOOK_INIT(getprocattr, apparmor_getprocattr),
778 	LSM_HOOK_INIT(setprocattr, apparmor_setprocattr),
779 
780 	LSM_HOOK_INIT(cred_alloc_blank, apparmor_cred_alloc_blank),
781 	LSM_HOOK_INIT(cred_free, apparmor_cred_free),
782 	LSM_HOOK_INIT(cred_prepare, apparmor_cred_prepare),
783 	LSM_HOOK_INIT(cred_transfer, apparmor_cred_transfer),
784 
785 	LSM_HOOK_INIT(bprm_set_creds, apparmor_bprm_set_creds),
786 	LSM_HOOK_INIT(bprm_committing_creds, apparmor_bprm_committing_creds),
787 	LSM_HOOK_INIT(bprm_committed_creds, apparmor_bprm_committed_creds),
788 
789 	LSM_HOOK_INIT(task_free, apparmor_task_free),
790 	LSM_HOOK_INIT(task_alloc, apparmor_task_alloc),
791 	LSM_HOOK_INIT(task_setrlimit, apparmor_task_setrlimit),
792 	LSM_HOOK_INIT(task_kill, apparmor_task_kill),
793 };
794 
795 /*
796  * AppArmor sysfs module parameters
797  */
798 
799 static int param_set_aabool(const char *val, const struct kernel_param *kp);
800 static int param_get_aabool(char *buffer, const struct kernel_param *kp);
801 #define param_check_aabool param_check_bool
802 static const struct kernel_param_ops param_ops_aabool = {
803 	.flags = KERNEL_PARAM_OPS_FL_NOARG,
804 	.set = param_set_aabool,
805 	.get = param_get_aabool
806 };
807 
808 static int param_set_aauint(const char *val, const struct kernel_param *kp);
809 static int param_get_aauint(char *buffer, const struct kernel_param *kp);
810 #define param_check_aauint param_check_uint
811 static const struct kernel_param_ops param_ops_aauint = {
812 	.set = param_set_aauint,
813 	.get = param_get_aauint
814 };
815 
816 static int param_set_aalockpolicy(const char *val, const struct kernel_param *kp);
817 static int param_get_aalockpolicy(char *buffer, const struct kernel_param *kp);
818 #define param_check_aalockpolicy param_check_bool
819 static const struct kernel_param_ops param_ops_aalockpolicy = {
820 	.flags = KERNEL_PARAM_OPS_FL_NOARG,
821 	.set = param_set_aalockpolicy,
822 	.get = param_get_aalockpolicy
823 };
824 
825 static int param_set_audit(const char *val, const struct kernel_param *kp);
826 static int param_get_audit(char *buffer, const struct kernel_param *kp);
827 
828 static int param_set_mode(const char *val, const struct kernel_param *kp);
829 static int param_get_mode(char *buffer, const struct kernel_param *kp);
830 
831 /* Flag values, also controllable via /sys/module/apparmor/parameters
832  * We define special types as we want to do additional mediation.
833  */
834 
835 /* AppArmor global enforcement switch - complain, enforce, kill */
836 enum profile_mode aa_g_profile_mode = APPARMOR_ENFORCE;
837 module_param_call(mode, param_set_mode, param_get_mode,
838 		  &aa_g_profile_mode, S_IRUSR | S_IWUSR);
839 
840 /* whether policy verification hashing is enabled */
841 bool aa_g_hash_policy = IS_ENABLED(CONFIG_SECURITY_APPARMOR_HASH_DEFAULT);
842 #ifdef CONFIG_SECURITY_APPARMOR_HASH
843 module_param_named(hash_policy, aa_g_hash_policy, aabool, S_IRUSR | S_IWUSR);
844 #endif
845 
846 /* Debug mode */
847 bool aa_g_debug = IS_ENABLED(CONFIG_SECURITY_APPARMOR_DEBUG_MESSAGES);
848 module_param_named(debug, aa_g_debug, aabool, S_IRUSR | S_IWUSR);
849 
850 /* Audit mode */
851 enum audit_mode aa_g_audit;
852 module_param_call(audit, param_set_audit, param_get_audit,
853 		  &aa_g_audit, S_IRUSR | S_IWUSR);
854 
855 /* Determines if audit header is included in audited messages.  This
856  * provides more context if the audit daemon is not running
857  */
858 bool aa_g_audit_header = true;
859 module_param_named(audit_header, aa_g_audit_header, aabool,
860 		   S_IRUSR | S_IWUSR);
861 
862 /* lock out loading/removal of policy
863  * TODO: add in at boot loading of policy, which is the only way to
864  *       load policy, if lock_policy is set
865  */
866 bool aa_g_lock_policy;
867 module_param_named(lock_policy, aa_g_lock_policy, aalockpolicy,
868 		   S_IRUSR | S_IWUSR);
869 
870 /* Syscall logging mode */
871 bool aa_g_logsyscall;
872 module_param_named(logsyscall, aa_g_logsyscall, aabool, S_IRUSR | S_IWUSR);
873 
874 /* Maximum pathname length before accesses will start getting rejected */
875 unsigned int aa_g_path_max = 2 * PATH_MAX;
876 module_param_named(path_max, aa_g_path_max, aauint, S_IRUSR);
877 
878 /* Determines how paranoid loading of policy is and how much verification
879  * on the loaded policy is done.
880  * DEPRECATED: read only as strict checking of load is always done now
881  * that none root users (user namespaces) can load policy.
882  */
883 bool aa_g_paranoid_load = true;
884 module_param_named(paranoid_load, aa_g_paranoid_load, aabool, S_IRUGO);
885 
886 /* Boot time disable flag */
887 static bool apparmor_enabled = CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE;
888 module_param_named(enabled, apparmor_enabled, bool, S_IRUGO);
889 
890 static int __init apparmor_enabled_setup(char *str)
891 {
892 	unsigned long enabled;
893 	int error = kstrtoul(str, 0, &enabled);
894 	if (!error)
895 		apparmor_enabled = enabled ? 1 : 0;
896 	return 1;
897 }
898 
899 __setup("apparmor=", apparmor_enabled_setup);
900 
901 /* set global flag turning off the ability to load policy */
902 static int param_set_aalockpolicy(const char *val, const struct kernel_param *kp)
903 {
904 	if (!apparmor_enabled)
905 		return -EINVAL;
906 	if (apparmor_initialized && !policy_admin_capable(NULL))
907 		return -EPERM;
908 	return param_set_bool(val, kp);
909 }
910 
911 static int param_get_aalockpolicy(char *buffer, const struct kernel_param *kp)
912 {
913 	if (!apparmor_enabled)
914 		return -EINVAL;
915 	if (apparmor_initialized && !policy_view_capable(NULL))
916 		return -EPERM;
917 	return param_get_bool(buffer, kp);
918 }
919 
920 static int param_set_aabool(const char *val, const struct kernel_param *kp)
921 {
922 	if (!apparmor_enabled)
923 		return -EINVAL;
924 	if (apparmor_initialized && !policy_admin_capable(NULL))
925 		return -EPERM;
926 	return param_set_bool(val, kp);
927 }
928 
929 static int param_get_aabool(char *buffer, const struct kernel_param *kp)
930 {
931 	if (!apparmor_enabled)
932 		return -EINVAL;
933 	if (apparmor_initialized && !policy_view_capable(NULL))
934 		return -EPERM;
935 	return param_get_bool(buffer, kp);
936 }
937 
938 static int param_set_aauint(const char *val, const struct kernel_param *kp)
939 {
940 	int error;
941 
942 	if (!apparmor_enabled)
943 		return -EINVAL;
944 	/* file is ro but enforce 2nd line check */
945 	if (apparmor_initialized)
946 		return -EPERM;
947 
948 	error = param_set_uint(val, kp);
949 	pr_info("AppArmor: buffer size set to %d bytes\n", aa_g_path_max);
950 
951 	return error;
952 }
953 
954 static int param_get_aauint(char *buffer, const struct kernel_param *kp)
955 {
956 	if (!apparmor_enabled)
957 		return -EINVAL;
958 	if (apparmor_initialized && !policy_view_capable(NULL))
959 		return -EPERM;
960 	return param_get_uint(buffer, kp);
961 }
962 
963 static int param_get_audit(char *buffer, const struct kernel_param *kp)
964 {
965 	if (!apparmor_enabled)
966 		return -EINVAL;
967 	if (apparmor_initialized && !policy_view_capable(NULL))
968 		return -EPERM;
969 	return sprintf(buffer, "%s", audit_mode_names[aa_g_audit]);
970 }
971 
972 static int param_set_audit(const char *val, const struct kernel_param *kp)
973 {
974 	int i;
975 
976 	if (!apparmor_enabled)
977 		return -EINVAL;
978 	if (!val)
979 		return -EINVAL;
980 	if (apparmor_initialized && !policy_admin_capable(NULL))
981 		return -EPERM;
982 
983 	for (i = 0; i < AUDIT_MAX_INDEX; i++) {
984 		if (strcmp(val, audit_mode_names[i]) == 0) {
985 			aa_g_audit = i;
986 			return 0;
987 		}
988 	}
989 
990 	return -EINVAL;
991 }
992 
993 static int param_get_mode(char *buffer, const struct kernel_param *kp)
994 {
995 	if (!apparmor_enabled)
996 		return -EINVAL;
997 	if (apparmor_initialized && !policy_view_capable(NULL))
998 		return -EPERM;
999 
1000 	return sprintf(buffer, "%s", aa_profile_mode_names[aa_g_profile_mode]);
1001 }
1002 
1003 static int param_set_mode(const char *val, const struct kernel_param *kp)
1004 {
1005 	int i;
1006 
1007 	if (!apparmor_enabled)
1008 		return -EINVAL;
1009 	if (!val)
1010 		return -EINVAL;
1011 	if (apparmor_initialized && !policy_admin_capable(NULL))
1012 		return -EPERM;
1013 
1014 	for (i = 0; i < APPARMOR_MODE_NAMES_MAX_INDEX; i++) {
1015 		if (strcmp(val, aa_profile_mode_names[i]) == 0) {
1016 			aa_g_profile_mode = i;
1017 			return 0;
1018 		}
1019 	}
1020 
1021 	return -EINVAL;
1022 }
1023 
1024 /*
1025  * AppArmor init functions
1026  */
1027 
1028 /**
1029  * set_init_ctx - set a task context and profile on the first task.
1030  *
1031  * TODO: allow setting an alternate profile than unconfined
1032  */
1033 static int __init set_init_ctx(void)
1034 {
1035 	struct cred *cred = (struct cred *)current->real_cred;
1036 	struct aa_task_ctx *ctx;
1037 
1038 	ctx = aa_alloc_task_ctx(GFP_KERNEL);
1039 	if (!ctx)
1040 		return -ENOMEM;
1041 
1042 	cred_label(cred) = aa_get_label(ns_unconfined(root_ns));
1043 	task_ctx(current) = ctx;
1044 
1045 	return 0;
1046 }
1047 
1048 static void destroy_buffers(void)
1049 {
1050 	u32 i, j;
1051 
1052 	for_each_possible_cpu(i) {
1053 		for_each_cpu_buffer(j) {
1054 			kfree(per_cpu(aa_buffers, i).buf[j]);
1055 			per_cpu(aa_buffers, i).buf[j] = NULL;
1056 		}
1057 	}
1058 }
1059 
1060 static int __init alloc_buffers(void)
1061 {
1062 	u32 i, j;
1063 
1064 	for_each_possible_cpu(i) {
1065 		for_each_cpu_buffer(j) {
1066 			char *buffer;
1067 
1068 			if (cpu_to_node(i) > num_online_nodes())
1069 				/* fallback to kmalloc for offline nodes */
1070 				buffer = kmalloc(aa_g_path_max, GFP_KERNEL);
1071 			else
1072 				buffer = kmalloc_node(aa_g_path_max, GFP_KERNEL,
1073 						      cpu_to_node(i));
1074 			if (!buffer) {
1075 				destroy_buffers();
1076 				return -ENOMEM;
1077 			}
1078 			per_cpu(aa_buffers, i).buf[j] = buffer;
1079 		}
1080 	}
1081 
1082 	return 0;
1083 }
1084 
1085 #ifdef CONFIG_SYSCTL
1086 static int apparmor_dointvec(struct ctl_table *table, int write,
1087 			     void __user *buffer, size_t *lenp, loff_t *ppos)
1088 {
1089 	if (!policy_admin_capable(NULL))
1090 		return -EPERM;
1091 	if (!apparmor_enabled)
1092 		return -EINVAL;
1093 
1094 	return proc_dointvec(table, write, buffer, lenp, ppos);
1095 }
1096 
1097 static struct ctl_path apparmor_sysctl_path[] = {
1098 	{ .procname = "kernel", },
1099 	{ }
1100 };
1101 
1102 static struct ctl_table apparmor_sysctl_table[] = {
1103 	{
1104 		.procname       = "unprivileged_userns_apparmor_policy",
1105 		.data           = &unprivileged_userns_apparmor_policy,
1106 		.maxlen         = sizeof(int),
1107 		.mode           = 0600,
1108 		.proc_handler   = apparmor_dointvec,
1109 	},
1110 	{ }
1111 };
1112 
1113 static int __init apparmor_init_sysctl(void)
1114 {
1115 	return register_sysctl_paths(apparmor_sysctl_path,
1116 				     apparmor_sysctl_table) ? 0 : -ENOMEM;
1117 }
1118 #else
1119 static inline int apparmor_init_sysctl(void)
1120 {
1121 	return 0;
1122 }
1123 #endif /* CONFIG_SYSCTL */
1124 
1125 static int __init apparmor_init(void)
1126 {
1127 	int error;
1128 
1129 	if (!apparmor_enabled || !security_module_enable("apparmor")) {
1130 		aa_info_message("AppArmor disabled by boot time parameter");
1131 		apparmor_enabled = false;
1132 		return 0;
1133 	}
1134 
1135 	error = aa_setup_dfa_engine();
1136 	if (error) {
1137 		AA_ERROR("Unable to setup dfa engine\n");
1138 		goto alloc_out;
1139 	}
1140 
1141 	error = aa_alloc_root_ns();
1142 	if (error) {
1143 		AA_ERROR("Unable to allocate default profile namespace\n");
1144 		goto alloc_out;
1145 	}
1146 
1147 	error = apparmor_init_sysctl();
1148 	if (error) {
1149 		AA_ERROR("Unable to register sysctls\n");
1150 		goto alloc_out;
1151 
1152 	}
1153 
1154 	error = alloc_buffers();
1155 	if (error) {
1156 		AA_ERROR("Unable to allocate work buffers\n");
1157 		goto buffers_out;
1158 	}
1159 
1160 	error = set_init_ctx();
1161 	if (error) {
1162 		AA_ERROR("Failed to set context on init task\n");
1163 		aa_free_root_ns();
1164 		goto buffers_out;
1165 	}
1166 	security_add_hooks(apparmor_hooks, ARRAY_SIZE(apparmor_hooks),
1167 				"apparmor");
1168 
1169 	/* Report that AppArmor successfully initialized */
1170 	apparmor_initialized = 1;
1171 	if (aa_g_profile_mode == APPARMOR_COMPLAIN)
1172 		aa_info_message("AppArmor initialized: complain mode enabled");
1173 	else if (aa_g_profile_mode == APPARMOR_KILL)
1174 		aa_info_message("AppArmor initialized: kill mode enabled");
1175 	else
1176 		aa_info_message("AppArmor initialized");
1177 
1178 	return error;
1179 
1180 buffers_out:
1181 	destroy_buffers();
1182 
1183 alloc_out:
1184 	aa_destroy_aafs();
1185 	aa_teardown_dfa_engine();
1186 
1187 	apparmor_enabled = false;
1188 	return error;
1189 }
1190 
1191 security_initcall(apparmor_init);
1192