apparmor: use type safe idmapping helpers
[platform/kernel/linux-starfive.git] / security / apparmor / lsm.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * AppArmor security module
4  *
5  * This file contains AppArmor LSM hooks.
6  *
7  * Copyright (C) 1998-2008 Novell/SUSE
8  * Copyright 2009-2010 Canonical Ltd.
9  */
10
11 #include <linux/lsm_hooks.h>
12 #include <linux/moduleparam.h>
13 #include <linux/mm.h>
14 #include <linux/mman.h>
15 #include <linux/mount.h>
16 #include <linux/namei.h>
17 #include <linux/ptrace.h>
18 #include <linux/ctype.h>
19 #include <linux/sysctl.h>
20 #include <linux/audit.h>
21 #include <linux/user_namespace.h>
22 #include <linux/netfilter_ipv4.h>
23 #include <linux/netfilter_ipv6.h>
24 #include <linux/zlib.h>
25 #include <net/sock.h>
26 #include <uapi/linux/mount.h>
27
28 #include "include/apparmor.h"
29 #include "include/apparmorfs.h"
30 #include "include/audit.h"
31 #include "include/capability.h"
32 #include "include/cred.h"
33 #include "include/file.h"
34 #include "include/ipc.h"
35 #include "include/net.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 #include "include/secid.h"
43
44 /* Flag indicating whether initialization completed */
45 int apparmor_initialized;
46
47 union aa_buffer {
48         struct list_head list;
49         char buffer[1];
50 };
51
52 #define RESERVE_COUNT 2
53 static int reserve_count = RESERVE_COUNT;
54 static int buffer_count;
55
56 static LIST_HEAD(aa_global_buffers);
57 static DEFINE_SPINLOCK(aa_buffers_lock);
58
59 /*
60  * LSM hook functions
61  */
62
63 /*
64  * put the associated labels
65  */
66 static void apparmor_cred_free(struct cred *cred)
67 {
68         aa_put_label(cred_label(cred));
69         set_cred_label(cred, NULL);
70 }
71
72 /*
73  * allocate the apparmor part of blank credentials
74  */
75 static int apparmor_cred_alloc_blank(struct cred *cred, gfp_t gfp)
76 {
77         set_cred_label(cred, NULL);
78         return 0;
79 }
80
81 /*
82  * prepare new cred label for modification by prepare_cred block
83  */
84 static int apparmor_cred_prepare(struct cred *new, const struct cred *old,
85                                  gfp_t gfp)
86 {
87         set_cred_label(new, aa_get_newest_label(cred_label(old)));
88         return 0;
89 }
90
91 /*
92  * transfer the apparmor data to a blank set of creds
93  */
94 static void apparmor_cred_transfer(struct cred *new, const struct cred *old)
95 {
96         set_cred_label(new, aa_get_newest_label(cred_label(old)));
97 }
98
99 static void apparmor_task_free(struct task_struct *task)
100 {
101
102         aa_free_task_ctx(task_ctx(task));
103 }
104
105 static int apparmor_task_alloc(struct task_struct *task,
106                                unsigned long clone_flags)
107 {
108         struct aa_task_ctx *new = task_ctx(task);
109
110         aa_dup_task_ctx(new, task_ctx(current));
111
112         return 0;
113 }
114
115 static int apparmor_ptrace_access_check(struct task_struct *child,
116                                         unsigned int mode)
117 {
118         struct aa_label *tracer, *tracee;
119         int error;
120
121         tracer = __begin_current_label_crit_section();
122         tracee = aa_get_task_label(child);
123         error = aa_may_ptrace(tracer, tracee,
124                         (mode & PTRACE_MODE_READ) ? AA_PTRACE_READ
125                                                   : AA_PTRACE_TRACE);
126         aa_put_label(tracee);
127         __end_current_label_crit_section(tracer);
128
129         return error;
130 }
131
132 static int apparmor_ptrace_traceme(struct task_struct *parent)
133 {
134         struct aa_label *tracer, *tracee;
135         int error;
136
137         tracee = __begin_current_label_crit_section();
138         tracer = aa_get_task_label(parent);
139         error = aa_may_ptrace(tracer, tracee, AA_PTRACE_TRACE);
140         aa_put_label(tracer);
141         __end_current_label_crit_section(tracee);
142
143         return error;
144 }
145
146 /* Derived from security/commoncap.c:cap_capget */
147 static int apparmor_capget(struct task_struct *target, kernel_cap_t *effective,
148                            kernel_cap_t *inheritable, kernel_cap_t *permitted)
149 {
150         struct aa_label *label;
151         const struct cred *cred;
152
153         rcu_read_lock();
154         cred = __task_cred(target);
155         label = aa_get_newest_cred_label(cred);
156
157         /*
158          * cap_capget is stacked ahead of this and will
159          * initialize effective and permitted.
160          */
161         if (!unconfined(label)) {
162                 struct aa_profile *profile;
163                 struct label_it i;
164
165                 label_for_each_confined(i, label, profile) {
166                         if (COMPLAIN_MODE(profile))
167                                 continue;
168                         *effective = cap_intersect(*effective,
169                                                    profile->caps.allow);
170                         *permitted = cap_intersect(*permitted,
171                                                    profile->caps.allow);
172                 }
173         }
174         rcu_read_unlock();
175         aa_put_label(label);
176
177         return 0;
178 }
179
180 static int apparmor_capable(const struct cred *cred, struct user_namespace *ns,
181                             int cap, unsigned int opts)
182 {
183         struct aa_label *label;
184         int error = 0;
185
186         label = aa_get_newest_cred_label(cred);
187         if (!unconfined(label))
188                 error = aa_capable(label, cap, opts);
189         aa_put_label(label);
190
191         return error;
192 }
193
194 /**
195  * common_perm - basic common permission check wrapper fn for paths
196  * @op: operation being checked
197  * @path: path to check permission of  (NOT NULL)
198  * @mask: requested permissions mask
199  * @cond: conditional info for the permission request  (NOT NULL)
200  *
201  * Returns: %0 else error code if error or permission denied
202  */
203 static int common_perm(const char *op, const struct path *path, u32 mask,
204                        struct path_cond *cond)
205 {
206         struct aa_label *label;
207         int error = 0;
208
209         label = __begin_current_label_crit_section();
210         if (!unconfined(label))
211                 error = aa_path_perm(op, label, path, 0, mask, cond);
212         __end_current_label_crit_section(label);
213
214         return error;
215 }
216
217 /**
218  * common_perm_cond - common permission wrapper around inode cond
219  * @op: operation being checked
220  * @path: location to check (NOT NULL)
221  * @mask: requested permissions mask
222  *
223  * Returns: %0 else error code if error or permission denied
224  */
225 static int common_perm_cond(const char *op, const struct path *path, u32 mask)
226 {
227         struct user_namespace *mnt_userns = mnt_user_ns(path->mnt);
228         vfsuid_t vfsuid = i_uid_into_vfsuid(mnt_userns,
229                                             d_backing_inode(path->dentry));
230         struct path_cond cond = {
231                 vfsuid_into_kuid(vfsuid),
232                 d_backing_inode(path->dentry)->i_mode
233         };
234
235         if (!path_mediated_fs(path->dentry))
236                 return 0;
237
238         return common_perm(op, path, mask, &cond);
239 }
240
241 /**
242  * common_perm_dir_dentry - common permission wrapper when path is dir, dentry
243  * @op: operation being checked
244  * @dir: directory of the dentry  (NOT NULL)
245  * @dentry: dentry to check  (NOT NULL)
246  * @mask: requested permissions mask
247  * @cond: conditional info for the permission request  (NOT NULL)
248  *
249  * Returns: %0 else error code if error or permission denied
250  */
251 static int common_perm_dir_dentry(const char *op, const struct path *dir,
252                                   struct dentry *dentry, u32 mask,
253                                   struct path_cond *cond)
254 {
255         struct path path = { .mnt = dir->mnt, .dentry = dentry };
256
257         return common_perm(op, &path, mask, cond);
258 }
259
260 /**
261  * common_perm_rm - common permission wrapper for operations doing rm
262  * @op: operation being checked
263  * @dir: directory that the dentry is in  (NOT NULL)
264  * @dentry: dentry being rm'd  (NOT NULL)
265  * @mask: requested permission mask
266  *
267  * Returns: %0 else error code if error or permission denied
268  */
269 static int common_perm_rm(const char *op, const struct path *dir,
270                           struct dentry *dentry, u32 mask)
271 {
272         struct inode *inode = d_backing_inode(dentry);
273         struct user_namespace *mnt_userns = mnt_user_ns(dir->mnt);
274         struct path_cond cond = { };
275         vfsuid_t vfsuid;
276
277         if (!inode || !path_mediated_fs(dentry))
278                 return 0;
279
280         vfsuid = i_uid_into_vfsuid(mnt_userns, inode);
281         cond.uid = vfsuid_into_kuid(vfsuid);
282         cond.mode = inode->i_mode;
283
284         return common_perm_dir_dentry(op, dir, dentry, mask, &cond);
285 }
286
287 /**
288  * common_perm_create - common permission wrapper for operations doing create
289  * @op: operation being checked
290  * @dir: directory that dentry will be created in  (NOT NULL)
291  * @dentry: dentry to create   (NOT NULL)
292  * @mask: request permission mask
293  * @mode: created file mode
294  *
295  * Returns: %0 else error code if error or permission denied
296  */
297 static int common_perm_create(const char *op, const struct path *dir,
298                               struct dentry *dentry, u32 mask, umode_t mode)
299 {
300         struct path_cond cond = { current_fsuid(), mode };
301
302         if (!path_mediated_fs(dir->dentry))
303                 return 0;
304
305         return common_perm_dir_dentry(op, dir, dentry, mask, &cond);
306 }
307
308 static int apparmor_path_unlink(const struct path *dir, struct dentry *dentry)
309 {
310         return common_perm_rm(OP_UNLINK, dir, dentry, AA_MAY_DELETE);
311 }
312
313 static int apparmor_path_mkdir(const struct path *dir, struct dentry *dentry,
314                                umode_t mode)
315 {
316         return common_perm_create(OP_MKDIR, dir, dentry, AA_MAY_CREATE,
317                                   S_IFDIR);
318 }
319
320 static int apparmor_path_rmdir(const struct path *dir, struct dentry *dentry)
321 {
322         return common_perm_rm(OP_RMDIR, dir, dentry, AA_MAY_DELETE);
323 }
324
325 static int apparmor_path_mknod(const struct path *dir, struct dentry *dentry,
326                                umode_t mode, unsigned int dev)
327 {
328         return common_perm_create(OP_MKNOD, dir, dentry, AA_MAY_CREATE, mode);
329 }
330
331 static int apparmor_path_truncate(const struct path *path)
332 {
333         return common_perm_cond(OP_TRUNC, path, MAY_WRITE | AA_MAY_SETATTR);
334 }
335
336 static int apparmor_path_symlink(const struct path *dir, struct dentry *dentry,
337                                  const char *old_name)
338 {
339         return common_perm_create(OP_SYMLINK, dir, dentry, AA_MAY_CREATE,
340                                   S_IFLNK);
341 }
342
343 static int apparmor_path_link(struct dentry *old_dentry, const struct path *new_dir,
344                               struct dentry *new_dentry)
345 {
346         struct aa_label *label;
347         int error = 0;
348
349         if (!path_mediated_fs(old_dentry))
350                 return 0;
351
352         label = begin_current_label_crit_section();
353         if (!unconfined(label))
354                 error = aa_path_link(label, old_dentry, new_dir, new_dentry);
355         end_current_label_crit_section(label);
356
357         return error;
358 }
359
360 static int apparmor_path_rename(const struct path *old_dir, struct dentry *old_dentry,
361                                 const struct path *new_dir, struct dentry *new_dentry,
362                                 const unsigned int flags)
363 {
364         struct aa_label *label;
365         int error = 0;
366
367         if (!path_mediated_fs(old_dentry))
368                 return 0;
369         if ((flags & RENAME_EXCHANGE) && !path_mediated_fs(new_dentry))
370                 return 0;
371
372         label = begin_current_label_crit_section();
373         if (!unconfined(label)) {
374                 struct user_namespace *mnt_userns = mnt_user_ns(old_dir->mnt);
375                 vfsuid_t vfsuid;
376                 struct path old_path = { .mnt = old_dir->mnt,
377                                          .dentry = old_dentry };
378                 struct path new_path = { .mnt = new_dir->mnt,
379                                          .dentry = new_dentry };
380                 struct path_cond cond = {
381                         .mode = d_backing_inode(old_dentry)->i_mode
382                 };
383                 vfsuid = i_uid_into_vfsuid(mnt_userns, d_backing_inode(old_dentry));
384                 cond.uid = vfsuid_into_kuid(vfsuid);
385
386                 if (flags & RENAME_EXCHANGE) {
387                         struct path_cond cond_exchange = {
388                                 .mode = d_backing_inode(new_dentry)->i_mode,
389                         };
390                         vfsuid = i_uid_into_vfsuid(mnt_userns, d_backing_inode(old_dentry));
391                         cond_exchange.uid = vfsuid_into_kuid(vfsuid);
392
393                         error = aa_path_perm(OP_RENAME_SRC, label, &new_path, 0,
394                                              MAY_READ | AA_MAY_GETATTR | MAY_WRITE |
395                                              AA_MAY_SETATTR | AA_MAY_DELETE,
396                                              &cond_exchange);
397                         if (!error)
398                                 error = aa_path_perm(OP_RENAME_DEST, label, &old_path,
399                                                      0, MAY_WRITE | AA_MAY_SETATTR |
400                                                      AA_MAY_CREATE, &cond_exchange);
401                 }
402
403                 if (!error)
404                         error = aa_path_perm(OP_RENAME_SRC, label, &old_path, 0,
405                                              MAY_READ | AA_MAY_GETATTR | MAY_WRITE |
406                                              AA_MAY_SETATTR | AA_MAY_DELETE,
407                                              &cond);
408                 if (!error)
409                         error = aa_path_perm(OP_RENAME_DEST, label, &new_path,
410                                              0, MAY_WRITE | AA_MAY_SETATTR |
411                                              AA_MAY_CREATE, &cond);
412
413         }
414         end_current_label_crit_section(label);
415
416         return error;
417 }
418
419 static int apparmor_path_chmod(const struct path *path, umode_t mode)
420 {
421         return common_perm_cond(OP_CHMOD, path, AA_MAY_CHMOD);
422 }
423
424 static int apparmor_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
425 {
426         return common_perm_cond(OP_CHOWN, path, AA_MAY_CHOWN);
427 }
428
429 static int apparmor_inode_getattr(const struct path *path)
430 {
431         return common_perm_cond(OP_GETATTR, path, AA_MAY_GETATTR);
432 }
433
434 static int apparmor_file_open(struct file *file)
435 {
436         struct aa_file_ctx *fctx = file_ctx(file);
437         struct aa_label *label;
438         int error = 0;
439
440         if (!path_mediated_fs(file->f_path.dentry))
441                 return 0;
442
443         /* If in exec, permission is handled by bprm hooks.
444          * Cache permissions granted by the previous exec check, with
445          * implicit read and executable mmap which are required to
446          * actually execute the image.
447          */
448         if (current->in_execve) {
449                 fctx->allow = MAY_EXEC | MAY_READ | AA_EXEC_MMAP;
450                 return 0;
451         }
452
453         label = aa_get_newest_cred_label(file->f_cred);
454         if (!unconfined(label)) {
455                 struct user_namespace *mnt_userns = file_mnt_user_ns(file);
456                 struct inode *inode = file_inode(file);
457                 vfsuid_t vfsuid;
458                 struct path_cond cond = {
459                         .mode = inode->i_mode,
460                 };
461                 vfsuid = i_uid_into_vfsuid(mnt_userns, inode);
462                 cond.uid = vfsuid_into_kuid(vfsuid);
463
464                 error = aa_path_perm(OP_OPEN, label, &file->f_path, 0,
465                                      aa_map_file_to_perms(file), &cond);
466                 /* todo cache full allowed permissions set and state */
467                 fctx->allow = aa_map_file_to_perms(file);
468         }
469         aa_put_label(label);
470
471         return error;
472 }
473
474 static int apparmor_file_alloc_security(struct file *file)
475 {
476         struct aa_file_ctx *ctx = file_ctx(file);
477         struct aa_label *label = begin_current_label_crit_section();
478
479         spin_lock_init(&ctx->lock);
480         rcu_assign_pointer(ctx->label, aa_get_label(label));
481         end_current_label_crit_section(label);
482         return 0;
483 }
484
485 static void apparmor_file_free_security(struct file *file)
486 {
487         struct aa_file_ctx *ctx = file_ctx(file);
488
489         if (ctx)
490                 aa_put_label(rcu_access_pointer(ctx->label));
491 }
492
493 static int common_file_perm(const char *op, struct file *file, u32 mask,
494                             bool in_atomic)
495 {
496         struct aa_label *label;
497         int error = 0;
498
499         /* don't reaudit files closed during inheritance */
500         if (file->f_path.dentry == aa_null.dentry)
501                 return -EACCES;
502
503         label = __begin_current_label_crit_section();
504         error = aa_file_perm(op, label, file, mask, in_atomic);
505         __end_current_label_crit_section(label);
506
507         return error;
508 }
509
510 static int apparmor_file_receive(struct file *file)
511 {
512         return common_file_perm(OP_FRECEIVE, file, aa_map_file_to_perms(file),
513                                 false);
514 }
515
516 static int apparmor_file_permission(struct file *file, int mask)
517 {
518         return common_file_perm(OP_FPERM, file, mask, false);
519 }
520
521 static int apparmor_file_lock(struct file *file, unsigned int cmd)
522 {
523         u32 mask = AA_MAY_LOCK;
524
525         if (cmd == F_WRLCK)
526                 mask |= MAY_WRITE;
527
528         return common_file_perm(OP_FLOCK, file, mask, false);
529 }
530
531 static int common_mmap(const char *op, struct file *file, unsigned long prot,
532                        unsigned long flags, bool in_atomic)
533 {
534         int mask = 0;
535
536         if (!file || !file_ctx(file))
537                 return 0;
538
539         if (prot & PROT_READ)
540                 mask |= MAY_READ;
541         /*
542          * Private mappings don't require write perms since they don't
543          * write back to the files
544          */
545         if ((prot & PROT_WRITE) && !(flags & MAP_PRIVATE))
546                 mask |= MAY_WRITE;
547         if (prot & PROT_EXEC)
548                 mask |= AA_EXEC_MMAP;
549
550         return common_file_perm(op, file, mask, in_atomic);
551 }
552
553 static int apparmor_mmap_file(struct file *file, unsigned long reqprot,
554                               unsigned long prot, unsigned long flags)
555 {
556         return common_mmap(OP_FMMAP, file, prot, flags, GFP_ATOMIC);
557 }
558
559 static int apparmor_file_mprotect(struct vm_area_struct *vma,
560                                   unsigned long reqprot, unsigned long prot)
561 {
562         return common_mmap(OP_FMPROT, vma->vm_file, prot,
563                            !(vma->vm_flags & VM_SHARED) ? MAP_PRIVATE : 0,
564                            false);
565 }
566
567 static int apparmor_sb_mount(const char *dev_name, const struct path *path,
568                              const char *type, unsigned long flags, void *data)
569 {
570         struct aa_label *label;
571         int error = 0;
572
573         /* Discard magic */
574         if ((flags & MS_MGC_MSK) == MS_MGC_VAL)
575                 flags &= ~MS_MGC_MSK;
576
577         flags &= ~AA_MS_IGNORE_MASK;
578
579         label = __begin_current_label_crit_section();
580         if (!unconfined(label)) {
581                 if (flags & MS_REMOUNT)
582                         error = aa_remount(label, path, flags, data);
583                 else if (flags & MS_BIND)
584                         error = aa_bind_mount(label, path, dev_name, flags);
585                 else if (flags & (MS_SHARED | MS_PRIVATE | MS_SLAVE |
586                                   MS_UNBINDABLE))
587                         error = aa_mount_change_type(label, path, flags);
588                 else if (flags & MS_MOVE)
589                         error = aa_move_mount(label, path, dev_name);
590                 else
591                         error = aa_new_mount(label, dev_name, path, type,
592                                              flags, data);
593         }
594         __end_current_label_crit_section(label);
595
596         return error;
597 }
598
599 static int apparmor_sb_umount(struct vfsmount *mnt, int flags)
600 {
601         struct aa_label *label;
602         int error = 0;
603
604         label = __begin_current_label_crit_section();
605         if (!unconfined(label))
606                 error = aa_umount(label, mnt, flags);
607         __end_current_label_crit_section(label);
608
609         return error;
610 }
611
612 static int apparmor_sb_pivotroot(const struct path *old_path,
613                                  const struct path *new_path)
614 {
615         struct aa_label *label;
616         int error = 0;
617
618         label = aa_get_current_label();
619         if (!unconfined(label))
620                 error = aa_pivotroot(label, old_path, new_path);
621         aa_put_label(label);
622
623         return error;
624 }
625
626 static int apparmor_getprocattr(struct task_struct *task, const char *name,
627                                 char **value)
628 {
629         int error = -ENOENT;
630         /* released below */
631         const struct cred *cred = get_task_cred(task);
632         struct aa_task_ctx *ctx = task_ctx(current);
633         struct aa_label *label = NULL;
634
635         if (strcmp(name, "current") == 0)
636                 label = aa_get_newest_label(cred_label(cred));
637         else if (strcmp(name, "prev") == 0  && ctx->previous)
638                 label = aa_get_newest_label(ctx->previous);
639         else if (strcmp(name, "exec") == 0 && ctx->onexec)
640                 label = aa_get_newest_label(ctx->onexec);
641         else
642                 error = -EINVAL;
643
644         if (label)
645                 error = aa_getprocattr(label, value);
646
647         aa_put_label(label);
648         put_cred(cred);
649
650         return error;
651 }
652
653 static int apparmor_setprocattr(const char *name, void *value,
654                                 size_t size)
655 {
656         char *command, *largs = NULL, *args = value;
657         size_t arg_size;
658         int error;
659         DEFINE_AUDIT_DATA(sa, LSM_AUDIT_DATA_NONE, OP_SETPROCATTR);
660
661         if (size == 0)
662                 return -EINVAL;
663
664         /* AppArmor requires that the buffer must be null terminated atm */
665         if (args[size - 1] != '\0') {
666                 /* null terminate */
667                 largs = args = kmalloc(size + 1, GFP_KERNEL);
668                 if (!args)
669                         return -ENOMEM;
670                 memcpy(args, value, size);
671                 args[size] = '\0';
672         }
673
674         error = -EINVAL;
675         args = strim(args);
676         command = strsep(&args, " ");
677         if (!args)
678                 goto out;
679         args = skip_spaces(args);
680         if (!*args)
681                 goto out;
682
683         arg_size = size - (args - (largs ? largs : (char *) value));
684         if (strcmp(name, "current") == 0) {
685                 if (strcmp(command, "changehat") == 0) {
686                         error = aa_setprocattr_changehat(args, arg_size,
687                                                          AA_CHANGE_NOFLAGS);
688                 } else if (strcmp(command, "permhat") == 0) {
689                         error = aa_setprocattr_changehat(args, arg_size,
690                                                          AA_CHANGE_TEST);
691                 } else if (strcmp(command, "changeprofile") == 0) {
692                         error = aa_change_profile(args, AA_CHANGE_NOFLAGS);
693                 } else if (strcmp(command, "permprofile") == 0) {
694                         error = aa_change_profile(args, AA_CHANGE_TEST);
695                 } else if (strcmp(command, "stack") == 0) {
696                         error = aa_change_profile(args, AA_CHANGE_STACK);
697                 } else
698                         goto fail;
699         } else if (strcmp(name, "exec") == 0) {
700                 if (strcmp(command, "exec") == 0)
701                         error = aa_change_profile(args, AA_CHANGE_ONEXEC);
702                 else if (strcmp(command, "stack") == 0)
703                         error = aa_change_profile(args, (AA_CHANGE_ONEXEC |
704                                                          AA_CHANGE_STACK));
705                 else
706                         goto fail;
707         } else
708                 /* only support the "current" and "exec" process attributes */
709                 goto fail;
710
711         if (!error)
712                 error = size;
713 out:
714         kfree(largs);
715         return error;
716
717 fail:
718         aad(&sa)->label = begin_current_label_crit_section();
719         aad(&sa)->info = name;
720         aad(&sa)->error = error = -EINVAL;
721         aa_audit_msg(AUDIT_APPARMOR_DENIED, &sa, NULL);
722         end_current_label_crit_section(aad(&sa)->label);
723         goto out;
724 }
725
726 /**
727  * apparmor_bprm_committing_creds - do task cleanup on committing new creds
728  * @bprm: binprm for the exec  (NOT NULL)
729  */
730 static void apparmor_bprm_committing_creds(struct linux_binprm *bprm)
731 {
732         struct aa_label *label = aa_current_raw_label();
733         struct aa_label *new_label = cred_label(bprm->cred);
734
735         /* bail out if unconfined or not changing profile */
736         if ((new_label->proxy == label->proxy) ||
737             (unconfined(new_label)))
738                 return;
739
740         aa_inherit_files(bprm->cred, current->files);
741
742         current->pdeath_signal = 0;
743
744         /* reset soft limits and set hard limits for the new label */
745         __aa_transition_rlimits(label, new_label);
746 }
747
748 /**
749  * apparmor_bprm_committed_cred - do cleanup after new creds committed
750  * @bprm: binprm for the exec  (NOT NULL)
751  */
752 static void apparmor_bprm_committed_creds(struct linux_binprm *bprm)
753 {
754         /* clear out temporary/transitional state from the context */
755         aa_clear_task_ctx_trans(task_ctx(current));
756
757         return;
758 }
759
760 static void apparmor_current_getsecid_subj(u32 *secid)
761 {
762         struct aa_label *label = aa_get_current_label();
763         *secid = label->secid;
764         aa_put_label(label);
765 }
766
767 static void apparmor_task_getsecid_obj(struct task_struct *p, u32 *secid)
768 {
769         struct aa_label *label = aa_get_task_label(p);
770         *secid = label->secid;
771         aa_put_label(label);
772 }
773
774 static int apparmor_task_setrlimit(struct task_struct *task,
775                 unsigned int resource, struct rlimit *new_rlim)
776 {
777         struct aa_label *label = __begin_current_label_crit_section();
778         int error = 0;
779
780         if (!unconfined(label))
781                 error = aa_task_setrlimit(label, task, resource, new_rlim);
782         __end_current_label_crit_section(label);
783
784         return error;
785 }
786
787 static int apparmor_task_kill(struct task_struct *target, struct kernel_siginfo *info,
788                               int sig, const struct cred *cred)
789 {
790         struct aa_label *cl, *tl;
791         int error;
792
793         if (cred) {
794                 /*
795                  * Dealing with USB IO specific behavior
796                  */
797                 cl = aa_get_newest_cred_label(cred);
798                 tl = aa_get_task_label(target);
799                 error = aa_may_signal(cl, tl, sig);
800                 aa_put_label(cl);
801                 aa_put_label(tl);
802                 return error;
803         }
804
805         cl = __begin_current_label_crit_section();
806         tl = aa_get_task_label(target);
807         error = aa_may_signal(cl, tl, sig);
808         aa_put_label(tl);
809         __end_current_label_crit_section(cl);
810
811         return error;
812 }
813
814 /**
815  * apparmor_sk_alloc_security - allocate and attach the sk_security field
816  */
817 static int apparmor_sk_alloc_security(struct sock *sk, int family, gfp_t flags)
818 {
819         struct aa_sk_ctx *ctx;
820
821         ctx = kzalloc(sizeof(*ctx), flags);
822         if (!ctx)
823                 return -ENOMEM;
824
825         SK_CTX(sk) = ctx;
826
827         return 0;
828 }
829
830 /**
831  * apparmor_sk_free_security - free the sk_security field
832  */
833 static void apparmor_sk_free_security(struct sock *sk)
834 {
835         struct aa_sk_ctx *ctx = SK_CTX(sk);
836
837         SK_CTX(sk) = NULL;
838         aa_put_label(ctx->label);
839         aa_put_label(ctx->peer);
840         kfree(ctx);
841 }
842
843 /**
844  * apparmor_sk_clone_security - clone the sk_security field
845  */
846 static void apparmor_sk_clone_security(const struct sock *sk,
847                                        struct sock *newsk)
848 {
849         struct aa_sk_ctx *ctx = SK_CTX(sk);
850         struct aa_sk_ctx *new = SK_CTX(newsk);
851
852         if (new->label)
853                 aa_put_label(new->label);
854         new->label = aa_get_label(ctx->label);
855
856         if (new->peer)
857                 aa_put_label(new->peer);
858         new->peer = aa_get_label(ctx->peer);
859 }
860
861 /**
862  * apparmor_socket_create - check perms before creating a new socket
863  */
864 static int apparmor_socket_create(int family, int type, int protocol, int kern)
865 {
866         struct aa_label *label;
867         int error = 0;
868
869         AA_BUG(in_interrupt());
870
871         label = begin_current_label_crit_section();
872         if (!(kern || unconfined(label)))
873                 error = af_select(family,
874                                   create_perm(label, family, type, protocol),
875                                   aa_af_perm(label, OP_CREATE, AA_MAY_CREATE,
876                                              family, type, protocol));
877         end_current_label_crit_section(label);
878
879         return error;
880 }
881
882 /**
883  * apparmor_socket_post_create - setup the per-socket security struct
884  *
885  * Note:
886  * -   kernel sockets currently labeled unconfined but we may want to
887  *     move to a special kernel label
888  * -   socket may not have sk here if created with sock_create_lite or
889  *     sock_alloc. These should be accept cases which will be handled in
890  *     sock_graft.
891  */
892 static int apparmor_socket_post_create(struct socket *sock, int family,
893                                        int type, int protocol, int kern)
894 {
895         struct aa_label *label;
896
897         if (kern) {
898                 label = aa_get_label(kernel_t);
899         } else
900                 label = aa_get_current_label();
901
902         if (sock->sk) {
903                 struct aa_sk_ctx *ctx = SK_CTX(sock->sk);
904
905                 aa_put_label(ctx->label);
906                 ctx->label = aa_get_label(label);
907         }
908         aa_put_label(label);
909
910         return 0;
911 }
912
913 /**
914  * apparmor_socket_bind - check perms before bind addr to socket
915  */
916 static int apparmor_socket_bind(struct socket *sock,
917                                 struct sockaddr *address, int addrlen)
918 {
919         AA_BUG(!sock);
920         AA_BUG(!sock->sk);
921         AA_BUG(!address);
922         AA_BUG(in_interrupt());
923
924         return af_select(sock->sk->sk_family,
925                          bind_perm(sock, address, addrlen),
926                          aa_sk_perm(OP_BIND, AA_MAY_BIND, sock->sk));
927 }
928
929 /**
930  * apparmor_socket_connect - check perms before connecting @sock to @address
931  */
932 static int apparmor_socket_connect(struct socket *sock,
933                                    struct sockaddr *address, int addrlen)
934 {
935         AA_BUG(!sock);
936         AA_BUG(!sock->sk);
937         AA_BUG(!address);
938         AA_BUG(in_interrupt());
939
940         return af_select(sock->sk->sk_family,
941                          connect_perm(sock, address, addrlen),
942                          aa_sk_perm(OP_CONNECT, AA_MAY_CONNECT, sock->sk));
943 }
944
945 /**
946  * apparmor_socket_listen - check perms before allowing listen
947  */
948 static int apparmor_socket_listen(struct socket *sock, int backlog)
949 {
950         AA_BUG(!sock);
951         AA_BUG(!sock->sk);
952         AA_BUG(in_interrupt());
953
954         return af_select(sock->sk->sk_family,
955                          listen_perm(sock, backlog),
956                          aa_sk_perm(OP_LISTEN, AA_MAY_LISTEN, sock->sk));
957 }
958
959 /**
960  * apparmor_socket_accept - check perms before accepting a new connection.
961  *
962  * Note: while @newsock is created and has some information, the accept
963  *       has not been done.
964  */
965 static int apparmor_socket_accept(struct socket *sock, struct socket *newsock)
966 {
967         AA_BUG(!sock);
968         AA_BUG(!sock->sk);
969         AA_BUG(!newsock);
970         AA_BUG(in_interrupt());
971
972         return af_select(sock->sk->sk_family,
973                          accept_perm(sock, newsock),
974                          aa_sk_perm(OP_ACCEPT, AA_MAY_ACCEPT, sock->sk));
975 }
976
977 static int aa_sock_msg_perm(const char *op, u32 request, struct socket *sock,
978                             struct msghdr *msg, int size)
979 {
980         AA_BUG(!sock);
981         AA_BUG(!sock->sk);
982         AA_BUG(!msg);
983         AA_BUG(in_interrupt());
984
985         return af_select(sock->sk->sk_family,
986                          msg_perm(op, request, sock, msg, size),
987                          aa_sk_perm(op, request, sock->sk));
988 }
989
990 /**
991  * apparmor_socket_sendmsg - check perms before sending msg to another socket
992  */
993 static int apparmor_socket_sendmsg(struct socket *sock,
994                                    struct msghdr *msg, int size)
995 {
996         return aa_sock_msg_perm(OP_SENDMSG, AA_MAY_SEND, sock, msg, size);
997 }
998
999 /**
1000  * apparmor_socket_recvmsg - check perms before receiving a message
1001  */
1002 static int apparmor_socket_recvmsg(struct socket *sock,
1003                                    struct msghdr *msg, int size, int flags)
1004 {
1005         return aa_sock_msg_perm(OP_RECVMSG, AA_MAY_RECEIVE, sock, msg, size);
1006 }
1007
1008 /* revaliation, get/set attr, shutdown */
1009 static int aa_sock_perm(const char *op, u32 request, struct socket *sock)
1010 {
1011         AA_BUG(!sock);
1012         AA_BUG(!sock->sk);
1013         AA_BUG(in_interrupt());
1014
1015         return af_select(sock->sk->sk_family,
1016                          sock_perm(op, request, sock),
1017                          aa_sk_perm(op, request, sock->sk));
1018 }
1019
1020 /**
1021  * apparmor_socket_getsockname - check perms before getting the local address
1022  */
1023 static int apparmor_socket_getsockname(struct socket *sock)
1024 {
1025         return aa_sock_perm(OP_GETSOCKNAME, AA_MAY_GETATTR, sock);
1026 }
1027
1028 /**
1029  * apparmor_socket_getpeername - check perms before getting remote address
1030  */
1031 static int apparmor_socket_getpeername(struct socket *sock)
1032 {
1033         return aa_sock_perm(OP_GETPEERNAME, AA_MAY_GETATTR, sock);
1034 }
1035
1036 /* revaliation, get/set attr, opt */
1037 static int aa_sock_opt_perm(const char *op, u32 request, struct socket *sock,
1038                             int level, int optname)
1039 {
1040         AA_BUG(!sock);
1041         AA_BUG(!sock->sk);
1042         AA_BUG(in_interrupt());
1043
1044         return af_select(sock->sk->sk_family,
1045                          opt_perm(op, request, sock, level, optname),
1046                          aa_sk_perm(op, request, sock->sk));
1047 }
1048
1049 /**
1050  * apparmor_socket_getsockopt - check perms before getting socket options
1051  */
1052 static int apparmor_socket_getsockopt(struct socket *sock, int level,
1053                                       int optname)
1054 {
1055         return aa_sock_opt_perm(OP_GETSOCKOPT, AA_MAY_GETOPT, sock,
1056                                 level, optname);
1057 }
1058
1059 /**
1060  * apparmor_socket_setsockopt - check perms before setting socket options
1061  */
1062 static int apparmor_socket_setsockopt(struct socket *sock, int level,
1063                                       int optname)
1064 {
1065         return aa_sock_opt_perm(OP_SETSOCKOPT, AA_MAY_SETOPT, sock,
1066                                 level, optname);
1067 }
1068
1069 /**
1070  * apparmor_socket_shutdown - check perms before shutting down @sock conn
1071  */
1072 static int apparmor_socket_shutdown(struct socket *sock, int how)
1073 {
1074         return aa_sock_perm(OP_SHUTDOWN, AA_MAY_SHUTDOWN, sock);
1075 }
1076
1077 #ifdef CONFIG_NETWORK_SECMARK
1078 /**
1079  * apparmor_socket_sock_rcv_skb - check perms before associating skb to sk
1080  *
1081  * Note: can not sleep may be called with locks held
1082  *
1083  * dont want protocol specific in __skb_recv_datagram()
1084  * to deny an incoming connection  socket_sock_rcv_skb()
1085  */
1086 static int apparmor_socket_sock_rcv_skb(struct sock *sk, struct sk_buff *skb)
1087 {
1088         struct aa_sk_ctx *ctx = SK_CTX(sk);
1089
1090         if (!skb->secmark)
1091                 return 0;
1092
1093         return apparmor_secmark_check(ctx->label, OP_RECVMSG, AA_MAY_RECEIVE,
1094                                       skb->secmark, sk);
1095 }
1096 #endif
1097
1098
1099 static struct aa_label *sk_peer_label(struct sock *sk)
1100 {
1101         struct aa_sk_ctx *ctx = SK_CTX(sk);
1102
1103         if (ctx->peer)
1104                 return ctx->peer;
1105
1106         return ERR_PTR(-ENOPROTOOPT);
1107 }
1108
1109 /**
1110  * apparmor_socket_getpeersec_stream - get security context of peer
1111  *
1112  * Note: for tcp only valid if using ipsec or cipso on lan
1113  */
1114 static int apparmor_socket_getpeersec_stream(struct socket *sock,
1115                                              char __user *optval,
1116                                              int __user *optlen,
1117                                              unsigned int len)
1118 {
1119         char *name;
1120         int slen, error = 0;
1121         struct aa_label *label;
1122         struct aa_label *peer;
1123
1124         label = begin_current_label_crit_section();
1125         peer = sk_peer_label(sock->sk);
1126         if (IS_ERR(peer)) {
1127                 error = PTR_ERR(peer);
1128                 goto done;
1129         }
1130         slen = aa_label_asxprint(&name, labels_ns(label), peer,
1131                                  FLAG_SHOW_MODE | FLAG_VIEW_SUBNS |
1132                                  FLAG_HIDDEN_UNCONFINED, GFP_KERNEL);
1133         /* don't include terminating \0 in slen, it breaks some apps */
1134         if (slen < 0) {
1135                 error = -ENOMEM;
1136         } else {
1137                 if (slen > len) {
1138                         error = -ERANGE;
1139                 } else if (copy_to_user(optval, name, slen)) {
1140                         error = -EFAULT;
1141                         goto out;
1142                 }
1143                 if (put_user(slen, optlen))
1144                         error = -EFAULT;
1145 out:
1146                 kfree(name);
1147
1148         }
1149
1150 done:
1151         end_current_label_crit_section(label);
1152
1153         return error;
1154 }
1155
1156 /**
1157  * apparmor_socket_getpeersec_dgram - get security label of packet
1158  * @sock: the peer socket
1159  * @skb: packet data
1160  * @secid: pointer to where to put the secid of the packet
1161  *
1162  * Sets the netlabel socket state on sk from parent
1163  */
1164 static int apparmor_socket_getpeersec_dgram(struct socket *sock,
1165                                             struct sk_buff *skb, u32 *secid)
1166
1167 {
1168         /* TODO: requires secid support */
1169         return -ENOPROTOOPT;
1170 }
1171
1172 /**
1173  * apparmor_sock_graft - Initialize newly created socket
1174  * @sk: child sock
1175  * @parent: parent socket
1176  *
1177  * Note: could set off of SOCK_CTX(parent) but need to track inode and we can
1178  *       just set sk security information off of current creating process label
1179  *       Labeling of sk for accept case - probably should be sock based
1180  *       instead of task, because of the case where an implicitly labeled
1181  *       socket is shared by different tasks.
1182  */
1183 static void apparmor_sock_graft(struct sock *sk, struct socket *parent)
1184 {
1185         struct aa_sk_ctx *ctx = SK_CTX(sk);
1186
1187         if (!ctx->label)
1188                 ctx->label = aa_get_current_label();
1189 }
1190
1191 #ifdef CONFIG_NETWORK_SECMARK
1192 static int apparmor_inet_conn_request(const struct sock *sk, struct sk_buff *skb,
1193                                       struct request_sock *req)
1194 {
1195         struct aa_sk_ctx *ctx = SK_CTX(sk);
1196
1197         if (!skb->secmark)
1198                 return 0;
1199
1200         return apparmor_secmark_check(ctx->label, OP_CONNECT, AA_MAY_CONNECT,
1201                                       skb->secmark, sk);
1202 }
1203 #endif
1204
1205 /*
1206  * The cred blob is a pointer to, not an instance of, an aa_task_ctx.
1207  */
1208 struct lsm_blob_sizes apparmor_blob_sizes __lsm_ro_after_init = {
1209         .lbs_cred = sizeof(struct aa_task_ctx *),
1210         .lbs_file = sizeof(struct aa_file_ctx),
1211         .lbs_task = sizeof(struct aa_task_ctx),
1212 };
1213
1214 static struct security_hook_list apparmor_hooks[] __lsm_ro_after_init = {
1215         LSM_HOOK_INIT(ptrace_access_check, apparmor_ptrace_access_check),
1216         LSM_HOOK_INIT(ptrace_traceme, apparmor_ptrace_traceme),
1217         LSM_HOOK_INIT(capget, apparmor_capget),
1218         LSM_HOOK_INIT(capable, apparmor_capable),
1219
1220         LSM_HOOK_INIT(sb_mount, apparmor_sb_mount),
1221         LSM_HOOK_INIT(sb_umount, apparmor_sb_umount),
1222         LSM_HOOK_INIT(sb_pivotroot, apparmor_sb_pivotroot),
1223
1224         LSM_HOOK_INIT(path_link, apparmor_path_link),
1225         LSM_HOOK_INIT(path_unlink, apparmor_path_unlink),
1226         LSM_HOOK_INIT(path_symlink, apparmor_path_symlink),
1227         LSM_HOOK_INIT(path_mkdir, apparmor_path_mkdir),
1228         LSM_HOOK_INIT(path_rmdir, apparmor_path_rmdir),
1229         LSM_HOOK_INIT(path_mknod, apparmor_path_mknod),
1230         LSM_HOOK_INIT(path_rename, apparmor_path_rename),
1231         LSM_HOOK_INIT(path_chmod, apparmor_path_chmod),
1232         LSM_HOOK_INIT(path_chown, apparmor_path_chown),
1233         LSM_HOOK_INIT(path_truncate, apparmor_path_truncate),
1234         LSM_HOOK_INIT(inode_getattr, apparmor_inode_getattr),
1235
1236         LSM_HOOK_INIT(file_open, apparmor_file_open),
1237         LSM_HOOK_INIT(file_receive, apparmor_file_receive),
1238         LSM_HOOK_INIT(file_permission, apparmor_file_permission),
1239         LSM_HOOK_INIT(file_alloc_security, apparmor_file_alloc_security),
1240         LSM_HOOK_INIT(file_free_security, apparmor_file_free_security),
1241         LSM_HOOK_INIT(mmap_file, apparmor_mmap_file),
1242         LSM_HOOK_INIT(file_mprotect, apparmor_file_mprotect),
1243         LSM_HOOK_INIT(file_lock, apparmor_file_lock),
1244
1245         LSM_HOOK_INIT(getprocattr, apparmor_getprocattr),
1246         LSM_HOOK_INIT(setprocattr, apparmor_setprocattr),
1247
1248         LSM_HOOK_INIT(sk_alloc_security, apparmor_sk_alloc_security),
1249         LSM_HOOK_INIT(sk_free_security, apparmor_sk_free_security),
1250         LSM_HOOK_INIT(sk_clone_security, apparmor_sk_clone_security),
1251
1252         LSM_HOOK_INIT(socket_create, apparmor_socket_create),
1253         LSM_HOOK_INIT(socket_post_create, apparmor_socket_post_create),
1254         LSM_HOOK_INIT(socket_bind, apparmor_socket_bind),
1255         LSM_HOOK_INIT(socket_connect, apparmor_socket_connect),
1256         LSM_HOOK_INIT(socket_listen, apparmor_socket_listen),
1257         LSM_HOOK_INIT(socket_accept, apparmor_socket_accept),
1258         LSM_HOOK_INIT(socket_sendmsg, apparmor_socket_sendmsg),
1259         LSM_HOOK_INIT(socket_recvmsg, apparmor_socket_recvmsg),
1260         LSM_HOOK_INIT(socket_getsockname, apparmor_socket_getsockname),
1261         LSM_HOOK_INIT(socket_getpeername, apparmor_socket_getpeername),
1262         LSM_HOOK_INIT(socket_getsockopt, apparmor_socket_getsockopt),
1263         LSM_HOOK_INIT(socket_setsockopt, apparmor_socket_setsockopt),
1264         LSM_HOOK_INIT(socket_shutdown, apparmor_socket_shutdown),
1265 #ifdef CONFIG_NETWORK_SECMARK
1266         LSM_HOOK_INIT(socket_sock_rcv_skb, apparmor_socket_sock_rcv_skb),
1267 #endif
1268         LSM_HOOK_INIT(socket_getpeersec_stream,
1269                       apparmor_socket_getpeersec_stream),
1270         LSM_HOOK_INIT(socket_getpeersec_dgram,
1271                       apparmor_socket_getpeersec_dgram),
1272         LSM_HOOK_INIT(sock_graft, apparmor_sock_graft),
1273 #ifdef CONFIG_NETWORK_SECMARK
1274         LSM_HOOK_INIT(inet_conn_request, apparmor_inet_conn_request),
1275 #endif
1276
1277         LSM_HOOK_INIT(cred_alloc_blank, apparmor_cred_alloc_blank),
1278         LSM_HOOK_INIT(cred_free, apparmor_cred_free),
1279         LSM_HOOK_INIT(cred_prepare, apparmor_cred_prepare),
1280         LSM_HOOK_INIT(cred_transfer, apparmor_cred_transfer),
1281
1282         LSM_HOOK_INIT(bprm_creds_for_exec, apparmor_bprm_creds_for_exec),
1283         LSM_HOOK_INIT(bprm_committing_creds, apparmor_bprm_committing_creds),
1284         LSM_HOOK_INIT(bprm_committed_creds, apparmor_bprm_committed_creds),
1285
1286         LSM_HOOK_INIT(task_free, apparmor_task_free),
1287         LSM_HOOK_INIT(task_alloc, apparmor_task_alloc),
1288         LSM_HOOK_INIT(current_getsecid_subj, apparmor_current_getsecid_subj),
1289         LSM_HOOK_INIT(task_getsecid_obj, apparmor_task_getsecid_obj),
1290         LSM_HOOK_INIT(task_setrlimit, apparmor_task_setrlimit),
1291         LSM_HOOK_INIT(task_kill, apparmor_task_kill),
1292
1293 #ifdef CONFIG_AUDIT
1294         LSM_HOOK_INIT(audit_rule_init, aa_audit_rule_init),
1295         LSM_HOOK_INIT(audit_rule_known, aa_audit_rule_known),
1296         LSM_HOOK_INIT(audit_rule_match, aa_audit_rule_match),
1297         LSM_HOOK_INIT(audit_rule_free, aa_audit_rule_free),
1298 #endif
1299
1300         LSM_HOOK_INIT(secid_to_secctx, apparmor_secid_to_secctx),
1301         LSM_HOOK_INIT(secctx_to_secid, apparmor_secctx_to_secid),
1302         LSM_HOOK_INIT(release_secctx, apparmor_release_secctx),
1303 };
1304
1305 /*
1306  * AppArmor sysfs module parameters
1307  */
1308
1309 static int param_set_aabool(const char *val, const struct kernel_param *kp);
1310 static int param_get_aabool(char *buffer, const struct kernel_param *kp);
1311 #define param_check_aabool param_check_bool
1312 static const struct kernel_param_ops param_ops_aabool = {
1313         .flags = KERNEL_PARAM_OPS_FL_NOARG,
1314         .set = param_set_aabool,
1315         .get = param_get_aabool
1316 };
1317
1318 static int param_set_aauint(const char *val, const struct kernel_param *kp);
1319 static int param_get_aauint(char *buffer, const struct kernel_param *kp);
1320 #define param_check_aauint param_check_uint
1321 static const struct kernel_param_ops param_ops_aauint = {
1322         .set = param_set_aauint,
1323         .get = param_get_aauint
1324 };
1325
1326 static int param_set_aacompressionlevel(const char *val,
1327                                         const struct kernel_param *kp);
1328 static int param_get_aacompressionlevel(char *buffer,
1329                                         const struct kernel_param *kp);
1330 #define param_check_aacompressionlevel param_check_int
1331 static const struct kernel_param_ops param_ops_aacompressionlevel = {
1332         .set = param_set_aacompressionlevel,
1333         .get = param_get_aacompressionlevel
1334 };
1335
1336 static int param_set_aalockpolicy(const char *val, const struct kernel_param *kp);
1337 static int param_get_aalockpolicy(char *buffer, const struct kernel_param *kp);
1338 #define param_check_aalockpolicy param_check_bool
1339 static const struct kernel_param_ops param_ops_aalockpolicy = {
1340         .flags = KERNEL_PARAM_OPS_FL_NOARG,
1341         .set = param_set_aalockpolicy,
1342         .get = param_get_aalockpolicy
1343 };
1344
1345 static int param_set_audit(const char *val, const struct kernel_param *kp);
1346 static int param_get_audit(char *buffer, const struct kernel_param *kp);
1347
1348 static int param_set_mode(const char *val, const struct kernel_param *kp);
1349 static int param_get_mode(char *buffer, const struct kernel_param *kp);
1350
1351 /* Flag values, also controllable via /sys/module/apparmor/parameters
1352  * We define special types as we want to do additional mediation.
1353  */
1354
1355 /* AppArmor global enforcement switch - complain, enforce, kill */
1356 enum profile_mode aa_g_profile_mode = APPARMOR_ENFORCE;
1357 module_param_call(mode, param_set_mode, param_get_mode,
1358                   &aa_g_profile_mode, S_IRUSR | S_IWUSR);
1359
1360 /* whether policy verification hashing is enabled */
1361 bool aa_g_hash_policy = IS_ENABLED(CONFIG_SECURITY_APPARMOR_HASH_DEFAULT);
1362 #ifdef CONFIG_SECURITY_APPARMOR_HASH
1363 module_param_named(hash_policy, aa_g_hash_policy, aabool, S_IRUSR | S_IWUSR);
1364 #endif
1365
1366 /* whether policy exactly as loaded is retained for debug and checkpointing */
1367 bool aa_g_export_binary = IS_ENABLED(CONFIG_SECURITY_APPARMOR_EXPORT_BINARY);
1368 #ifdef CONFIG_SECURITY_APPARMOR_EXPORT_BINARY
1369 module_param_named(export_binary, aa_g_export_binary, aabool, 0600);
1370 #endif
1371
1372 /* policy loaddata compression level */
1373 int aa_g_rawdata_compression_level = Z_DEFAULT_COMPRESSION;
1374 module_param_named(rawdata_compression_level, aa_g_rawdata_compression_level,
1375                    aacompressionlevel, 0400);
1376
1377 /* Debug mode */
1378 bool aa_g_debug = IS_ENABLED(CONFIG_SECURITY_APPARMOR_DEBUG_MESSAGES);
1379 module_param_named(debug, aa_g_debug, aabool, S_IRUSR | S_IWUSR);
1380
1381 /* Audit mode */
1382 enum audit_mode aa_g_audit;
1383 module_param_call(audit, param_set_audit, param_get_audit,
1384                   &aa_g_audit, S_IRUSR | S_IWUSR);
1385
1386 /* Determines if audit header is included in audited messages.  This
1387  * provides more context if the audit daemon is not running
1388  */
1389 bool aa_g_audit_header = true;
1390 module_param_named(audit_header, aa_g_audit_header, aabool,
1391                    S_IRUSR | S_IWUSR);
1392
1393 /* lock out loading/removal of policy
1394  * TODO: add in at boot loading of policy, which is the only way to
1395  *       load policy, if lock_policy is set
1396  */
1397 bool aa_g_lock_policy;
1398 module_param_named(lock_policy, aa_g_lock_policy, aalockpolicy,
1399                    S_IRUSR | S_IWUSR);
1400
1401 /* Syscall logging mode */
1402 bool aa_g_logsyscall;
1403 module_param_named(logsyscall, aa_g_logsyscall, aabool, S_IRUSR | S_IWUSR);
1404
1405 /* Maximum pathname length before accesses will start getting rejected */
1406 unsigned int aa_g_path_max = 2 * PATH_MAX;
1407 module_param_named(path_max, aa_g_path_max, aauint, S_IRUSR);
1408
1409 /* Determines how paranoid loading of policy is and how much verification
1410  * on the loaded policy is done.
1411  * DEPRECATED: read only as strict checking of load is always done now
1412  * that none root users (user namespaces) can load policy.
1413  */
1414 bool aa_g_paranoid_load = IS_ENABLED(CONFIG_SECURITY_APPARMOR_PARANOID_LOAD);
1415 module_param_named(paranoid_load, aa_g_paranoid_load, aabool, S_IRUGO);
1416
1417 static int param_get_aaintbool(char *buffer, const struct kernel_param *kp);
1418 static int param_set_aaintbool(const char *val, const struct kernel_param *kp);
1419 #define param_check_aaintbool param_check_int
1420 static const struct kernel_param_ops param_ops_aaintbool = {
1421         .set = param_set_aaintbool,
1422         .get = param_get_aaintbool
1423 };
1424 /* Boot time disable flag */
1425 static int apparmor_enabled __lsm_ro_after_init = 1;
1426 module_param_named(enabled, apparmor_enabled, aaintbool, 0444);
1427
1428 static int __init apparmor_enabled_setup(char *str)
1429 {
1430         unsigned long enabled;
1431         int error = kstrtoul(str, 0, &enabled);
1432         if (!error)
1433                 apparmor_enabled = enabled ? 1 : 0;
1434         return 1;
1435 }
1436
1437 __setup("apparmor=", apparmor_enabled_setup);
1438
1439 /* set global flag turning off the ability to load policy */
1440 static int param_set_aalockpolicy(const char *val, const struct kernel_param *kp)
1441 {
1442         if (!apparmor_enabled)
1443                 return -EINVAL;
1444         if (apparmor_initialized && !aa_current_policy_admin_capable(NULL))
1445                 return -EPERM;
1446         return param_set_bool(val, kp);
1447 }
1448
1449 static int param_get_aalockpolicy(char *buffer, const struct kernel_param *kp)
1450 {
1451         if (!apparmor_enabled)
1452                 return -EINVAL;
1453         if (apparmor_initialized && !aa_current_policy_view_capable(NULL))
1454                 return -EPERM;
1455         return param_get_bool(buffer, kp);
1456 }
1457
1458 static int param_set_aabool(const char *val, const struct kernel_param *kp)
1459 {
1460         if (!apparmor_enabled)
1461                 return -EINVAL;
1462         if (apparmor_initialized && !aa_current_policy_admin_capable(NULL))
1463                 return -EPERM;
1464         return param_set_bool(val, kp);
1465 }
1466
1467 static int param_get_aabool(char *buffer, const struct kernel_param *kp)
1468 {
1469         if (!apparmor_enabled)
1470                 return -EINVAL;
1471         if (apparmor_initialized && !aa_current_policy_view_capable(NULL))
1472                 return -EPERM;
1473         return param_get_bool(buffer, kp);
1474 }
1475
1476 static int param_set_aauint(const char *val, const struct kernel_param *kp)
1477 {
1478         int error;
1479
1480         if (!apparmor_enabled)
1481                 return -EINVAL;
1482         /* file is ro but enforce 2nd line check */
1483         if (apparmor_initialized)
1484                 return -EPERM;
1485
1486         error = param_set_uint(val, kp);
1487         aa_g_path_max = max_t(uint32_t, aa_g_path_max, sizeof(union aa_buffer));
1488         pr_info("AppArmor: buffer size set to %d bytes\n", aa_g_path_max);
1489
1490         return error;
1491 }
1492
1493 static int param_get_aauint(char *buffer, const struct kernel_param *kp)
1494 {
1495         if (!apparmor_enabled)
1496                 return -EINVAL;
1497         if (apparmor_initialized && !aa_current_policy_view_capable(NULL))
1498                 return -EPERM;
1499         return param_get_uint(buffer, kp);
1500 }
1501
1502 /* Can only be set before AppArmor is initialized (i.e. on boot cmdline). */
1503 static int param_set_aaintbool(const char *val, const struct kernel_param *kp)
1504 {
1505         struct kernel_param kp_local;
1506         bool value;
1507         int error;
1508
1509         if (apparmor_initialized)
1510                 return -EPERM;
1511
1512         /* Create local copy, with arg pointing to bool type. */
1513         value = !!*((int *)kp->arg);
1514         memcpy(&kp_local, kp, sizeof(kp_local));
1515         kp_local.arg = &value;
1516
1517         error = param_set_bool(val, &kp_local);
1518         if (!error)
1519                 *((int *)kp->arg) = *((bool *)kp_local.arg);
1520         return error;
1521 }
1522
1523 /*
1524  * To avoid changing /sys/module/apparmor/parameters/enabled from Y/N to
1525  * 1/0, this converts the "int that is actually bool" back to bool for
1526  * display in the /sys filesystem, while keeping it "int" for the LSM
1527  * infrastructure.
1528  */
1529 static int param_get_aaintbool(char *buffer, const struct kernel_param *kp)
1530 {
1531         struct kernel_param kp_local;
1532         bool value;
1533
1534         /* Create local copy, with arg pointing to bool type. */
1535         value = !!*((int *)kp->arg);
1536         memcpy(&kp_local, kp, sizeof(kp_local));
1537         kp_local.arg = &value;
1538
1539         return param_get_bool(buffer, &kp_local);
1540 }
1541
1542 static int param_set_aacompressionlevel(const char *val,
1543                                         const struct kernel_param *kp)
1544 {
1545         int error;
1546
1547         if (!apparmor_enabled)
1548                 return -EINVAL;
1549         if (apparmor_initialized)
1550                 return -EPERM;
1551
1552         error = param_set_int(val, kp);
1553
1554         aa_g_rawdata_compression_level = clamp(aa_g_rawdata_compression_level,
1555                                                Z_NO_COMPRESSION,
1556                                                Z_BEST_COMPRESSION);
1557         pr_info("AppArmor: policy rawdata compression level set to %u\n",
1558                 aa_g_rawdata_compression_level);
1559
1560         return error;
1561 }
1562
1563 static int param_get_aacompressionlevel(char *buffer,
1564                                         const struct kernel_param *kp)
1565 {
1566         if (!apparmor_enabled)
1567                 return -EINVAL;
1568         if (apparmor_initialized && !aa_current_policy_view_capable(NULL))
1569                 return -EPERM;
1570         return param_get_int(buffer, kp);
1571 }
1572
1573 static int param_get_audit(char *buffer, const struct kernel_param *kp)
1574 {
1575         if (!apparmor_enabled)
1576                 return -EINVAL;
1577         if (apparmor_initialized && !aa_current_policy_view_capable(NULL))
1578                 return -EPERM;
1579         return sprintf(buffer, "%s", audit_mode_names[aa_g_audit]);
1580 }
1581
1582 static int param_set_audit(const char *val, const struct kernel_param *kp)
1583 {
1584         int i;
1585
1586         if (!apparmor_enabled)
1587                 return -EINVAL;
1588         if (!val)
1589                 return -EINVAL;
1590         if (apparmor_initialized && !aa_current_policy_admin_capable(NULL))
1591                 return -EPERM;
1592
1593         i = match_string(audit_mode_names, AUDIT_MAX_INDEX, val);
1594         if (i < 0)
1595                 return -EINVAL;
1596
1597         aa_g_audit = i;
1598         return 0;
1599 }
1600
1601 static int param_get_mode(char *buffer, const struct kernel_param *kp)
1602 {
1603         if (!apparmor_enabled)
1604                 return -EINVAL;
1605         if (apparmor_initialized && !aa_current_policy_view_capable(NULL))
1606                 return -EPERM;
1607
1608         return sprintf(buffer, "%s", aa_profile_mode_names[aa_g_profile_mode]);
1609 }
1610
1611 static int param_set_mode(const char *val, const struct kernel_param *kp)
1612 {
1613         int i;
1614
1615         if (!apparmor_enabled)
1616                 return -EINVAL;
1617         if (!val)
1618                 return -EINVAL;
1619         if (apparmor_initialized && !aa_current_policy_admin_capable(NULL))
1620                 return -EPERM;
1621
1622         i = match_string(aa_profile_mode_names, APPARMOR_MODE_NAMES_MAX_INDEX,
1623                          val);
1624         if (i < 0)
1625                 return -EINVAL;
1626
1627         aa_g_profile_mode = i;
1628         return 0;
1629 }
1630
1631 char *aa_get_buffer(bool in_atomic)
1632 {
1633         union aa_buffer *aa_buf;
1634         bool try_again = true;
1635         gfp_t flags = (GFP_KERNEL | __GFP_RETRY_MAYFAIL | __GFP_NOWARN);
1636
1637 retry:
1638         spin_lock(&aa_buffers_lock);
1639         if (buffer_count > reserve_count ||
1640             (in_atomic && !list_empty(&aa_global_buffers))) {
1641                 aa_buf = list_first_entry(&aa_global_buffers, union aa_buffer,
1642                                           list);
1643                 list_del(&aa_buf->list);
1644                 buffer_count--;
1645                 spin_unlock(&aa_buffers_lock);
1646                 return &aa_buf->buffer[0];
1647         }
1648         if (in_atomic) {
1649                 /*
1650                  * out of reserve buffers and in atomic context so increase
1651                  * how many buffers to keep in reserve
1652                  */
1653                 reserve_count++;
1654                 flags = GFP_ATOMIC;
1655         }
1656         spin_unlock(&aa_buffers_lock);
1657
1658         if (!in_atomic)
1659                 might_sleep();
1660         aa_buf = kmalloc(aa_g_path_max, flags);
1661         if (!aa_buf) {
1662                 if (try_again) {
1663                         try_again = false;
1664                         goto retry;
1665                 }
1666                 pr_warn_once("AppArmor: Failed to allocate a memory buffer.\n");
1667                 return NULL;
1668         }
1669         return &aa_buf->buffer[0];
1670 }
1671
1672 void aa_put_buffer(char *buf)
1673 {
1674         union aa_buffer *aa_buf;
1675
1676         if (!buf)
1677                 return;
1678         aa_buf = container_of(buf, union aa_buffer, buffer[0]);
1679
1680         spin_lock(&aa_buffers_lock);
1681         list_add(&aa_buf->list, &aa_global_buffers);
1682         buffer_count++;
1683         spin_unlock(&aa_buffers_lock);
1684 }
1685
1686 /*
1687  * AppArmor init functions
1688  */
1689
1690 /**
1691  * set_init_ctx - set a task context and profile on the first task.
1692  *
1693  * TODO: allow setting an alternate profile than unconfined
1694  */
1695 static int __init set_init_ctx(void)
1696 {
1697         struct cred *cred = (__force struct cred *)current->real_cred;
1698
1699         set_cred_label(cred, aa_get_label(ns_unconfined(root_ns)));
1700
1701         return 0;
1702 }
1703
1704 static void destroy_buffers(void)
1705 {
1706         union aa_buffer *aa_buf;
1707
1708         spin_lock(&aa_buffers_lock);
1709         while (!list_empty(&aa_global_buffers)) {
1710                 aa_buf = list_first_entry(&aa_global_buffers, union aa_buffer,
1711                                          list);
1712                 list_del(&aa_buf->list);
1713                 spin_unlock(&aa_buffers_lock);
1714                 kfree(aa_buf);
1715                 spin_lock(&aa_buffers_lock);
1716         }
1717         spin_unlock(&aa_buffers_lock);
1718 }
1719
1720 static int __init alloc_buffers(void)
1721 {
1722         union aa_buffer *aa_buf;
1723         int i, num;
1724
1725         /*
1726          * A function may require two buffers at once. Usually the buffers are
1727          * used for a short period of time and are shared. On UP kernel buffers
1728          * two should be enough, with more CPUs it is possible that more
1729          * buffers will be used simultaneously. The preallocated pool may grow.
1730          * This preallocation has also the side-effect that AppArmor will be
1731          * disabled early at boot if aa_g_path_max is extremly high.
1732          */
1733         if (num_online_cpus() > 1)
1734                 num = 4 + RESERVE_COUNT;
1735         else
1736                 num = 2 + RESERVE_COUNT;
1737
1738         for (i = 0; i < num; i++) {
1739
1740                 aa_buf = kmalloc(aa_g_path_max, GFP_KERNEL |
1741                                  __GFP_RETRY_MAYFAIL | __GFP_NOWARN);
1742                 if (!aa_buf) {
1743                         destroy_buffers();
1744                         return -ENOMEM;
1745                 }
1746                 aa_put_buffer(&aa_buf->buffer[0]);
1747         }
1748         return 0;
1749 }
1750
1751 #ifdef CONFIG_SYSCTL
1752 static int apparmor_dointvec(struct ctl_table *table, int write,
1753                              void *buffer, size_t *lenp, loff_t *ppos)
1754 {
1755         if (!aa_current_policy_admin_capable(NULL))
1756                 return -EPERM;
1757         if (!apparmor_enabled)
1758                 return -EINVAL;
1759
1760         return proc_dointvec(table, write, buffer, lenp, ppos);
1761 }
1762
1763 static struct ctl_path apparmor_sysctl_path[] = {
1764         { .procname = "kernel", },
1765         { }
1766 };
1767
1768 static struct ctl_table apparmor_sysctl_table[] = {
1769         {
1770                 .procname       = "unprivileged_userns_apparmor_policy",
1771                 .data           = &unprivileged_userns_apparmor_policy,
1772                 .maxlen         = sizeof(int),
1773                 .mode           = 0600,
1774                 .proc_handler   = apparmor_dointvec,
1775         },
1776         {
1777                 .procname       = "apparmor_display_secid_mode",
1778                 .data           = &apparmor_display_secid_mode,
1779                 .maxlen         = sizeof(int),
1780                 .mode           = 0600,
1781                 .proc_handler   = apparmor_dointvec,
1782         },
1783
1784         { }
1785 };
1786
1787 static int __init apparmor_init_sysctl(void)
1788 {
1789         return register_sysctl_paths(apparmor_sysctl_path,
1790                                      apparmor_sysctl_table) ? 0 : -ENOMEM;
1791 }
1792 #else
1793 static inline int apparmor_init_sysctl(void)
1794 {
1795         return 0;
1796 }
1797 #endif /* CONFIG_SYSCTL */
1798
1799 #if defined(CONFIG_NETFILTER) && defined(CONFIG_NETWORK_SECMARK)
1800 static unsigned int apparmor_ip_postroute(void *priv,
1801                                           struct sk_buff *skb,
1802                                           const struct nf_hook_state *state)
1803 {
1804         struct aa_sk_ctx *ctx;
1805         struct sock *sk;
1806
1807         if (!skb->secmark)
1808                 return NF_ACCEPT;
1809
1810         sk = skb_to_full_sk(skb);
1811         if (sk == NULL)
1812                 return NF_ACCEPT;
1813
1814         ctx = SK_CTX(sk);
1815         if (!apparmor_secmark_check(ctx->label, OP_SENDMSG, AA_MAY_SEND,
1816                                     skb->secmark, sk))
1817                 return NF_ACCEPT;
1818
1819         return NF_DROP_ERR(-ECONNREFUSED);
1820
1821 }
1822
1823 static const struct nf_hook_ops apparmor_nf_ops[] = {
1824         {
1825                 .hook =         apparmor_ip_postroute,
1826                 .pf =           NFPROTO_IPV4,
1827                 .hooknum =      NF_INET_POST_ROUTING,
1828                 .priority =     NF_IP_PRI_SELINUX_FIRST,
1829         },
1830 #if IS_ENABLED(CONFIG_IPV6)
1831         {
1832                 .hook =         apparmor_ip_postroute,
1833                 .pf =           NFPROTO_IPV6,
1834                 .hooknum =      NF_INET_POST_ROUTING,
1835                 .priority =     NF_IP6_PRI_SELINUX_FIRST,
1836         },
1837 #endif
1838 };
1839
1840 static int __net_init apparmor_nf_register(struct net *net)
1841 {
1842         return nf_register_net_hooks(net, apparmor_nf_ops,
1843                                     ARRAY_SIZE(apparmor_nf_ops));
1844 }
1845
1846 static void __net_exit apparmor_nf_unregister(struct net *net)
1847 {
1848         nf_unregister_net_hooks(net, apparmor_nf_ops,
1849                                 ARRAY_SIZE(apparmor_nf_ops));
1850 }
1851
1852 static struct pernet_operations apparmor_net_ops = {
1853         .init = apparmor_nf_register,
1854         .exit = apparmor_nf_unregister,
1855 };
1856
1857 static int __init apparmor_nf_ip_init(void)
1858 {
1859         int err;
1860
1861         if (!apparmor_enabled)
1862                 return 0;
1863
1864         err = register_pernet_subsys(&apparmor_net_ops);
1865         if (err)
1866                 panic("Apparmor: register_pernet_subsys: error %d\n", err);
1867
1868         return 0;
1869 }
1870 __initcall(apparmor_nf_ip_init);
1871 #endif
1872
1873 static int __init apparmor_init(void)
1874 {
1875         int error;
1876
1877         error = aa_setup_dfa_engine();
1878         if (error) {
1879                 AA_ERROR("Unable to setup dfa engine\n");
1880                 goto alloc_out;
1881         }
1882
1883         error = aa_alloc_root_ns();
1884         if (error) {
1885                 AA_ERROR("Unable to allocate default profile namespace\n");
1886                 goto alloc_out;
1887         }
1888
1889         error = apparmor_init_sysctl();
1890         if (error) {
1891                 AA_ERROR("Unable to register sysctls\n");
1892                 goto alloc_out;
1893
1894         }
1895
1896         error = alloc_buffers();
1897         if (error) {
1898                 AA_ERROR("Unable to allocate work buffers\n");
1899                 goto alloc_out;
1900         }
1901
1902         error = set_init_ctx();
1903         if (error) {
1904                 AA_ERROR("Failed to set context on init task\n");
1905                 aa_free_root_ns();
1906                 goto buffers_out;
1907         }
1908         security_add_hooks(apparmor_hooks, ARRAY_SIZE(apparmor_hooks),
1909                                 "apparmor");
1910
1911         /* Report that AppArmor successfully initialized */
1912         apparmor_initialized = 1;
1913         if (aa_g_profile_mode == APPARMOR_COMPLAIN)
1914                 aa_info_message("AppArmor initialized: complain mode enabled");
1915         else if (aa_g_profile_mode == APPARMOR_KILL)
1916                 aa_info_message("AppArmor initialized: kill mode enabled");
1917         else
1918                 aa_info_message("AppArmor initialized");
1919
1920         return error;
1921
1922 buffers_out:
1923         destroy_buffers();
1924 alloc_out:
1925         aa_destroy_aafs();
1926         aa_teardown_dfa_engine();
1927
1928         apparmor_enabled = false;
1929         return error;
1930 }
1931
1932 DEFINE_LSM(apparmor) = {
1933         .name = "apparmor",
1934         .flags = LSM_FLAG_LEGACY_MAJOR | LSM_FLAG_EXCLUSIVE,
1935         .enabled = &apparmor_enabled,
1936         .blobs = &apparmor_blob_sizes,
1937         .init = apparmor_init,
1938 };