Merge tag 'char-misc-5.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregk...
[linux-2.6-microblaze.git] / security / selinux / hooks.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  *  NSA Security-Enhanced Linux (SELinux) security module
4  *
5  *  This file contains the SELinux hook function implementations.
6  *
7  *  Authors:  Stephen Smalley, <sds@tycho.nsa.gov>
8  *            Chris Vance, <cvance@nai.com>
9  *            Wayne Salamon, <wsalamon@nai.com>
10  *            James Morris <jmorris@redhat.com>
11  *
12  *  Copyright (C) 2001,2002 Networks Associates Technology, Inc.
13  *  Copyright (C) 2003-2008 Red Hat, Inc., James Morris <jmorris@redhat.com>
14  *                                         Eric Paris <eparis@redhat.com>
15  *  Copyright (C) 2004-2005 Trusted Computer Solutions, Inc.
16  *                          <dgoeddel@trustedcs.com>
17  *  Copyright (C) 2006, 2007, 2009 Hewlett-Packard Development Company, L.P.
18  *      Paul Moore <paul@paul-moore.com>
19  *  Copyright (C) 2007 Hitachi Software Engineering Co., Ltd.
20  *                     Yuichi Nakamura <ynakam@hitachisoft.jp>
21  *  Copyright (C) 2016 Mellanox Technologies
22  */
23
24 #include <linux/init.h>
25 #include <linux/kd.h>
26 #include <linux/kernel.h>
27 #include <linux/kernel_read_file.h>
28 #include <linux/tracehook.h>
29 #include <linux/errno.h>
30 #include <linux/sched/signal.h>
31 #include <linux/sched/task.h>
32 #include <linux/lsm_hooks.h>
33 #include <linux/xattr.h>
34 #include <linux/capability.h>
35 #include <linux/unistd.h>
36 #include <linux/mm.h>
37 #include <linux/mman.h>
38 #include <linux/slab.h>
39 #include <linux/pagemap.h>
40 #include <linux/proc_fs.h>
41 #include <linux/swap.h>
42 #include <linux/spinlock.h>
43 #include <linux/syscalls.h>
44 #include <linux/dcache.h>
45 #include <linux/file.h>
46 #include <linux/fdtable.h>
47 #include <linux/namei.h>
48 #include <linux/mount.h>
49 #include <linux/fs_context.h>
50 #include <linux/fs_parser.h>
51 #include <linux/netfilter_ipv4.h>
52 #include <linux/netfilter_ipv6.h>
53 #include <linux/tty.h>
54 #include <net/icmp.h>
55 #include <net/ip.h>             /* for local_port_range[] */
56 #include <net/tcp.h>            /* struct or_callable used in sock_rcv_skb */
57 #include <net/inet_connection_sock.h>
58 #include <net/net_namespace.h>
59 #include <net/netlabel.h>
60 #include <linux/uaccess.h>
61 #include <asm/ioctls.h>
62 #include <linux/atomic.h>
63 #include <linux/bitops.h>
64 #include <linux/interrupt.h>
65 #include <linux/netdevice.h>    /* for network interface checks */
66 #include <net/netlink.h>
67 #include <linux/tcp.h>
68 #include <linux/udp.h>
69 #include <linux/dccp.h>
70 #include <linux/sctp.h>
71 #include <net/sctp/structs.h>
72 #include <linux/quota.h>
73 #include <linux/un.h>           /* for Unix socket types */
74 #include <net/af_unix.h>        /* for Unix socket types */
75 #include <linux/parser.h>
76 #include <linux/nfs_mount.h>
77 #include <net/ipv6.h>
78 #include <linux/hugetlb.h>
79 #include <linux/personality.h>
80 #include <linux/audit.h>
81 #include <linux/string.h>
82 #include <linux/mutex.h>
83 #include <linux/posix-timers.h>
84 #include <linux/syslog.h>
85 #include <linux/user_namespace.h>
86 #include <linux/export.h>
87 #include <linux/msg.h>
88 #include <linux/shm.h>
89 #include <linux/bpf.h>
90 #include <linux/kernfs.h>
91 #include <linux/stringhash.h>   /* for hashlen_string() */
92 #include <uapi/linux/mount.h>
93 #include <linux/fsnotify.h>
94 #include <linux/fanotify.h>
95
96 #include "avc.h"
97 #include "objsec.h"
98 #include "netif.h"
99 #include "netnode.h"
100 #include "netport.h"
101 #include "ibpkey.h"
102 #include "xfrm.h"
103 #include "netlabel.h"
104 #include "audit.h"
105 #include "avc_ss.h"
106
107 struct selinux_state selinux_state;
108
109 /* SECMARK reference count */
110 static atomic_t selinux_secmark_refcount = ATOMIC_INIT(0);
111
112 #ifdef CONFIG_SECURITY_SELINUX_DEVELOP
113 static int selinux_enforcing_boot __initdata;
114
115 static int __init enforcing_setup(char *str)
116 {
117         unsigned long enforcing;
118         if (!kstrtoul(str, 0, &enforcing))
119                 selinux_enforcing_boot = enforcing ? 1 : 0;
120         return 1;
121 }
122 __setup("enforcing=", enforcing_setup);
123 #else
124 #define selinux_enforcing_boot 1
125 #endif
126
127 int selinux_enabled_boot __initdata = 1;
128 #ifdef CONFIG_SECURITY_SELINUX_BOOTPARAM
129 static int __init selinux_enabled_setup(char *str)
130 {
131         unsigned long enabled;
132         if (!kstrtoul(str, 0, &enabled))
133                 selinux_enabled_boot = enabled ? 1 : 0;
134         return 1;
135 }
136 __setup("selinux=", selinux_enabled_setup);
137 #endif
138
139 static unsigned int selinux_checkreqprot_boot =
140         CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE;
141
142 static int __init checkreqprot_setup(char *str)
143 {
144         unsigned long checkreqprot;
145
146         if (!kstrtoul(str, 0, &checkreqprot)) {
147                 selinux_checkreqprot_boot = checkreqprot ? 1 : 0;
148                 if (checkreqprot)
149                         pr_warn("SELinux: checkreqprot set to 1 via kernel parameter.  This is deprecated and will be rejected in a future kernel release.\n");
150         }
151         return 1;
152 }
153 __setup("checkreqprot=", checkreqprot_setup);
154
155 /**
156  * selinux_secmark_enabled - Check to see if SECMARK is currently enabled
157  *
158  * Description:
159  * This function checks the SECMARK reference counter to see if any SECMARK
160  * targets are currently configured, if the reference counter is greater than
161  * zero SECMARK is considered to be enabled.  Returns true (1) if SECMARK is
162  * enabled, false (0) if SECMARK is disabled.  If the always_check_network
163  * policy capability is enabled, SECMARK is always considered enabled.
164  *
165  */
166 static int selinux_secmark_enabled(void)
167 {
168         return (selinux_policycap_alwaysnetwork() ||
169                 atomic_read(&selinux_secmark_refcount));
170 }
171
172 /**
173  * selinux_peerlbl_enabled - Check to see if peer labeling is currently enabled
174  *
175  * Description:
176  * This function checks if NetLabel or labeled IPSEC is enabled.  Returns true
177  * (1) if any are enabled or false (0) if neither are enabled.  If the
178  * always_check_network policy capability is enabled, peer labeling
179  * is always considered enabled.
180  *
181  */
182 static int selinux_peerlbl_enabled(void)
183 {
184         return (selinux_policycap_alwaysnetwork() ||
185                 netlbl_enabled() || selinux_xfrm_enabled());
186 }
187
188 static int selinux_netcache_avc_callback(u32 event)
189 {
190         if (event == AVC_CALLBACK_RESET) {
191                 sel_netif_flush();
192                 sel_netnode_flush();
193                 sel_netport_flush();
194                 synchronize_net();
195         }
196         return 0;
197 }
198
199 static int selinux_lsm_notifier_avc_callback(u32 event)
200 {
201         if (event == AVC_CALLBACK_RESET) {
202                 sel_ib_pkey_flush();
203                 call_blocking_lsm_notifier(LSM_POLICY_CHANGE, NULL);
204         }
205
206         return 0;
207 }
208
209 /*
210  * initialise the security for the init task
211  */
212 static void cred_init_security(void)
213 {
214         struct cred *cred = (struct cred *) current->real_cred;
215         struct task_security_struct *tsec;
216
217         tsec = selinux_cred(cred);
218         tsec->osid = tsec->sid = SECINITSID_KERNEL;
219 }
220
221 /*
222  * get the security ID of a set of credentials
223  */
224 static inline u32 cred_sid(const struct cred *cred)
225 {
226         const struct task_security_struct *tsec;
227
228         tsec = selinux_cred(cred);
229         return tsec->sid;
230 }
231
232 /*
233  * get the subjective security ID of a task
234  */
235 static inline u32 task_sid_subj(const struct task_struct *task)
236 {
237         u32 sid;
238
239         rcu_read_lock();
240         sid = cred_sid(rcu_dereference(task->cred));
241         rcu_read_unlock();
242         return sid;
243 }
244
245 /*
246  * get the objective security ID of a task
247  */
248 static inline u32 task_sid_obj(const struct task_struct *task)
249 {
250         u32 sid;
251
252         rcu_read_lock();
253         sid = cred_sid(__task_cred(task));
254         rcu_read_unlock();
255         return sid;
256 }
257
258 /*
259  * get the security ID of a task for use with binder
260  */
261 static inline u32 task_sid_binder(const struct task_struct *task)
262 {
263         /*
264          * In many case where this function is used we should be using the
265          * task's subjective SID, but we can't reliably access the subjective
266          * creds of a task other than our own so we must use the objective
267          * creds/SID, which are safe to access.  The downside is that if a task
268          * is temporarily overriding it's creds it will not be reflected here;
269          * however, it isn't clear that binder would handle that case well
270          * anyway.
271          *
272          * If this ever changes and we can safely reference the subjective
273          * creds/SID of another task, this function will make it easier to
274          * identify the various places where we make use of the task SIDs in
275          * the binder code.  It is also likely that we will need to adjust
276          * the main drivers/android binder code as well.
277          */
278         return task_sid_obj(task);
279 }
280
281 static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dentry);
282
283 /*
284  * Try reloading inode security labels that have been marked as invalid.  The
285  * @may_sleep parameter indicates when sleeping and thus reloading labels is
286  * allowed; when set to false, returns -ECHILD when the label is
287  * invalid.  The @dentry parameter should be set to a dentry of the inode.
288  */
289 static int __inode_security_revalidate(struct inode *inode,
290                                        struct dentry *dentry,
291                                        bool may_sleep)
292 {
293         struct inode_security_struct *isec = selinux_inode(inode);
294
295         might_sleep_if(may_sleep);
296
297         if (selinux_initialized(&selinux_state) &&
298             isec->initialized != LABEL_INITIALIZED) {
299                 if (!may_sleep)
300                         return -ECHILD;
301
302                 /*
303                  * Try reloading the inode security label.  This will fail if
304                  * @opt_dentry is NULL and no dentry for this inode can be
305                  * found; in that case, continue using the old label.
306                  */
307                 inode_doinit_with_dentry(inode, dentry);
308         }
309         return 0;
310 }
311
312 static struct inode_security_struct *inode_security_novalidate(struct inode *inode)
313 {
314         return selinux_inode(inode);
315 }
316
317 static struct inode_security_struct *inode_security_rcu(struct inode *inode, bool rcu)
318 {
319         int error;
320
321         error = __inode_security_revalidate(inode, NULL, !rcu);
322         if (error)
323                 return ERR_PTR(error);
324         return selinux_inode(inode);
325 }
326
327 /*
328  * Get the security label of an inode.
329  */
330 static struct inode_security_struct *inode_security(struct inode *inode)
331 {
332         __inode_security_revalidate(inode, NULL, true);
333         return selinux_inode(inode);
334 }
335
336 static struct inode_security_struct *backing_inode_security_novalidate(struct dentry *dentry)
337 {
338         struct inode *inode = d_backing_inode(dentry);
339
340         return selinux_inode(inode);
341 }
342
343 /*
344  * Get the security label of a dentry's backing inode.
345  */
346 static struct inode_security_struct *backing_inode_security(struct dentry *dentry)
347 {
348         struct inode *inode = d_backing_inode(dentry);
349
350         __inode_security_revalidate(inode, dentry, true);
351         return selinux_inode(inode);
352 }
353
354 static void inode_free_security(struct inode *inode)
355 {
356         struct inode_security_struct *isec = selinux_inode(inode);
357         struct superblock_security_struct *sbsec;
358
359         if (!isec)
360                 return;
361         sbsec = selinux_superblock(inode->i_sb);
362         /*
363          * As not all inode security structures are in a list, we check for
364          * empty list outside of the lock to make sure that we won't waste
365          * time taking a lock doing nothing.
366          *
367          * The list_del_init() function can be safely called more than once.
368          * It should not be possible for this function to be called with
369          * concurrent list_add(), but for better safety against future changes
370          * in the code, we use list_empty_careful() here.
371          */
372         if (!list_empty_careful(&isec->list)) {
373                 spin_lock(&sbsec->isec_lock);
374                 list_del_init(&isec->list);
375                 spin_unlock(&sbsec->isec_lock);
376         }
377 }
378
379 struct selinux_mnt_opts {
380         const char *fscontext, *context, *rootcontext, *defcontext;
381 };
382
383 static void selinux_free_mnt_opts(void *mnt_opts)
384 {
385         struct selinux_mnt_opts *opts = mnt_opts;
386         kfree(opts->fscontext);
387         kfree(opts->context);
388         kfree(opts->rootcontext);
389         kfree(opts->defcontext);
390         kfree(opts);
391 }
392
393 enum {
394         Opt_error = -1,
395         Opt_context = 0,
396         Opt_defcontext = 1,
397         Opt_fscontext = 2,
398         Opt_rootcontext = 3,
399         Opt_seclabel = 4,
400 };
401
402 #define A(s, has_arg) {#s, sizeof(#s) - 1, Opt_##s, has_arg}
403 static struct {
404         const char *name;
405         int len;
406         int opt;
407         bool has_arg;
408 } tokens[] = {
409         A(context, true),
410         A(fscontext, true),
411         A(defcontext, true),
412         A(rootcontext, true),
413         A(seclabel, false),
414 };
415 #undef A
416
417 static int match_opt_prefix(char *s, int l, char **arg)
418 {
419         int i;
420
421         for (i = 0; i < ARRAY_SIZE(tokens); i++) {
422                 size_t len = tokens[i].len;
423                 if (len > l || memcmp(s, tokens[i].name, len))
424                         continue;
425                 if (tokens[i].has_arg) {
426                         if (len == l || s[len] != '=')
427                                 continue;
428                         *arg = s + len + 1;
429                 } else if (len != l)
430                         continue;
431                 return tokens[i].opt;
432         }
433         return Opt_error;
434 }
435
436 #define SEL_MOUNT_FAIL_MSG "SELinux:  duplicate or incompatible mount options\n"
437
438 static int may_context_mount_sb_relabel(u32 sid,
439                         struct superblock_security_struct *sbsec,
440                         const struct cred *cred)
441 {
442         const struct task_security_struct *tsec = selinux_cred(cred);
443         int rc;
444
445         rc = avc_has_perm(&selinux_state,
446                           tsec->sid, sbsec->sid, SECCLASS_FILESYSTEM,
447                           FILESYSTEM__RELABELFROM, NULL);
448         if (rc)
449                 return rc;
450
451         rc = avc_has_perm(&selinux_state,
452                           tsec->sid, sid, SECCLASS_FILESYSTEM,
453                           FILESYSTEM__RELABELTO, NULL);
454         return rc;
455 }
456
457 static int may_context_mount_inode_relabel(u32 sid,
458                         struct superblock_security_struct *sbsec,
459                         const struct cred *cred)
460 {
461         const struct task_security_struct *tsec = selinux_cred(cred);
462         int rc;
463         rc = avc_has_perm(&selinux_state,
464                           tsec->sid, sbsec->sid, SECCLASS_FILESYSTEM,
465                           FILESYSTEM__RELABELFROM, NULL);
466         if (rc)
467                 return rc;
468
469         rc = avc_has_perm(&selinux_state,
470                           sid, sbsec->sid, SECCLASS_FILESYSTEM,
471                           FILESYSTEM__ASSOCIATE, NULL);
472         return rc;
473 }
474
475 static int selinux_is_genfs_special_handling(struct super_block *sb)
476 {
477         /* Special handling. Genfs but also in-core setxattr handler */
478         return  !strcmp(sb->s_type->name, "sysfs") ||
479                 !strcmp(sb->s_type->name, "pstore") ||
480                 !strcmp(sb->s_type->name, "debugfs") ||
481                 !strcmp(sb->s_type->name, "tracefs") ||
482                 !strcmp(sb->s_type->name, "rootfs") ||
483                 (selinux_policycap_cgroupseclabel() &&
484                  (!strcmp(sb->s_type->name, "cgroup") ||
485                   !strcmp(sb->s_type->name, "cgroup2")));
486 }
487
488 static int selinux_is_sblabel_mnt(struct super_block *sb)
489 {
490         struct superblock_security_struct *sbsec = selinux_superblock(sb);
491
492         /*
493          * IMPORTANT: Double-check logic in this function when adding a new
494          * SECURITY_FS_USE_* definition!
495          */
496         BUILD_BUG_ON(SECURITY_FS_USE_MAX != 7);
497
498         switch (sbsec->behavior) {
499         case SECURITY_FS_USE_XATTR:
500         case SECURITY_FS_USE_TRANS:
501         case SECURITY_FS_USE_TASK:
502         case SECURITY_FS_USE_NATIVE:
503                 return 1;
504
505         case SECURITY_FS_USE_GENFS:
506                 return selinux_is_genfs_special_handling(sb);
507
508         /* Never allow relabeling on context mounts */
509         case SECURITY_FS_USE_MNTPOINT:
510         case SECURITY_FS_USE_NONE:
511         default:
512                 return 0;
513         }
514 }
515
516 static int sb_check_xattr_support(struct super_block *sb)
517 {
518         struct superblock_security_struct *sbsec = sb->s_security;
519         struct dentry *root = sb->s_root;
520         struct inode *root_inode = d_backing_inode(root);
521         u32 sid;
522         int rc;
523
524         /*
525          * Make sure that the xattr handler exists and that no
526          * error other than -ENODATA is returned by getxattr on
527          * the root directory.  -ENODATA is ok, as this may be
528          * the first boot of the SELinux kernel before we have
529          * assigned xattr values to the filesystem.
530          */
531         if (!(root_inode->i_opflags & IOP_XATTR)) {
532                 pr_warn("SELinux: (dev %s, type %s) has no xattr support\n",
533                         sb->s_id, sb->s_type->name);
534                 goto fallback;
535         }
536
537         rc = __vfs_getxattr(root, root_inode, XATTR_NAME_SELINUX, NULL, 0);
538         if (rc < 0 && rc != -ENODATA) {
539                 if (rc == -EOPNOTSUPP) {
540                         pr_warn("SELinux: (dev %s, type %s) has no security xattr handler\n",
541                                 sb->s_id, sb->s_type->name);
542                         goto fallback;
543                 } else {
544                         pr_warn("SELinux: (dev %s, type %s) getxattr errno %d\n",
545                                 sb->s_id, sb->s_type->name, -rc);
546                         return rc;
547                 }
548         }
549         return 0;
550
551 fallback:
552         /* No xattr support - try to fallback to genfs if possible. */
553         rc = security_genfs_sid(&selinux_state, sb->s_type->name, "/",
554                                 SECCLASS_DIR, &sid);
555         if (rc)
556                 return -EOPNOTSUPP;
557
558         pr_warn("SELinux: (dev %s, type %s) falling back to genfs\n",
559                 sb->s_id, sb->s_type->name);
560         sbsec->behavior = SECURITY_FS_USE_GENFS;
561         sbsec->sid = sid;
562         return 0;
563 }
564
565 static int sb_finish_set_opts(struct super_block *sb)
566 {
567         struct superblock_security_struct *sbsec = selinux_superblock(sb);
568         struct dentry *root = sb->s_root;
569         struct inode *root_inode = d_backing_inode(root);
570         int rc = 0;
571
572         if (sbsec->behavior == SECURITY_FS_USE_XATTR) {
573                 rc = sb_check_xattr_support(sb);
574                 if (rc)
575                         return rc;
576         }
577
578         sbsec->flags |= SE_SBINITIALIZED;
579
580         /*
581          * Explicitly set or clear SBLABEL_MNT.  It's not sufficient to simply
582          * leave the flag untouched because sb_clone_mnt_opts might be handing
583          * us a superblock that needs the flag to be cleared.
584          */
585         if (selinux_is_sblabel_mnt(sb))
586                 sbsec->flags |= SBLABEL_MNT;
587         else
588                 sbsec->flags &= ~SBLABEL_MNT;
589
590         /* Initialize the root inode. */
591         rc = inode_doinit_with_dentry(root_inode, root);
592
593         /* Initialize any other inodes associated with the superblock, e.g.
594            inodes created prior to initial policy load or inodes created
595            during get_sb by a pseudo filesystem that directly
596            populates itself. */
597         spin_lock(&sbsec->isec_lock);
598         while (!list_empty(&sbsec->isec_head)) {
599                 struct inode_security_struct *isec =
600                                 list_first_entry(&sbsec->isec_head,
601                                            struct inode_security_struct, list);
602                 struct inode *inode = isec->inode;
603                 list_del_init(&isec->list);
604                 spin_unlock(&sbsec->isec_lock);
605                 inode = igrab(inode);
606                 if (inode) {
607                         if (!IS_PRIVATE(inode))
608                                 inode_doinit_with_dentry(inode, NULL);
609                         iput(inode);
610                 }
611                 spin_lock(&sbsec->isec_lock);
612         }
613         spin_unlock(&sbsec->isec_lock);
614         return rc;
615 }
616
617 static int bad_option(struct superblock_security_struct *sbsec, char flag,
618                       u32 old_sid, u32 new_sid)
619 {
620         char mnt_flags = sbsec->flags & SE_MNTMASK;
621
622         /* check if the old mount command had the same options */
623         if (sbsec->flags & SE_SBINITIALIZED)
624                 if (!(sbsec->flags & flag) ||
625                     (old_sid != new_sid))
626                         return 1;
627
628         /* check if we were passed the same options twice,
629          * aka someone passed context=a,context=b
630          */
631         if (!(sbsec->flags & SE_SBINITIALIZED))
632                 if (mnt_flags & flag)
633                         return 1;
634         return 0;
635 }
636
637 static int parse_sid(struct super_block *sb, const char *s, u32 *sid)
638 {
639         int rc = security_context_str_to_sid(&selinux_state, s,
640                                              sid, GFP_KERNEL);
641         if (rc)
642                 pr_warn("SELinux: security_context_str_to_sid"
643                        "(%s) failed for (dev %s, type %s) errno=%d\n",
644                        s, sb->s_id, sb->s_type->name, rc);
645         return rc;
646 }
647
648 /*
649  * Allow filesystems with binary mount data to explicitly set mount point
650  * labeling information.
651  */
652 static int selinux_set_mnt_opts(struct super_block *sb,
653                                 void *mnt_opts,
654                                 unsigned long kern_flags,
655                                 unsigned long *set_kern_flags)
656 {
657         const struct cred *cred = current_cred();
658         struct superblock_security_struct *sbsec = selinux_superblock(sb);
659         struct dentry *root = sb->s_root;
660         struct selinux_mnt_opts *opts = mnt_opts;
661         struct inode_security_struct *root_isec;
662         u32 fscontext_sid = 0, context_sid = 0, rootcontext_sid = 0;
663         u32 defcontext_sid = 0;
664         int rc = 0;
665
666         mutex_lock(&sbsec->lock);
667
668         if (!selinux_initialized(&selinux_state)) {
669                 if (!opts) {
670                         /* Defer initialization until selinux_complete_init,
671                            after the initial policy is loaded and the security
672                            server is ready to handle calls. */
673                         goto out;
674                 }
675                 rc = -EINVAL;
676                 pr_warn("SELinux: Unable to set superblock options "
677                         "before the security server is initialized\n");
678                 goto out;
679         }
680         if (kern_flags && !set_kern_flags) {
681                 /* Specifying internal flags without providing a place to
682                  * place the results is not allowed */
683                 rc = -EINVAL;
684                 goto out;
685         }
686
687         /*
688          * Binary mount data FS will come through this function twice.  Once
689          * from an explicit call and once from the generic calls from the vfs.
690          * Since the generic VFS calls will not contain any security mount data
691          * we need to skip the double mount verification.
692          *
693          * This does open a hole in which we will not notice if the first
694          * mount using this sb set explict options and a second mount using
695          * this sb does not set any security options.  (The first options
696          * will be used for both mounts)
697          */
698         if ((sbsec->flags & SE_SBINITIALIZED) && (sb->s_type->fs_flags & FS_BINARY_MOUNTDATA)
699             && !opts)
700                 goto out;
701
702         root_isec = backing_inode_security_novalidate(root);
703
704         /*
705          * parse the mount options, check if they are valid sids.
706          * also check if someone is trying to mount the same sb more
707          * than once with different security options.
708          */
709         if (opts) {
710                 if (opts->fscontext) {
711                         rc = parse_sid(sb, opts->fscontext, &fscontext_sid);
712                         if (rc)
713                                 goto out;
714                         if (bad_option(sbsec, FSCONTEXT_MNT, sbsec->sid,
715                                         fscontext_sid))
716                                 goto out_double_mount;
717                         sbsec->flags |= FSCONTEXT_MNT;
718                 }
719                 if (opts->context) {
720                         rc = parse_sid(sb, opts->context, &context_sid);
721                         if (rc)
722                                 goto out;
723                         if (bad_option(sbsec, CONTEXT_MNT, sbsec->mntpoint_sid,
724                                         context_sid))
725                                 goto out_double_mount;
726                         sbsec->flags |= CONTEXT_MNT;
727                 }
728                 if (opts->rootcontext) {
729                         rc = parse_sid(sb, opts->rootcontext, &rootcontext_sid);
730                         if (rc)
731                                 goto out;
732                         if (bad_option(sbsec, ROOTCONTEXT_MNT, root_isec->sid,
733                                         rootcontext_sid))
734                                 goto out_double_mount;
735                         sbsec->flags |= ROOTCONTEXT_MNT;
736                 }
737                 if (opts->defcontext) {
738                         rc = parse_sid(sb, opts->defcontext, &defcontext_sid);
739                         if (rc)
740                                 goto out;
741                         if (bad_option(sbsec, DEFCONTEXT_MNT, sbsec->def_sid,
742                                         defcontext_sid))
743                                 goto out_double_mount;
744                         sbsec->flags |= DEFCONTEXT_MNT;
745                 }
746         }
747
748         if (sbsec->flags & SE_SBINITIALIZED) {
749                 /* previously mounted with options, but not on this attempt? */
750                 if ((sbsec->flags & SE_MNTMASK) && !opts)
751                         goto out_double_mount;
752                 rc = 0;
753                 goto out;
754         }
755
756         if (strcmp(sb->s_type->name, "proc") == 0)
757                 sbsec->flags |= SE_SBPROC | SE_SBGENFS;
758
759         if (!strcmp(sb->s_type->name, "debugfs") ||
760             !strcmp(sb->s_type->name, "tracefs") ||
761             !strcmp(sb->s_type->name, "binder") ||
762             !strcmp(sb->s_type->name, "bpf") ||
763             !strcmp(sb->s_type->name, "pstore"))
764                 sbsec->flags |= SE_SBGENFS;
765
766         if (!strcmp(sb->s_type->name, "sysfs") ||
767             !strcmp(sb->s_type->name, "cgroup") ||
768             !strcmp(sb->s_type->name, "cgroup2"))
769                 sbsec->flags |= SE_SBGENFS | SE_SBGENFS_XATTR;
770
771         if (!sbsec->behavior) {
772                 /*
773                  * Determine the labeling behavior to use for this
774                  * filesystem type.
775                  */
776                 rc = security_fs_use(&selinux_state, sb);
777                 if (rc) {
778                         pr_warn("%s: security_fs_use(%s) returned %d\n",
779                                         __func__, sb->s_type->name, rc);
780                         goto out;
781                 }
782         }
783
784         /*
785          * If this is a user namespace mount and the filesystem type is not
786          * explicitly whitelisted, then no contexts are allowed on the command
787          * line and security labels must be ignored.
788          */
789         if (sb->s_user_ns != &init_user_ns &&
790             strcmp(sb->s_type->name, "tmpfs") &&
791             strcmp(sb->s_type->name, "ramfs") &&
792             strcmp(sb->s_type->name, "devpts") &&
793             strcmp(sb->s_type->name, "overlay")) {
794                 if (context_sid || fscontext_sid || rootcontext_sid ||
795                     defcontext_sid) {
796                         rc = -EACCES;
797                         goto out;
798                 }
799                 if (sbsec->behavior == SECURITY_FS_USE_XATTR) {
800                         sbsec->behavior = SECURITY_FS_USE_MNTPOINT;
801                         rc = security_transition_sid(&selinux_state,
802                                                      current_sid(),
803                                                      current_sid(),
804                                                      SECCLASS_FILE, NULL,
805                                                      &sbsec->mntpoint_sid);
806                         if (rc)
807                                 goto out;
808                 }
809                 goto out_set_opts;
810         }
811
812         /* sets the context of the superblock for the fs being mounted. */
813         if (fscontext_sid) {
814                 rc = may_context_mount_sb_relabel(fscontext_sid, sbsec, cred);
815                 if (rc)
816                         goto out;
817
818                 sbsec->sid = fscontext_sid;
819         }
820
821         /*
822          * Switch to using mount point labeling behavior.
823          * sets the label used on all file below the mountpoint, and will set
824          * the superblock context if not already set.
825          */
826         if (kern_flags & SECURITY_LSM_NATIVE_LABELS && !context_sid) {
827                 sbsec->behavior = SECURITY_FS_USE_NATIVE;
828                 *set_kern_flags |= SECURITY_LSM_NATIVE_LABELS;
829         }
830
831         if (context_sid) {
832                 if (!fscontext_sid) {
833                         rc = may_context_mount_sb_relabel(context_sid, sbsec,
834                                                           cred);
835                         if (rc)
836                                 goto out;
837                         sbsec->sid = context_sid;
838                 } else {
839                         rc = may_context_mount_inode_relabel(context_sid, sbsec,
840                                                              cred);
841                         if (rc)
842                                 goto out;
843                 }
844                 if (!rootcontext_sid)
845                         rootcontext_sid = context_sid;
846
847                 sbsec->mntpoint_sid = context_sid;
848                 sbsec->behavior = SECURITY_FS_USE_MNTPOINT;
849         }
850
851         if (rootcontext_sid) {
852                 rc = may_context_mount_inode_relabel(rootcontext_sid, sbsec,
853                                                      cred);
854                 if (rc)
855                         goto out;
856
857                 root_isec->sid = rootcontext_sid;
858                 root_isec->initialized = LABEL_INITIALIZED;
859         }
860
861         if (defcontext_sid) {
862                 if (sbsec->behavior != SECURITY_FS_USE_XATTR &&
863                         sbsec->behavior != SECURITY_FS_USE_NATIVE) {
864                         rc = -EINVAL;
865                         pr_warn("SELinux: defcontext option is "
866                                "invalid for this filesystem type\n");
867                         goto out;
868                 }
869
870                 if (defcontext_sid != sbsec->def_sid) {
871                         rc = may_context_mount_inode_relabel(defcontext_sid,
872                                                              sbsec, cred);
873                         if (rc)
874                                 goto out;
875                 }
876
877                 sbsec->def_sid = defcontext_sid;
878         }
879
880 out_set_opts:
881         rc = sb_finish_set_opts(sb);
882 out:
883         mutex_unlock(&sbsec->lock);
884         return rc;
885 out_double_mount:
886         rc = -EINVAL;
887         pr_warn("SELinux: mount invalid.  Same superblock, different "
888                "security settings for (dev %s, type %s)\n", sb->s_id,
889                sb->s_type->name);
890         goto out;
891 }
892
893 static int selinux_cmp_sb_context(const struct super_block *oldsb,
894                                     const struct super_block *newsb)
895 {
896         struct superblock_security_struct *old = selinux_superblock(oldsb);
897         struct superblock_security_struct *new = selinux_superblock(newsb);
898         char oldflags = old->flags & SE_MNTMASK;
899         char newflags = new->flags & SE_MNTMASK;
900
901         if (oldflags != newflags)
902                 goto mismatch;
903         if ((oldflags & FSCONTEXT_MNT) && old->sid != new->sid)
904                 goto mismatch;
905         if ((oldflags & CONTEXT_MNT) && old->mntpoint_sid != new->mntpoint_sid)
906                 goto mismatch;
907         if ((oldflags & DEFCONTEXT_MNT) && old->def_sid != new->def_sid)
908                 goto mismatch;
909         if (oldflags & ROOTCONTEXT_MNT) {
910                 struct inode_security_struct *oldroot = backing_inode_security(oldsb->s_root);
911                 struct inode_security_struct *newroot = backing_inode_security(newsb->s_root);
912                 if (oldroot->sid != newroot->sid)
913                         goto mismatch;
914         }
915         return 0;
916 mismatch:
917         pr_warn("SELinux: mount invalid.  Same superblock, "
918                             "different security settings for (dev %s, "
919                             "type %s)\n", newsb->s_id, newsb->s_type->name);
920         return -EBUSY;
921 }
922
923 static int selinux_sb_clone_mnt_opts(const struct super_block *oldsb,
924                                         struct super_block *newsb,
925                                         unsigned long kern_flags,
926                                         unsigned long *set_kern_flags)
927 {
928         int rc = 0;
929         const struct superblock_security_struct *oldsbsec =
930                                                 selinux_superblock(oldsb);
931         struct superblock_security_struct *newsbsec = selinux_superblock(newsb);
932
933         int set_fscontext =     (oldsbsec->flags & FSCONTEXT_MNT);
934         int set_context =       (oldsbsec->flags & CONTEXT_MNT);
935         int set_rootcontext =   (oldsbsec->flags & ROOTCONTEXT_MNT);
936
937         /*
938          * if the parent was able to be mounted it clearly had no special lsm
939          * mount options.  thus we can safely deal with this superblock later
940          */
941         if (!selinux_initialized(&selinux_state))
942                 return 0;
943
944         /*
945          * Specifying internal flags without providing a place to
946          * place the results is not allowed.
947          */
948         if (kern_flags && !set_kern_flags)
949                 return -EINVAL;
950
951         /* how can we clone if the old one wasn't set up?? */
952         BUG_ON(!(oldsbsec->flags & SE_SBINITIALIZED));
953
954         /* if fs is reusing a sb, make sure that the contexts match */
955         if (newsbsec->flags & SE_SBINITIALIZED) {
956                 if ((kern_flags & SECURITY_LSM_NATIVE_LABELS) && !set_context)
957                         *set_kern_flags |= SECURITY_LSM_NATIVE_LABELS;
958                 return selinux_cmp_sb_context(oldsb, newsb);
959         }
960
961         mutex_lock(&newsbsec->lock);
962
963         newsbsec->flags = oldsbsec->flags;
964
965         newsbsec->sid = oldsbsec->sid;
966         newsbsec->def_sid = oldsbsec->def_sid;
967         newsbsec->behavior = oldsbsec->behavior;
968
969         if (newsbsec->behavior == SECURITY_FS_USE_NATIVE &&
970                 !(kern_flags & SECURITY_LSM_NATIVE_LABELS) && !set_context) {
971                 rc = security_fs_use(&selinux_state, newsb);
972                 if (rc)
973                         goto out;
974         }
975
976         if (kern_flags & SECURITY_LSM_NATIVE_LABELS && !set_context) {
977                 newsbsec->behavior = SECURITY_FS_USE_NATIVE;
978                 *set_kern_flags |= SECURITY_LSM_NATIVE_LABELS;
979         }
980
981         if (set_context) {
982                 u32 sid = oldsbsec->mntpoint_sid;
983
984                 if (!set_fscontext)
985                         newsbsec->sid = sid;
986                 if (!set_rootcontext) {
987                         struct inode_security_struct *newisec = backing_inode_security(newsb->s_root);
988                         newisec->sid = sid;
989                 }
990                 newsbsec->mntpoint_sid = sid;
991         }
992         if (set_rootcontext) {
993                 const struct inode_security_struct *oldisec = backing_inode_security(oldsb->s_root);
994                 struct inode_security_struct *newisec = backing_inode_security(newsb->s_root);
995
996                 newisec->sid = oldisec->sid;
997         }
998
999         sb_finish_set_opts(newsb);
1000 out:
1001         mutex_unlock(&newsbsec->lock);
1002         return rc;
1003 }
1004
1005 static int selinux_add_opt(int token, const char *s, void **mnt_opts)
1006 {
1007         struct selinux_mnt_opts *opts = *mnt_opts;
1008
1009         if (token == Opt_seclabel)      /* eaten and completely ignored */
1010                 return 0;
1011
1012         if (!opts) {
1013                 opts = kzalloc(sizeof(struct selinux_mnt_opts), GFP_KERNEL);
1014                 if (!opts)
1015                         return -ENOMEM;
1016                 *mnt_opts = opts;
1017         }
1018         if (!s)
1019                 return -ENOMEM;
1020         switch (token) {
1021         case Opt_context:
1022                 if (opts->context || opts->defcontext)
1023                         goto Einval;
1024                 opts->context = s;
1025                 break;
1026         case Opt_fscontext:
1027                 if (opts->fscontext)
1028                         goto Einval;
1029                 opts->fscontext = s;
1030                 break;
1031         case Opt_rootcontext:
1032                 if (opts->rootcontext)
1033                         goto Einval;
1034                 opts->rootcontext = s;
1035                 break;
1036         case Opt_defcontext:
1037                 if (opts->context || opts->defcontext)
1038                         goto Einval;
1039                 opts->defcontext = s;
1040                 break;
1041         }
1042         return 0;
1043 Einval:
1044         pr_warn(SEL_MOUNT_FAIL_MSG);
1045         return -EINVAL;
1046 }
1047
1048 static int selinux_add_mnt_opt(const char *option, const char *val, int len,
1049                                void **mnt_opts)
1050 {
1051         int token = Opt_error;
1052         int rc, i;
1053
1054         for (i = 0; i < ARRAY_SIZE(tokens); i++) {
1055                 if (strcmp(option, tokens[i].name) == 0) {
1056                         token = tokens[i].opt;
1057                         break;
1058                 }
1059         }
1060
1061         if (token == Opt_error)
1062                 return -EINVAL;
1063
1064         if (token != Opt_seclabel) {
1065                 val = kmemdup_nul(val, len, GFP_KERNEL);
1066                 if (!val) {
1067                         rc = -ENOMEM;
1068                         goto free_opt;
1069                 }
1070         }
1071         rc = selinux_add_opt(token, val, mnt_opts);
1072         if (unlikely(rc)) {
1073                 kfree(val);
1074                 goto free_opt;
1075         }
1076         return rc;
1077
1078 free_opt:
1079         if (*mnt_opts) {
1080                 selinux_free_mnt_opts(*mnt_opts);
1081                 *mnt_opts = NULL;
1082         }
1083         return rc;
1084 }
1085
1086 static int show_sid(struct seq_file *m, u32 sid)
1087 {
1088         char *context = NULL;
1089         u32 len;
1090         int rc;
1091
1092         rc = security_sid_to_context(&selinux_state, sid,
1093                                              &context, &len);
1094         if (!rc) {
1095                 bool has_comma = context && strchr(context, ',');
1096
1097                 seq_putc(m, '=');
1098                 if (has_comma)
1099                         seq_putc(m, '\"');
1100                 seq_escape(m, context, "\"\n\\");
1101                 if (has_comma)
1102                         seq_putc(m, '\"');
1103         }
1104         kfree(context);
1105         return rc;
1106 }
1107
1108 static int selinux_sb_show_options(struct seq_file *m, struct super_block *sb)
1109 {
1110         struct superblock_security_struct *sbsec = selinux_superblock(sb);
1111         int rc;
1112
1113         if (!(sbsec->flags & SE_SBINITIALIZED))
1114                 return 0;
1115
1116         if (!selinux_initialized(&selinux_state))
1117                 return 0;
1118
1119         if (sbsec->flags & FSCONTEXT_MNT) {
1120                 seq_putc(m, ',');
1121                 seq_puts(m, FSCONTEXT_STR);
1122                 rc = show_sid(m, sbsec->sid);
1123                 if (rc)
1124                         return rc;
1125         }
1126         if (sbsec->flags & CONTEXT_MNT) {
1127                 seq_putc(m, ',');
1128                 seq_puts(m, CONTEXT_STR);
1129                 rc = show_sid(m, sbsec->mntpoint_sid);
1130                 if (rc)
1131                         return rc;
1132         }
1133         if (sbsec->flags & DEFCONTEXT_MNT) {
1134                 seq_putc(m, ',');
1135                 seq_puts(m, DEFCONTEXT_STR);
1136                 rc = show_sid(m, sbsec->def_sid);
1137                 if (rc)
1138                         return rc;
1139         }
1140         if (sbsec->flags & ROOTCONTEXT_MNT) {
1141                 struct dentry *root = sb->s_root;
1142                 struct inode_security_struct *isec = backing_inode_security(root);
1143                 seq_putc(m, ',');
1144                 seq_puts(m, ROOTCONTEXT_STR);
1145                 rc = show_sid(m, isec->sid);
1146                 if (rc)
1147                         return rc;
1148         }
1149         if (sbsec->flags & SBLABEL_MNT) {
1150                 seq_putc(m, ',');
1151                 seq_puts(m, SECLABEL_STR);
1152         }
1153         return 0;
1154 }
1155
1156 static inline u16 inode_mode_to_security_class(umode_t mode)
1157 {
1158         switch (mode & S_IFMT) {
1159         case S_IFSOCK:
1160                 return SECCLASS_SOCK_FILE;
1161         case S_IFLNK:
1162                 return SECCLASS_LNK_FILE;
1163         case S_IFREG:
1164                 return SECCLASS_FILE;
1165         case S_IFBLK:
1166                 return SECCLASS_BLK_FILE;
1167         case S_IFDIR:
1168                 return SECCLASS_DIR;
1169         case S_IFCHR:
1170                 return SECCLASS_CHR_FILE;
1171         case S_IFIFO:
1172                 return SECCLASS_FIFO_FILE;
1173
1174         }
1175
1176         return SECCLASS_FILE;
1177 }
1178
1179 static inline int default_protocol_stream(int protocol)
1180 {
1181         return (protocol == IPPROTO_IP || protocol == IPPROTO_TCP ||
1182                 protocol == IPPROTO_MPTCP);
1183 }
1184
1185 static inline int default_protocol_dgram(int protocol)
1186 {
1187         return (protocol == IPPROTO_IP || protocol == IPPROTO_UDP);
1188 }
1189
1190 static inline u16 socket_type_to_security_class(int family, int type, int protocol)
1191 {
1192         int extsockclass = selinux_policycap_extsockclass();
1193
1194         switch (family) {
1195         case PF_UNIX:
1196                 switch (type) {
1197                 case SOCK_STREAM:
1198                 case SOCK_SEQPACKET:
1199                         return SECCLASS_UNIX_STREAM_SOCKET;
1200                 case SOCK_DGRAM:
1201                 case SOCK_RAW:
1202                         return SECCLASS_UNIX_DGRAM_SOCKET;
1203                 }
1204                 break;
1205         case PF_INET:
1206         case PF_INET6:
1207                 switch (type) {
1208                 case SOCK_STREAM:
1209                 case SOCK_SEQPACKET:
1210                         if (default_protocol_stream(protocol))
1211                                 return SECCLASS_TCP_SOCKET;
1212                         else if (extsockclass && protocol == IPPROTO_SCTP)
1213                                 return SECCLASS_SCTP_SOCKET;
1214                         else
1215                                 return SECCLASS_RAWIP_SOCKET;
1216                 case SOCK_DGRAM:
1217                         if (default_protocol_dgram(protocol))
1218                                 return SECCLASS_UDP_SOCKET;
1219                         else if (extsockclass && (protocol == IPPROTO_ICMP ||
1220                                                   protocol == IPPROTO_ICMPV6))
1221                                 return SECCLASS_ICMP_SOCKET;
1222                         else
1223                                 return SECCLASS_RAWIP_SOCKET;
1224                 case SOCK_DCCP:
1225                         return SECCLASS_DCCP_SOCKET;
1226                 default:
1227                         return SECCLASS_RAWIP_SOCKET;
1228                 }
1229                 break;
1230         case PF_NETLINK:
1231                 switch (protocol) {
1232                 case NETLINK_ROUTE:
1233                         return SECCLASS_NETLINK_ROUTE_SOCKET;
1234                 case NETLINK_SOCK_DIAG:
1235                         return SECCLASS_NETLINK_TCPDIAG_SOCKET;
1236                 case NETLINK_NFLOG:
1237                         return SECCLASS_NETLINK_NFLOG_SOCKET;
1238                 case NETLINK_XFRM:
1239                         return SECCLASS_NETLINK_XFRM_SOCKET;
1240                 case NETLINK_SELINUX:
1241                         return SECCLASS_NETLINK_SELINUX_SOCKET;
1242                 case NETLINK_ISCSI:
1243                         return SECCLASS_NETLINK_ISCSI_SOCKET;
1244                 case NETLINK_AUDIT:
1245                         return SECCLASS_NETLINK_AUDIT_SOCKET;
1246                 case NETLINK_FIB_LOOKUP:
1247                         return SECCLASS_NETLINK_FIB_LOOKUP_SOCKET;
1248                 case NETLINK_CONNECTOR:
1249                         return SECCLASS_NETLINK_CONNECTOR_SOCKET;
1250                 case NETLINK_NETFILTER:
1251                         return SECCLASS_NETLINK_NETFILTER_SOCKET;
1252                 case NETLINK_DNRTMSG:
1253                         return SECCLASS_NETLINK_DNRT_SOCKET;
1254                 case NETLINK_KOBJECT_UEVENT:
1255                         return SECCLASS_NETLINK_KOBJECT_UEVENT_SOCKET;
1256                 case NETLINK_GENERIC:
1257                         return SECCLASS_NETLINK_GENERIC_SOCKET;
1258                 case NETLINK_SCSITRANSPORT:
1259                         return SECCLASS_NETLINK_SCSITRANSPORT_SOCKET;
1260                 case NETLINK_RDMA:
1261                         return SECCLASS_NETLINK_RDMA_SOCKET;
1262                 case NETLINK_CRYPTO:
1263                         return SECCLASS_NETLINK_CRYPTO_SOCKET;
1264                 default:
1265                         return SECCLASS_NETLINK_SOCKET;
1266                 }
1267         case PF_PACKET:
1268                 return SECCLASS_PACKET_SOCKET;
1269         case PF_KEY:
1270                 return SECCLASS_KEY_SOCKET;
1271         case PF_APPLETALK:
1272                 return SECCLASS_APPLETALK_SOCKET;
1273         }
1274
1275         if (extsockclass) {
1276                 switch (family) {
1277                 case PF_AX25:
1278                         return SECCLASS_AX25_SOCKET;
1279                 case PF_IPX:
1280                         return SECCLASS_IPX_SOCKET;
1281                 case PF_NETROM:
1282                         return SECCLASS_NETROM_SOCKET;
1283                 case PF_ATMPVC:
1284                         return SECCLASS_ATMPVC_SOCKET;
1285                 case PF_X25:
1286                         return SECCLASS_X25_SOCKET;
1287                 case PF_ROSE:
1288                         return SECCLASS_ROSE_SOCKET;
1289                 case PF_DECnet:
1290                         return SECCLASS_DECNET_SOCKET;
1291                 case PF_ATMSVC:
1292                         return SECCLASS_ATMSVC_SOCKET;
1293                 case PF_RDS:
1294                         return SECCLASS_RDS_SOCKET;
1295                 case PF_IRDA:
1296                         return SECCLASS_IRDA_SOCKET;
1297                 case PF_PPPOX:
1298                         return SECCLASS_PPPOX_SOCKET;
1299                 case PF_LLC:
1300                         return SECCLASS_LLC_SOCKET;
1301                 case PF_CAN:
1302                         return SECCLASS_CAN_SOCKET;
1303                 case PF_TIPC:
1304                         return SECCLASS_TIPC_SOCKET;
1305                 case PF_BLUETOOTH:
1306                         return SECCLASS_BLUETOOTH_SOCKET;
1307                 case PF_IUCV:
1308                         return SECCLASS_IUCV_SOCKET;
1309                 case PF_RXRPC:
1310                         return SECCLASS_RXRPC_SOCKET;
1311                 case PF_ISDN:
1312                         return SECCLASS_ISDN_SOCKET;
1313                 case PF_PHONET:
1314                         return SECCLASS_PHONET_SOCKET;
1315                 case PF_IEEE802154:
1316                         return SECCLASS_IEEE802154_SOCKET;
1317                 case PF_CAIF:
1318                         return SECCLASS_CAIF_SOCKET;
1319                 case PF_ALG:
1320                         return SECCLASS_ALG_SOCKET;
1321                 case PF_NFC:
1322                         return SECCLASS_NFC_SOCKET;
1323                 case PF_VSOCK:
1324                         return SECCLASS_VSOCK_SOCKET;
1325                 case PF_KCM:
1326                         return SECCLASS_KCM_SOCKET;
1327                 case PF_QIPCRTR:
1328                         return SECCLASS_QIPCRTR_SOCKET;
1329                 case PF_SMC:
1330                         return SECCLASS_SMC_SOCKET;
1331                 case PF_XDP:
1332                         return SECCLASS_XDP_SOCKET;
1333 #if PF_MAX > 45
1334 #error New address family defined, please update this function.
1335 #endif
1336                 }
1337         }
1338
1339         return SECCLASS_SOCKET;
1340 }
1341
1342 static int selinux_genfs_get_sid(struct dentry *dentry,
1343                                  u16 tclass,
1344                                  u16 flags,
1345                                  u32 *sid)
1346 {
1347         int rc;
1348         struct super_block *sb = dentry->d_sb;
1349         char *buffer, *path;
1350
1351         buffer = (char *)__get_free_page(GFP_KERNEL);
1352         if (!buffer)
1353                 return -ENOMEM;
1354
1355         path = dentry_path_raw(dentry, buffer, PAGE_SIZE);
1356         if (IS_ERR(path))
1357                 rc = PTR_ERR(path);
1358         else {
1359                 if (flags & SE_SBPROC) {
1360                         /* each process gets a /proc/PID/ entry. Strip off the
1361                          * PID part to get a valid selinux labeling.
1362                          * e.g. /proc/1/net/rpc/nfs -> /net/rpc/nfs */
1363                         while (path[1] >= '0' && path[1] <= '9') {
1364                                 path[1] = '/';
1365                                 path++;
1366                         }
1367                 }
1368                 rc = security_genfs_sid(&selinux_state, sb->s_type->name,
1369                                         path, tclass, sid);
1370                 if (rc == -ENOENT) {
1371                         /* No match in policy, mark as unlabeled. */
1372                         *sid = SECINITSID_UNLABELED;
1373                         rc = 0;
1374                 }
1375         }
1376         free_page((unsigned long)buffer);
1377         return rc;
1378 }
1379
1380 static int inode_doinit_use_xattr(struct inode *inode, struct dentry *dentry,
1381                                   u32 def_sid, u32 *sid)
1382 {
1383 #define INITCONTEXTLEN 255
1384         char *context;
1385         unsigned int len;
1386         int rc;
1387
1388         len = INITCONTEXTLEN;
1389         context = kmalloc(len + 1, GFP_NOFS);
1390         if (!context)
1391                 return -ENOMEM;
1392
1393         context[len] = '\0';
1394         rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, context, len);
1395         if (rc == -ERANGE) {
1396                 kfree(context);
1397
1398                 /* Need a larger buffer.  Query for the right size. */
1399                 rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, NULL, 0);
1400                 if (rc < 0)
1401                         return rc;
1402
1403                 len = rc;
1404                 context = kmalloc(len + 1, GFP_NOFS);
1405                 if (!context)
1406                         return -ENOMEM;
1407
1408                 context[len] = '\0';
1409                 rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX,
1410                                     context, len);
1411         }
1412         if (rc < 0) {
1413                 kfree(context);
1414                 if (rc != -ENODATA) {
1415                         pr_warn("SELinux: %s:  getxattr returned %d for dev=%s ino=%ld\n",
1416                                 __func__, -rc, inode->i_sb->s_id, inode->i_ino);
1417                         return rc;
1418                 }
1419                 *sid = def_sid;
1420                 return 0;
1421         }
1422
1423         rc = security_context_to_sid_default(&selinux_state, context, rc, sid,
1424                                              def_sid, GFP_NOFS);
1425         if (rc) {
1426                 char *dev = inode->i_sb->s_id;
1427                 unsigned long ino = inode->i_ino;
1428
1429                 if (rc == -EINVAL) {
1430                         pr_notice_ratelimited("SELinux: inode=%lu on dev=%s was found to have an invalid context=%s.  This indicates you may need to relabel the inode or the filesystem in question.\n",
1431                                               ino, dev, context);
1432                 } else {
1433                         pr_warn("SELinux: %s:  context_to_sid(%s) returned %d for dev=%s ino=%ld\n",
1434                                 __func__, context, -rc, dev, ino);
1435                 }
1436         }
1437         kfree(context);
1438         return 0;
1439 }
1440
1441 /* The inode's security attributes must be initialized before first use. */
1442 static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dentry)
1443 {
1444         struct superblock_security_struct *sbsec = NULL;
1445         struct inode_security_struct *isec = selinux_inode(inode);
1446         u32 task_sid, sid = 0;
1447         u16 sclass;
1448         struct dentry *dentry;
1449         int rc = 0;
1450
1451         if (isec->initialized == LABEL_INITIALIZED)
1452                 return 0;
1453
1454         spin_lock(&isec->lock);
1455         if (isec->initialized == LABEL_INITIALIZED)
1456                 goto out_unlock;
1457
1458         if (isec->sclass == SECCLASS_FILE)
1459                 isec->sclass = inode_mode_to_security_class(inode->i_mode);
1460
1461         sbsec = selinux_superblock(inode->i_sb);
1462         if (!(sbsec->flags & SE_SBINITIALIZED)) {
1463                 /* Defer initialization until selinux_complete_init,
1464                    after the initial policy is loaded and the security
1465                    server is ready to handle calls. */
1466                 spin_lock(&sbsec->isec_lock);
1467                 if (list_empty(&isec->list))
1468                         list_add(&isec->list, &sbsec->isec_head);
1469                 spin_unlock(&sbsec->isec_lock);
1470                 goto out_unlock;
1471         }
1472
1473         sclass = isec->sclass;
1474         task_sid = isec->task_sid;
1475         sid = isec->sid;
1476         isec->initialized = LABEL_PENDING;
1477         spin_unlock(&isec->lock);
1478
1479         switch (sbsec->behavior) {
1480         case SECURITY_FS_USE_NATIVE:
1481                 break;
1482         case SECURITY_FS_USE_XATTR:
1483                 if (!(inode->i_opflags & IOP_XATTR)) {
1484                         sid = sbsec->def_sid;
1485                         break;
1486                 }
1487                 /* Need a dentry, since the xattr API requires one.
1488                    Life would be simpler if we could just pass the inode. */
1489                 if (opt_dentry) {
1490                         /* Called from d_instantiate or d_splice_alias. */
1491                         dentry = dget(opt_dentry);
1492                 } else {
1493                         /*
1494                          * Called from selinux_complete_init, try to find a dentry.
1495                          * Some filesystems really want a connected one, so try
1496                          * that first.  We could split SECURITY_FS_USE_XATTR in
1497                          * two, depending upon that...
1498                          */
1499                         dentry = d_find_alias(inode);
1500                         if (!dentry)
1501                                 dentry = d_find_any_alias(inode);
1502                 }
1503                 if (!dentry) {
1504                         /*
1505                          * this is can be hit on boot when a file is accessed
1506                          * before the policy is loaded.  When we load policy we
1507                          * may find inodes that have no dentry on the
1508                          * sbsec->isec_head list.  No reason to complain as these
1509                          * will get fixed up the next time we go through
1510                          * inode_doinit with a dentry, before these inodes could
1511                          * be used again by userspace.
1512                          */
1513                         goto out_invalid;
1514                 }
1515
1516                 rc = inode_doinit_use_xattr(inode, dentry, sbsec->def_sid,
1517                                             &sid);
1518                 dput(dentry);
1519                 if (rc)
1520                         goto out;
1521                 break;
1522         case SECURITY_FS_USE_TASK:
1523                 sid = task_sid;
1524                 break;
1525         case SECURITY_FS_USE_TRANS:
1526                 /* Default to the fs SID. */
1527                 sid = sbsec->sid;
1528
1529                 /* Try to obtain a transition SID. */
1530                 rc = security_transition_sid(&selinux_state, task_sid, sid,
1531                                              sclass, NULL, &sid);
1532                 if (rc)
1533                         goto out;
1534                 break;
1535         case SECURITY_FS_USE_MNTPOINT:
1536                 sid = sbsec->mntpoint_sid;
1537                 break;
1538         default:
1539                 /* Default to the fs superblock SID. */
1540                 sid = sbsec->sid;
1541
1542                 if ((sbsec->flags & SE_SBGENFS) &&
1543                      (!S_ISLNK(inode->i_mode) ||
1544                       selinux_policycap_genfs_seclabel_symlinks())) {
1545                         /* We must have a dentry to determine the label on
1546                          * procfs inodes */
1547                         if (opt_dentry) {
1548                                 /* Called from d_instantiate or
1549                                  * d_splice_alias. */
1550                                 dentry = dget(opt_dentry);
1551                         } else {
1552                                 /* Called from selinux_complete_init, try to
1553                                  * find a dentry.  Some filesystems really want
1554                                  * a connected one, so try that first.
1555                                  */
1556                                 dentry = d_find_alias(inode);
1557                                 if (!dentry)
1558                                         dentry = d_find_any_alias(inode);
1559                         }
1560                         /*
1561                          * This can be hit on boot when a file is accessed
1562                          * before the policy is loaded.  When we load policy we
1563                          * may find inodes that have no dentry on the
1564                          * sbsec->isec_head list.  No reason to complain as
1565                          * these will get fixed up the next time we go through
1566                          * inode_doinit() with a dentry, before these inodes
1567                          * could be used again by userspace.
1568                          */
1569                         if (!dentry)
1570                                 goto out_invalid;
1571                         rc = selinux_genfs_get_sid(dentry, sclass,
1572                                                    sbsec->flags, &sid);
1573                         if (rc) {
1574                                 dput(dentry);
1575                                 goto out;
1576                         }
1577
1578                         if ((sbsec->flags & SE_SBGENFS_XATTR) &&
1579                             (inode->i_opflags & IOP_XATTR)) {
1580                                 rc = inode_doinit_use_xattr(inode, dentry,
1581                                                             sid, &sid);
1582                                 if (rc) {
1583                                         dput(dentry);
1584                                         goto out;
1585                                 }
1586                         }
1587                         dput(dentry);
1588                 }
1589                 break;
1590         }
1591
1592 out:
1593         spin_lock(&isec->lock);
1594         if (isec->initialized == LABEL_PENDING) {
1595                 if (rc) {
1596                         isec->initialized = LABEL_INVALID;
1597                         goto out_unlock;
1598                 }
1599                 isec->initialized = LABEL_INITIALIZED;
1600                 isec->sid = sid;
1601         }
1602
1603 out_unlock:
1604         spin_unlock(&isec->lock);
1605         return rc;
1606
1607 out_invalid:
1608         spin_lock(&isec->lock);
1609         if (isec->initialized == LABEL_PENDING) {
1610                 isec->initialized = LABEL_INVALID;
1611                 isec->sid = sid;
1612         }
1613         spin_unlock(&isec->lock);
1614         return 0;
1615 }
1616
1617 /* Convert a Linux signal to an access vector. */
1618 static inline u32 signal_to_av(int sig)
1619 {
1620         u32 perm = 0;
1621
1622         switch (sig) {
1623         case SIGCHLD:
1624                 /* Commonly granted from child to parent. */
1625                 perm = PROCESS__SIGCHLD;
1626                 break;
1627         case SIGKILL:
1628                 /* Cannot be caught or ignored */
1629                 perm = PROCESS__SIGKILL;
1630                 break;
1631         case SIGSTOP:
1632                 /* Cannot be caught or ignored */
1633                 perm = PROCESS__SIGSTOP;
1634                 break;
1635         default:
1636                 /* All other signals. */
1637                 perm = PROCESS__SIGNAL;
1638                 break;
1639         }
1640
1641         return perm;
1642 }
1643
1644 #if CAP_LAST_CAP > 63
1645 #error Fix SELinux to handle capabilities > 63.
1646 #endif
1647
1648 /* Check whether a task is allowed to use a capability. */
1649 static int cred_has_capability(const struct cred *cred,
1650                                int cap, unsigned int opts, bool initns)
1651 {
1652         struct common_audit_data ad;
1653         struct av_decision avd;
1654         u16 sclass;
1655         u32 sid = cred_sid(cred);
1656         u32 av = CAP_TO_MASK(cap);
1657         int rc;
1658
1659         ad.type = LSM_AUDIT_DATA_CAP;
1660         ad.u.cap = cap;
1661
1662         switch (CAP_TO_INDEX(cap)) {
1663         case 0:
1664                 sclass = initns ? SECCLASS_CAPABILITY : SECCLASS_CAP_USERNS;
1665                 break;
1666         case 1:
1667                 sclass = initns ? SECCLASS_CAPABILITY2 : SECCLASS_CAP2_USERNS;
1668                 break;
1669         default:
1670                 pr_err("SELinux:  out of range capability %d\n", cap);
1671                 BUG();
1672                 return -EINVAL;
1673         }
1674
1675         rc = avc_has_perm_noaudit(&selinux_state,
1676                                   sid, sid, sclass, av, 0, &avd);
1677         if (!(opts & CAP_OPT_NOAUDIT)) {
1678                 int rc2 = avc_audit(&selinux_state,
1679                                     sid, sid, sclass, av, &avd, rc, &ad);
1680                 if (rc2)
1681                         return rc2;
1682         }
1683         return rc;
1684 }
1685
1686 /* Check whether a task has a particular permission to an inode.
1687    The 'adp' parameter is optional and allows other audit
1688    data to be passed (e.g. the dentry). */
1689 static int inode_has_perm(const struct cred *cred,
1690                           struct inode *inode,
1691                           u32 perms,
1692                           struct common_audit_data *adp)
1693 {
1694         struct inode_security_struct *isec;
1695         u32 sid;
1696
1697         validate_creds(cred);
1698
1699         if (unlikely(IS_PRIVATE(inode)))
1700                 return 0;
1701
1702         sid = cred_sid(cred);
1703         isec = selinux_inode(inode);
1704
1705         return avc_has_perm(&selinux_state,
1706                             sid, isec->sid, isec->sclass, perms, adp);
1707 }
1708
1709 /* Same as inode_has_perm, but pass explicit audit data containing
1710    the dentry to help the auditing code to more easily generate the
1711    pathname if needed. */
1712 static inline int dentry_has_perm(const struct cred *cred,
1713                                   struct dentry *dentry,
1714                                   u32 av)
1715 {
1716         struct inode *inode = d_backing_inode(dentry);
1717         struct common_audit_data ad;
1718
1719         ad.type = LSM_AUDIT_DATA_DENTRY;
1720         ad.u.dentry = dentry;
1721         __inode_security_revalidate(inode, dentry, true);
1722         return inode_has_perm(cred, inode, av, &ad);
1723 }
1724
1725 /* Same as inode_has_perm, but pass explicit audit data containing
1726    the path to help the auditing code to more easily generate the
1727    pathname if needed. */
1728 static inline int path_has_perm(const struct cred *cred,
1729                                 const struct path *path,
1730                                 u32 av)
1731 {
1732         struct inode *inode = d_backing_inode(path->dentry);
1733         struct common_audit_data ad;
1734
1735         ad.type = LSM_AUDIT_DATA_PATH;
1736         ad.u.path = *path;
1737         __inode_security_revalidate(inode, path->dentry, true);
1738         return inode_has_perm(cred, inode, av, &ad);
1739 }
1740
1741 /* Same as path_has_perm, but uses the inode from the file struct. */
1742 static inline int file_path_has_perm(const struct cred *cred,
1743                                      struct file *file,
1744                                      u32 av)
1745 {
1746         struct common_audit_data ad;
1747
1748         ad.type = LSM_AUDIT_DATA_FILE;
1749         ad.u.file = file;
1750         return inode_has_perm(cred, file_inode(file), av, &ad);
1751 }
1752
1753 #ifdef CONFIG_BPF_SYSCALL
1754 static int bpf_fd_pass(struct file *file, u32 sid);
1755 #endif
1756
1757 /* Check whether a task can use an open file descriptor to
1758    access an inode in a given way.  Check access to the
1759    descriptor itself, and then use dentry_has_perm to
1760    check a particular permission to the file.
1761    Access to the descriptor is implicitly granted if it
1762    has the same SID as the process.  If av is zero, then
1763    access to the file is not checked, e.g. for cases
1764    where only the descriptor is affected like seek. */
1765 static int file_has_perm(const struct cred *cred,
1766                          struct file *file,
1767                          u32 av)
1768 {
1769         struct file_security_struct *fsec = selinux_file(file);
1770         struct inode *inode = file_inode(file);
1771         struct common_audit_data ad;
1772         u32 sid = cred_sid(cred);
1773         int rc;
1774
1775         ad.type = LSM_AUDIT_DATA_FILE;
1776         ad.u.file = file;
1777
1778         if (sid != fsec->sid) {
1779                 rc = avc_has_perm(&selinux_state,
1780                                   sid, fsec->sid,
1781                                   SECCLASS_FD,
1782                                   FD__USE,
1783                                   &ad);
1784                 if (rc)
1785                         goto out;
1786         }
1787
1788 #ifdef CONFIG_BPF_SYSCALL
1789         rc = bpf_fd_pass(file, cred_sid(cred));
1790         if (rc)
1791                 return rc;
1792 #endif
1793
1794         /* av is zero if only checking access to the descriptor. */
1795         rc = 0;
1796         if (av)
1797                 rc = inode_has_perm(cred, inode, av, &ad);
1798
1799 out:
1800         return rc;
1801 }
1802
1803 /*
1804  * Determine the label for an inode that might be unioned.
1805  */
1806 static int
1807 selinux_determine_inode_label(const struct task_security_struct *tsec,
1808                                  struct inode *dir,
1809                                  const struct qstr *name, u16 tclass,
1810                                  u32 *_new_isid)
1811 {
1812         const struct superblock_security_struct *sbsec =
1813                                                 selinux_superblock(dir->i_sb);
1814
1815         if ((sbsec->flags & SE_SBINITIALIZED) &&
1816             (sbsec->behavior == SECURITY_FS_USE_MNTPOINT)) {
1817                 *_new_isid = sbsec->mntpoint_sid;
1818         } else if ((sbsec->flags & SBLABEL_MNT) &&
1819                    tsec->create_sid) {
1820                 *_new_isid = tsec->create_sid;
1821         } else {
1822                 const struct inode_security_struct *dsec = inode_security(dir);
1823                 return security_transition_sid(&selinux_state, tsec->sid,
1824                                                dsec->sid, tclass,
1825                                                name, _new_isid);
1826         }
1827
1828         return 0;
1829 }
1830
1831 /* Check whether a task can create a file. */
1832 static int may_create(struct inode *dir,
1833                       struct dentry *dentry,
1834                       u16 tclass)
1835 {
1836         const struct task_security_struct *tsec = selinux_cred(current_cred());
1837         struct inode_security_struct *dsec;
1838         struct superblock_security_struct *sbsec;
1839         u32 sid, newsid;
1840         struct common_audit_data ad;
1841         int rc;
1842
1843         dsec = inode_security(dir);
1844         sbsec = selinux_superblock(dir->i_sb);
1845
1846         sid = tsec->sid;
1847
1848         ad.type = LSM_AUDIT_DATA_DENTRY;
1849         ad.u.dentry = dentry;
1850
1851         rc = avc_has_perm(&selinux_state,
1852                           sid, dsec->sid, SECCLASS_DIR,
1853                           DIR__ADD_NAME | DIR__SEARCH,
1854                           &ad);
1855         if (rc)
1856                 return rc;
1857
1858         rc = selinux_determine_inode_label(tsec, dir, &dentry->d_name, tclass,
1859                                            &newsid);
1860         if (rc)
1861                 return rc;
1862
1863         rc = avc_has_perm(&selinux_state,
1864                           sid, newsid, tclass, FILE__CREATE, &ad);
1865         if (rc)
1866                 return rc;
1867
1868         return avc_has_perm(&selinux_state,
1869                             newsid, sbsec->sid,
1870                             SECCLASS_FILESYSTEM,
1871                             FILESYSTEM__ASSOCIATE, &ad);
1872 }
1873
1874 #define MAY_LINK        0
1875 #define MAY_UNLINK      1
1876 #define MAY_RMDIR       2
1877
1878 /* Check whether a task can link, unlink, or rmdir a file/directory. */
1879 static int may_link(struct inode *dir,
1880                     struct dentry *dentry,
1881                     int kind)
1882
1883 {
1884         struct inode_security_struct *dsec, *isec;
1885         struct common_audit_data ad;
1886         u32 sid = current_sid();
1887         u32 av;
1888         int rc;
1889
1890         dsec = inode_security(dir);
1891         isec = backing_inode_security(dentry);
1892
1893         ad.type = LSM_AUDIT_DATA_DENTRY;
1894         ad.u.dentry = dentry;
1895
1896         av = DIR__SEARCH;
1897         av |= (kind ? DIR__REMOVE_NAME : DIR__ADD_NAME);
1898         rc = avc_has_perm(&selinux_state,
1899                           sid, dsec->sid, SECCLASS_DIR, av, &ad);
1900         if (rc)
1901                 return rc;
1902
1903         switch (kind) {
1904         case MAY_LINK:
1905                 av = FILE__LINK;
1906                 break;
1907         case MAY_UNLINK:
1908                 av = FILE__UNLINK;
1909                 break;
1910         case MAY_RMDIR:
1911                 av = DIR__RMDIR;
1912                 break;
1913         default:
1914                 pr_warn("SELinux: %s:  unrecognized kind %d\n",
1915                         __func__, kind);
1916                 return 0;
1917         }
1918
1919         rc = avc_has_perm(&selinux_state,
1920                           sid, isec->sid, isec->sclass, av, &ad);
1921         return rc;
1922 }
1923
1924 static inline int may_rename(struct inode *old_dir,
1925                              struct dentry *old_dentry,
1926                              struct inode *new_dir,
1927                              struct dentry *new_dentry)
1928 {
1929         struct inode_security_struct *old_dsec, *new_dsec, *old_isec, *new_isec;
1930         struct common_audit_data ad;
1931         u32 sid = current_sid();
1932         u32 av;
1933         int old_is_dir, new_is_dir;
1934         int rc;
1935
1936         old_dsec = inode_security(old_dir);
1937         old_isec = backing_inode_security(old_dentry);
1938         old_is_dir = d_is_dir(old_dentry);
1939         new_dsec = inode_security(new_dir);
1940
1941         ad.type = LSM_AUDIT_DATA_DENTRY;
1942
1943         ad.u.dentry = old_dentry;
1944         rc = avc_has_perm(&selinux_state,
1945                           sid, old_dsec->sid, SECCLASS_DIR,
1946                           DIR__REMOVE_NAME | DIR__SEARCH, &ad);
1947         if (rc)
1948                 return rc;
1949         rc = avc_has_perm(&selinux_state,
1950                           sid, old_isec->sid,
1951                           old_isec->sclass, FILE__RENAME, &ad);
1952         if (rc)
1953                 return rc;
1954         if (old_is_dir && new_dir != old_dir) {
1955                 rc = avc_has_perm(&selinux_state,
1956                                   sid, old_isec->sid,
1957                                   old_isec->sclass, DIR__REPARENT, &ad);
1958                 if (rc)
1959                         return rc;
1960         }
1961
1962         ad.u.dentry = new_dentry;
1963         av = DIR__ADD_NAME | DIR__SEARCH;
1964         if (d_is_positive(new_dentry))
1965                 av |= DIR__REMOVE_NAME;
1966         rc = avc_has_perm(&selinux_state,
1967                           sid, new_dsec->sid, SECCLASS_DIR, av, &ad);
1968         if (rc)
1969                 return rc;
1970         if (d_is_positive(new_dentry)) {
1971                 new_isec = backing_inode_security(new_dentry);
1972                 new_is_dir = d_is_dir(new_dentry);
1973                 rc = avc_has_perm(&selinux_state,
1974                                   sid, new_isec->sid,
1975                                   new_isec->sclass,
1976                                   (new_is_dir ? DIR__RMDIR : FILE__UNLINK), &ad);
1977                 if (rc)
1978                         return rc;
1979         }
1980
1981         return 0;
1982 }
1983
1984 /* Check whether a task can perform a filesystem operation. */
1985 static int superblock_has_perm(const struct cred *cred,
1986                                struct super_block *sb,
1987                                u32 perms,
1988                                struct common_audit_data *ad)
1989 {
1990         struct superblock_security_struct *sbsec;
1991         u32 sid = cred_sid(cred);
1992
1993         sbsec = selinux_superblock(sb);
1994         return avc_has_perm(&selinux_state,
1995                             sid, sbsec->sid, SECCLASS_FILESYSTEM, perms, ad);
1996 }
1997
1998 /* Convert a Linux mode and permission mask to an access vector. */
1999 static inline u32 file_mask_to_av(int mode, int mask)
2000 {
2001         u32 av = 0;
2002
2003         if (!S_ISDIR(mode)) {
2004                 if (mask & MAY_EXEC)
2005                         av |= FILE__EXECUTE;
2006                 if (mask & MAY_READ)
2007                         av |= FILE__READ;
2008
2009                 if (mask & MAY_APPEND)
2010                         av |= FILE__APPEND;
2011                 else if (mask & MAY_WRITE)
2012                         av |= FILE__WRITE;
2013
2014         } else {
2015                 if (mask & MAY_EXEC)
2016                         av |= DIR__SEARCH;
2017                 if (mask & MAY_WRITE)
2018                         av |= DIR__WRITE;
2019                 if (mask & MAY_READ)
2020                         av |= DIR__READ;
2021         }
2022
2023         return av;
2024 }
2025
2026 /* Convert a Linux file to an access vector. */
2027 static inline u32 file_to_av(struct file *file)
2028 {
2029         u32 av = 0;
2030
2031         if (file->f_mode & FMODE_READ)
2032                 av |= FILE__READ;
2033         if (file->f_mode & FMODE_WRITE) {
2034                 if (file->f_flags & O_APPEND)
2035                         av |= FILE__APPEND;
2036                 else
2037                         av |= FILE__WRITE;
2038         }
2039         if (!av) {
2040                 /*
2041                  * Special file opened with flags 3 for ioctl-only use.
2042                  */
2043                 av = FILE__IOCTL;
2044         }
2045
2046         return av;
2047 }
2048
2049 /*
2050  * Convert a file to an access vector and include the correct
2051  * open permission.
2052  */
2053 static inline u32 open_file_to_av(struct file *file)
2054 {
2055         u32 av = file_to_av(file);
2056         struct inode *inode = file_inode(file);
2057
2058         if (selinux_policycap_openperm() &&
2059             inode->i_sb->s_magic != SOCKFS_MAGIC)
2060                 av |= FILE__OPEN;
2061
2062         return av;
2063 }
2064
2065 /* Hook functions begin here. */
2066
2067 static int selinux_binder_set_context_mgr(struct task_struct *mgr)
2068 {
2069         return avc_has_perm(&selinux_state,
2070                             current_sid(), task_sid_binder(mgr), SECCLASS_BINDER,
2071                             BINDER__SET_CONTEXT_MGR, NULL);
2072 }
2073
2074 static int selinux_binder_transaction(struct task_struct *from,
2075                                       struct task_struct *to)
2076 {
2077         u32 mysid = current_sid();
2078         u32 fromsid = task_sid_binder(from);
2079         int rc;
2080
2081         if (mysid != fromsid) {
2082                 rc = avc_has_perm(&selinux_state,
2083                                   mysid, fromsid, SECCLASS_BINDER,
2084                                   BINDER__IMPERSONATE, NULL);
2085                 if (rc)
2086                         return rc;
2087         }
2088
2089         return avc_has_perm(&selinux_state, fromsid, task_sid_binder(to),
2090                             SECCLASS_BINDER, BINDER__CALL, NULL);
2091 }
2092
2093 static int selinux_binder_transfer_binder(struct task_struct *from,
2094                                           struct task_struct *to)
2095 {
2096         return avc_has_perm(&selinux_state,
2097                             task_sid_binder(from), task_sid_binder(to),
2098                             SECCLASS_BINDER, BINDER__TRANSFER,
2099                             NULL);
2100 }
2101
2102 static int selinux_binder_transfer_file(struct task_struct *from,
2103                                         struct task_struct *to,
2104                                         struct file *file)
2105 {
2106         u32 sid = task_sid_binder(to);
2107         struct file_security_struct *fsec = selinux_file(file);
2108         struct dentry *dentry = file->f_path.dentry;
2109         struct inode_security_struct *isec;
2110         struct common_audit_data ad;
2111         int rc;
2112
2113         ad.type = LSM_AUDIT_DATA_PATH;
2114         ad.u.path = file->f_path;
2115
2116         if (sid != fsec->sid) {
2117                 rc = avc_has_perm(&selinux_state,
2118                                   sid, fsec->sid,
2119                                   SECCLASS_FD,
2120                                   FD__USE,
2121                                   &ad);
2122                 if (rc)
2123                         return rc;
2124         }
2125
2126 #ifdef CONFIG_BPF_SYSCALL
2127         rc = bpf_fd_pass(file, sid);
2128         if (rc)
2129                 return rc;
2130 #endif
2131
2132         if (unlikely(IS_PRIVATE(d_backing_inode(dentry))))
2133                 return 0;
2134
2135         isec = backing_inode_security(dentry);
2136         return avc_has_perm(&selinux_state,
2137                             sid, isec->sid, isec->sclass, file_to_av(file),
2138                             &ad);
2139 }
2140
2141 static int selinux_ptrace_access_check(struct task_struct *child,
2142                                        unsigned int mode)
2143 {
2144         u32 sid = current_sid();
2145         u32 csid = task_sid_obj(child);
2146
2147         if (mode & PTRACE_MODE_READ)
2148                 return avc_has_perm(&selinux_state,
2149                                     sid, csid, SECCLASS_FILE, FILE__READ, NULL);
2150
2151         return avc_has_perm(&selinux_state,
2152                             sid, csid, SECCLASS_PROCESS, PROCESS__PTRACE, NULL);
2153 }
2154
2155 static int selinux_ptrace_traceme(struct task_struct *parent)
2156 {
2157         return avc_has_perm(&selinux_state,
2158                             task_sid_subj(parent), task_sid_obj(current),
2159                             SECCLASS_PROCESS, PROCESS__PTRACE, NULL);
2160 }
2161
2162 static int selinux_capget(struct task_struct *target, kernel_cap_t *effective,
2163                           kernel_cap_t *inheritable, kernel_cap_t *permitted)
2164 {
2165         return avc_has_perm(&selinux_state,
2166                             current_sid(), task_sid_obj(target), SECCLASS_PROCESS,
2167                             PROCESS__GETCAP, NULL);
2168 }
2169
2170 static int selinux_capset(struct cred *new, const struct cred *old,
2171                           const kernel_cap_t *effective,
2172                           const kernel_cap_t *inheritable,
2173                           const kernel_cap_t *permitted)
2174 {
2175         return avc_has_perm(&selinux_state,
2176                             cred_sid(old), cred_sid(new), SECCLASS_PROCESS,
2177                             PROCESS__SETCAP, NULL);
2178 }
2179
2180 /*
2181  * (This comment used to live with the selinux_task_setuid hook,
2182  * which was removed).
2183  *
2184  * Since setuid only affects the current process, and since the SELinux
2185  * controls are not based on the Linux identity attributes, SELinux does not
2186  * need to control this operation.  However, SELinux does control the use of
2187  * the CAP_SETUID and CAP_SETGID capabilities using the capable hook.
2188  */
2189
2190 static int selinux_capable(const struct cred *cred, struct user_namespace *ns,
2191                            int cap, unsigned int opts)
2192 {
2193         return cred_has_capability(cred, cap, opts, ns == &init_user_ns);
2194 }
2195
2196 static int selinux_quotactl(int cmds, int type, int id, struct super_block *sb)
2197 {
2198         const struct cred *cred = current_cred();
2199         int rc = 0;
2200
2201         if (!sb)
2202                 return 0;
2203
2204         switch (cmds) {
2205         case Q_SYNC:
2206         case Q_QUOTAON:
2207         case Q_QUOTAOFF:
2208         case Q_SETINFO:
2209         case Q_SETQUOTA:
2210         case Q_XQUOTAOFF:
2211         case Q_XQUOTAON:
2212         case Q_XSETQLIM:
2213                 rc = superblock_has_perm(cred, sb, FILESYSTEM__QUOTAMOD, NULL);
2214                 break;
2215         case Q_GETFMT:
2216         case Q_GETINFO:
2217         case Q_GETQUOTA:
2218         case Q_XGETQUOTA:
2219         case Q_XGETQSTAT:
2220         case Q_XGETQSTATV:
2221         case Q_XGETNEXTQUOTA:
2222                 rc = superblock_has_perm(cred, sb, FILESYSTEM__QUOTAGET, NULL);
2223                 break;
2224         default:
2225                 rc = 0;  /* let the kernel handle invalid cmds */
2226                 break;
2227         }
2228         return rc;
2229 }
2230
2231 static int selinux_quota_on(struct dentry *dentry)
2232 {
2233         const struct cred *cred = current_cred();
2234
2235         return dentry_has_perm(cred, dentry, FILE__QUOTAON);
2236 }
2237
2238 static int selinux_syslog(int type)
2239 {
2240         switch (type) {
2241         case SYSLOG_ACTION_READ_ALL:    /* Read last kernel messages */
2242         case SYSLOG_ACTION_SIZE_BUFFER: /* Return size of the log buffer */
2243                 return avc_has_perm(&selinux_state,
2244                                     current_sid(), SECINITSID_KERNEL,
2245                                     SECCLASS_SYSTEM, SYSTEM__SYSLOG_READ, NULL);
2246         case SYSLOG_ACTION_CONSOLE_OFF: /* Disable logging to console */
2247         case SYSLOG_ACTION_CONSOLE_ON:  /* Enable logging to console */
2248         /* Set level of messages printed to console */
2249         case SYSLOG_ACTION_CONSOLE_LEVEL:
2250                 return avc_has_perm(&selinux_state,
2251                                     current_sid(), SECINITSID_KERNEL,
2252                                     SECCLASS_SYSTEM, SYSTEM__SYSLOG_CONSOLE,
2253                                     NULL);
2254         }
2255         /* All other syslog types */
2256         return avc_has_perm(&selinux_state,
2257                             current_sid(), SECINITSID_KERNEL,
2258                             SECCLASS_SYSTEM, SYSTEM__SYSLOG_MOD, NULL);
2259 }
2260
2261 /*
2262  * Check that a process has enough memory to allocate a new virtual
2263  * mapping. 0 means there is enough memory for the allocation to
2264  * succeed and -ENOMEM implies there is not.
2265  *
2266  * Do not audit the selinux permission check, as this is applied to all
2267  * processes that allocate mappings.
2268  */
2269 static int selinux_vm_enough_memory(struct mm_struct *mm, long pages)
2270 {
2271         int rc, cap_sys_admin = 0;
2272
2273         rc = cred_has_capability(current_cred(), CAP_SYS_ADMIN,
2274                                  CAP_OPT_NOAUDIT, true);
2275         if (rc == 0)
2276                 cap_sys_admin = 1;
2277
2278         return cap_sys_admin;
2279 }
2280
2281 /* binprm security operations */
2282
2283 static u32 ptrace_parent_sid(void)
2284 {
2285         u32 sid = 0;
2286         struct task_struct *tracer;
2287
2288         rcu_read_lock();
2289         tracer = ptrace_parent(current);
2290         if (tracer)
2291                 sid = task_sid_obj(tracer);
2292         rcu_read_unlock();
2293
2294         return sid;
2295 }
2296
2297 static int check_nnp_nosuid(const struct linux_binprm *bprm,
2298                             const struct task_security_struct *old_tsec,
2299                             const struct task_security_struct *new_tsec)
2300 {
2301         int nnp = (bprm->unsafe & LSM_UNSAFE_NO_NEW_PRIVS);
2302         int nosuid = !mnt_may_suid(bprm->file->f_path.mnt);
2303         int rc;
2304         u32 av;
2305
2306         if (!nnp && !nosuid)
2307                 return 0; /* neither NNP nor nosuid */
2308
2309         if (new_tsec->sid == old_tsec->sid)
2310                 return 0; /* No change in credentials */
2311
2312         /*
2313          * If the policy enables the nnp_nosuid_transition policy capability,
2314          * then we permit transitions under NNP or nosuid if the
2315          * policy allows the corresponding permission between
2316          * the old and new contexts.
2317          */
2318         if (selinux_policycap_nnp_nosuid_transition()) {
2319                 av = 0;
2320                 if (nnp)
2321                         av |= PROCESS2__NNP_TRANSITION;
2322                 if (nosuid)
2323                         av |= PROCESS2__NOSUID_TRANSITION;
2324                 rc = avc_has_perm(&selinux_state,
2325                                   old_tsec->sid, new_tsec->sid,
2326                                   SECCLASS_PROCESS2, av, NULL);
2327                 if (!rc)
2328                         return 0;
2329         }
2330
2331         /*
2332          * We also permit NNP or nosuid transitions to bounded SIDs,
2333          * i.e. SIDs that are guaranteed to only be allowed a subset
2334          * of the permissions of the current SID.
2335          */
2336         rc = security_bounded_transition(&selinux_state, old_tsec->sid,
2337                                          new_tsec->sid);
2338         if (!rc)
2339                 return 0;
2340
2341         /*
2342          * On failure, preserve the errno values for NNP vs nosuid.
2343          * NNP:  Operation not permitted for caller.
2344          * nosuid:  Permission denied to file.
2345          */
2346         if (nnp)
2347                 return -EPERM;
2348         return -EACCES;
2349 }
2350
2351 static int selinux_bprm_creds_for_exec(struct linux_binprm *bprm)
2352 {
2353         const struct task_security_struct *old_tsec;
2354         struct task_security_struct *new_tsec;
2355         struct inode_security_struct *isec;
2356         struct common_audit_data ad;
2357         struct inode *inode = file_inode(bprm->file);
2358         int rc;
2359
2360         /* SELinux context only depends on initial program or script and not
2361          * the script interpreter */
2362
2363         old_tsec = selinux_cred(current_cred());
2364         new_tsec = selinux_cred(bprm->cred);
2365         isec = inode_security(inode);
2366
2367         /* Default to the current task SID. */
2368         new_tsec->sid = old_tsec->sid;
2369         new_tsec->osid = old_tsec->sid;
2370
2371         /* Reset fs, key, and sock SIDs on execve. */
2372         new_tsec->create_sid = 0;
2373         new_tsec->keycreate_sid = 0;
2374         new_tsec->sockcreate_sid = 0;
2375
2376         if (old_tsec->exec_sid) {
2377                 new_tsec->sid = old_tsec->exec_sid;
2378                 /* Reset exec SID on execve. */
2379                 new_tsec->exec_sid = 0;
2380
2381                 /* Fail on NNP or nosuid if not an allowed transition. */
2382                 rc = check_nnp_nosuid(bprm, old_tsec, new_tsec);
2383                 if (rc)
2384                         return rc;
2385         } else {
2386                 /* Check for a default transition on this program. */
2387                 rc = security_transition_sid(&selinux_state, old_tsec->sid,
2388                                              isec->sid, SECCLASS_PROCESS, NULL,
2389                                              &new_tsec->sid);
2390                 if (rc)
2391                         return rc;
2392
2393                 /*
2394                  * Fallback to old SID on NNP or nosuid if not an allowed
2395                  * transition.
2396                  */
2397                 rc = check_nnp_nosuid(bprm, old_tsec, new_tsec);
2398                 if (rc)
2399                         new_tsec->sid = old_tsec->sid;
2400         }
2401
2402         ad.type = LSM_AUDIT_DATA_FILE;
2403         ad.u.file = bprm->file;
2404
2405         if (new_tsec->sid == old_tsec->sid) {
2406                 rc = avc_has_perm(&selinux_state,
2407                                   old_tsec->sid, isec->sid,
2408                                   SECCLASS_FILE, FILE__EXECUTE_NO_TRANS, &ad);
2409                 if (rc)
2410                         return rc;
2411         } else {
2412                 /* Check permissions for the transition. */
2413                 rc = avc_has_perm(&selinux_state,
2414                                   old_tsec->sid, new_tsec->sid,
2415                                   SECCLASS_PROCESS, PROCESS__TRANSITION, &ad);
2416                 if (rc)
2417                         return rc;
2418
2419                 rc = avc_has_perm(&selinux_state,
2420                                   new_tsec->sid, isec->sid,
2421                                   SECCLASS_FILE, FILE__ENTRYPOINT, &ad);
2422                 if (rc)
2423                         return rc;
2424
2425                 /* Check for shared state */
2426                 if (bprm->unsafe & LSM_UNSAFE_SHARE) {
2427                         rc = avc_has_perm(&selinux_state,
2428                                           old_tsec->sid, new_tsec->sid,
2429                                           SECCLASS_PROCESS, PROCESS__SHARE,
2430                                           NULL);
2431                         if (rc)
2432                                 return -EPERM;
2433                 }
2434
2435                 /* Make sure that anyone attempting to ptrace over a task that
2436                  * changes its SID has the appropriate permit */
2437                 if (bprm->unsafe & LSM_UNSAFE_PTRACE) {
2438                         u32 ptsid = ptrace_parent_sid();
2439                         if (ptsid != 0) {
2440                                 rc = avc_has_perm(&selinux_state,
2441                                                   ptsid, new_tsec->sid,
2442                                                   SECCLASS_PROCESS,
2443                                                   PROCESS__PTRACE, NULL);
2444                                 if (rc)
2445                                         return -EPERM;
2446                         }
2447                 }
2448
2449                 /* Clear any possibly unsafe personality bits on exec: */
2450                 bprm->per_clear |= PER_CLEAR_ON_SETID;
2451
2452                 /* Enable secure mode for SIDs transitions unless
2453                    the noatsecure permission is granted between
2454                    the two SIDs, i.e. ahp returns 0. */
2455                 rc = avc_has_perm(&selinux_state,
2456                                   old_tsec->sid, new_tsec->sid,
2457                                   SECCLASS_PROCESS, PROCESS__NOATSECURE,
2458                                   NULL);
2459                 bprm->secureexec |= !!rc;
2460         }
2461
2462         return 0;
2463 }
2464
2465 static int match_file(const void *p, struct file *file, unsigned fd)
2466 {
2467         return file_has_perm(p, file, file_to_av(file)) ? fd + 1 : 0;
2468 }
2469
2470 /* Derived from fs/exec.c:flush_old_files. */
2471 static inline void flush_unauthorized_files(const struct cred *cred,
2472                                             struct files_struct *files)
2473 {
2474         struct file *file, *devnull = NULL;
2475         struct tty_struct *tty;
2476         int drop_tty = 0;
2477         unsigned n;
2478
2479         tty = get_current_tty();
2480         if (tty) {
2481                 spin_lock(&tty->files_lock);
2482                 if (!list_empty(&tty->tty_files)) {
2483                         struct tty_file_private *file_priv;
2484
2485                         /* Revalidate access to controlling tty.
2486                            Use file_path_has_perm on the tty path directly
2487                            rather than using file_has_perm, as this particular
2488                            open file may belong to another process and we are
2489                            only interested in the inode-based check here. */
2490                         file_priv = list_first_entry(&tty->tty_files,
2491                                                 struct tty_file_private, list);
2492                         file = file_priv->file;
2493                         if (file_path_has_perm(cred, file, FILE__READ | FILE__WRITE))
2494                                 drop_tty = 1;
2495                 }
2496                 spin_unlock(&tty->files_lock);
2497                 tty_kref_put(tty);
2498         }
2499         /* Reset controlling tty. */
2500         if (drop_tty)
2501                 no_tty();
2502
2503         /* Revalidate access to inherited open files. */
2504         n = iterate_fd(files, 0, match_file, cred);
2505         if (!n) /* none found? */
2506                 return;
2507
2508         devnull = dentry_open(&selinux_null, O_RDWR, cred);
2509         if (IS_ERR(devnull))
2510                 devnull = NULL;
2511         /* replace all the matching ones with this */
2512         do {
2513                 replace_fd(n - 1, devnull, 0);
2514         } while ((n = iterate_fd(files, n, match_file, cred)) != 0);
2515         if (devnull)
2516                 fput(devnull);
2517 }
2518
2519 /*
2520  * Prepare a process for imminent new credential changes due to exec
2521  */
2522 static void selinux_bprm_committing_creds(struct linux_binprm *bprm)
2523 {
2524         struct task_security_struct *new_tsec;
2525         struct rlimit *rlim, *initrlim;
2526         int rc, i;
2527
2528         new_tsec = selinux_cred(bprm->cred);
2529         if (new_tsec->sid == new_tsec->osid)
2530                 return;
2531
2532         /* Close files for which the new task SID is not authorized. */
2533         flush_unauthorized_files(bprm->cred, current->files);
2534
2535         /* Always clear parent death signal on SID transitions. */
2536         current->pdeath_signal = 0;
2537
2538         /* Check whether the new SID can inherit resource limits from the old
2539          * SID.  If not, reset all soft limits to the lower of the current
2540          * task's hard limit and the init task's soft limit.
2541          *
2542          * Note that the setting of hard limits (even to lower them) can be
2543          * controlled by the setrlimit check.  The inclusion of the init task's
2544          * soft limit into the computation is to avoid resetting soft limits
2545          * higher than the default soft limit for cases where the default is
2546          * lower than the hard limit, e.g. RLIMIT_CORE or RLIMIT_STACK.
2547          */
2548         rc = avc_has_perm(&selinux_state,
2549                           new_tsec->osid, new_tsec->sid, SECCLASS_PROCESS,
2550                           PROCESS__RLIMITINH, NULL);
2551         if (rc) {
2552                 /* protect against do_prlimit() */
2553                 task_lock(current);
2554                 for (i = 0; i < RLIM_NLIMITS; i++) {
2555                         rlim = current->signal->rlim + i;
2556                         initrlim = init_task.signal->rlim + i;
2557                         rlim->rlim_cur = min(rlim->rlim_max, initrlim->rlim_cur);
2558                 }
2559                 task_unlock(current);
2560                 if (IS_ENABLED(CONFIG_POSIX_TIMERS))
2561                         update_rlimit_cpu(current, rlimit(RLIMIT_CPU));
2562         }
2563 }
2564
2565 /*
2566  * Clean up the process immediately after the installation of new credentials
2567  * due to exec
2568  */
2569 static void selinux_bprm_committed_creds(struct linux_binprm *bprm)
2570 {
2571         const struct task_security_struct *tsec = selinux_cred(current_cred());
2572         u32 osid, sid;
2573         int rc;
2574
2575         osid = tsec->osid;
2576         sid = tsec->sid;
2577
2578         if (sid == osid)
2579                 return;
2580
2581         /* Check whether the new SID can inherit signal state from the old SID.
2582          * If not, clear itimers to avoid subsequent signal generation and
2583          * flush and unblock signals.
2584          *
2585          * This must occur _after_ the task SID has been updated so that any
2586          * kill done after the flush will be checked against the new SID.
2587          */
2588         rc = avc_has_perm(&selinux_state,
2589                           osid, sid, SECCLASS_PROCESS, PROCESS__SIGINH, NULL);
2590         if (rc) {
2591                 clear_itimer();
2592
2593                 spin_lock_irq(&current->sighand->siglock);
2594                 if (!fatal_signal_pending(current)) {
2595                         flush_sigqueue(&current->pending);
2596                         flush_sigqueue(&current->signal->shared_pending);
2597                         flush_signal_handlers(current, 1);
2598                         sigemptyset(&current->blocked);
2599                         recalc_sigpending();
2600                 }
2601                 spin_unlock_irq(&current->sighand->siglock);
2602         }
2603
2604         /* Wake up the parent if it is waiting so that it can recheck
2605          * wait permission to the new task SID. */
2606         read_lock(&tasklist_lock);
2607         __wake_up_parent(current, current->real_parent);
2608         read_unlock(&tasklist_lock);
2609 }
2610
2611 /* superblock security operations */
2612
2613 static int selinux_sb_alloc_security(struct super_block *sb)
2614 {
2615         struct superblock_security_struct *sbsec = selinux_superblock(sb);
2616
2617         mutex_init(&sbsec->lock);
2618         INIT_LIST_HEAD(&sbsec->isec_head);
2619         spin_lock_init(&sbsec->isec_lock);
2620         sbsec->sid = SECINITSID_UNLABELED;
2621         sbsec->def_sid = SECINITSID_FILE;
2622         sbsec->mntpoint_sid = SECINITSID_UNLABELED;
2623
2624         return 0;
2625 }
2626
2627 static inline int opt_len(const char *s)
2628 {
2629         bool open_quote = false;
2630         int len;
2631         char c;
2632
2633         for (len = 0; (c = s[len]) != '\0'; len++) {
2634                 if (c == '"')
2635                         open_quote = !open_quote;
2636                 if (c == ',' && !open_quote)
2637                         break;
2638         }
2639         return len;
2640 }
2641
2642 static int selinux_sb_eat_lsm_opts(char *options, void **mnt_opts)
2643 {
2644         char *from = options;
2645         char *to = options;
2646         bool first = true;
2647         int rc;
2648
2649         while (1) {
2650                 int len = opt_len(from);
2651                 int token;
2652                 char *arg = NULL;
2653
2654                 token = match_opt_prefix(from, len, &arg);
2655
2656                 if (token != Opt_error) {
2657                         char *p, *q;
2658
2659                         /* strip quotes */
2660                         if (arg) {
2661                                 for (p = q = arg; p < from + len; p++) {
2662                                         char c = *p;
2663                                         if (c != '"')
2664                                                 *q++ = c;
2665                                 }
2666                                 arg = kmemdup_nul(arg, q - arg, GFP_KERNEL);
2667                                 if (!arg) {
2668                                         rc = -ENOMEM;
2669                                         goto free_opt;
2670                                 }
2671                         }
2672                         rc = selinux_add_opt(token, arg, mnt_opts);
2673                         if (unlikely(rc)) {
2674                                 kfree(arg);
2675                                 goto free_opt;
2676                         }
2677                 } else {
2678                         if (!first) {   // copy with preceding comma
2679                                 from--;
2680                                 len++;
2681                         }
2682                         if (to != from)
2683                                 memmove(to, from, len);
2684                         to += len;
2685                         first = false;
2686                 }
2687                 if (!from[len])
2688                         break;
2689                 from += len + 1;
2690         }
2691         *to = '\0';
2692         return 0;
2693
2694 free_opt:
2695         if (*mnt_opts) {
2696                 selinux_free_mnt_opts(*mnt_opts);
2697                 *mnt_opts = NULL;
2698         }
2699         return rc;
2700 }
2701
2702 static int selinux_sb_mnt_opts_compat(struct super_block *sb, void *mnt_opts)
2703 {
2704         struct selinux_mnt_opts *opts = mnt_opts;
2705         struct superblock_security_struct *sbsec = sb->s_security;
2706         u32 sid;
2707         int rc;
2708
2709         /*
2710          * Superblock not initialized (i.e. no options) - reject if any
2711          * options specified, otherwise accept.
2712          */
2713         if (!(sbsec->flags & SE_SBINITIALIZED))
2714                 return opts ? 1 : 0;
2715
2716         /*
2717          * Superblock initialized and no options specified - reject if
2718          * superblock has any options set, otherwise accept.
2719          */
2720         if (!opts)
2721                 return (sbsec->flags & SE_MNTMASK) ? 1 : 0;
2722
2723         if (opts->fscontext) {
2724                 rc = parse_sid(sb, opts->fscontext, &sid);
2725                 if (rc)
2726                         return 1;
2727                 if (bad_option(sbsec, FSCONTEXT_MNT, sbsec->sid, sid))
2728                         return 1;
2729         }
2730         if (opts->context) {
2731                 rc = parse_sid(sb, opts->context, &sid);
2732                 if (rc)
2733                         return 1;
2734                 if (bad_option(sbsec, CONTEXT_MNT, sbsec->mntpoint_sid, sid))
2735                         return 1;
2736         }
2737         if (opts->rootcontext) {
2738                 struct inode_security_struct *root_isec;
2739
2740                 root_isec = backing_inode_security(sb->s_root);
2741                 rc = parse_sid(sb, opts->rootcontext, &sid);
2742                 if (rc)
2743                         return 1;
2744                 if (bad_option(sbsec, ROOTCONTEXT_MNT, root_isec->sid, sid))
2745                         return 1;
2746         }
2747         if (opts->defcontext) {
2748                 rc = parse_sid(sb, opts->defcontext, &sid);
2749                 if (rc)
2750                         return 1;
2751                 if (bad_option(sbsec, DEFCONTEXT_MNT, sbsec->def_sid, sid))
2752                         return 1;
2753         }
2754         return 0;
2755 }
2756
2757 static int selinux_sb_remount(struct super_block *sb, void *mnt_opts)
2758 {
2759         struct selinux_mnt_opts *opts = mnt_opts;
2760         struct superblock_security_struct *sbsec = selinux_superblock(sb);
2761         u32 sid;
2762         int rc;
2763
2764         if (!(sbsec->flags & SE_SBINITIALIZED))
2765                 return 0;
2766
2767         if (!opts)
2768                 return 0;
2769
2770         if (opts->fscontext) {
2771                 rc = parse_sid(sb, opts->fscontext, &sid);
2772                 if (rc)
2773                         return rc;
2774                 if (bad_option(sbsec, FSCONTEXT_MNT, sbsec->sid, sid))
2775                         goto out_bad_option;
2776         }
2777         if (opts->context) {
2778                 rc = parse_sid(sb, opts->context, &sid);
2779                 if (rc)
2780                         return rc;
2781                 if (bad_option(sbsec, CONTEXT_MNT, sbsec->mntpoint_sid, sid))
2782                         goto out_bad_option;
2783         }
2784         if (opts->rootcontext) {
2785                 struct inode_security_struct *root_isec;
2786                 root_isec = backing_inode_security(sb->s_root);
2787                 rc = parse_sid(sb, opts->rootcontext, &sid);
2788                 if (rc)
2789                         return rc;
2790                 if (bad_option(sbsec, ROOTCONTEXT_MNT, root_isec->sid, sid))
2791                         goto out_bad_option;
2792         }
2793         if (opts->defcontext) {
2794                 rc = parse_sid(sb, opts->defcontext, &sid);
2795                 if (rc)
2796                         return rc;
2797                 if (bad_option(sbsec, DEFCONTEXT_MNT, sbsec->def_sid, sid))
2798                         goto out_bad_option;
2799         }
2800         return 0;
2801
2802 out_bad_option:
2803         pr_warn("SELinux: unable to change security options "
2804                "during remount (dev %s, type=%s)\n", sb->s_id,
2805                sb->s_type->name);
2806         return -EINVAL;
2807 }
2808
2809 static int selinux_sb_kern_mount(struct super_block *sb)
2810 {
2811         const struct cred *cred = current_cred();
2812         struct common_audit_data ad;
2813
2814         ad.type = LSM_AUDIT_DATA_DENTRY;
2815         ad.u.dentry = sb->s_root;
2816         return superblock_has_perm(cred, sb, FILESYSTEM__MOUNT, &ad);
2817 }
2818
2819 static int selinux_sb_statfs(struct dentry *dentry)
2820 {
2821         const struct cred *cred = current_cred();
2822         struct common_audit_data ad;
2823
2824         ad.type = LSM_AUDIT_DATA_DENTRY;
2825         ad.u.dentry = dentry->d_sb->s_root;
2826         return superblock_has_perm(cred, dentry->d_sb, FILESYSTEM__GETATTR, &ad);
2827 }
2828
2829 static int selinux_mount(const char *dev_name,
2830                          const struct path *path,
2831                          const char *type,
2832                          unsigned long flags,
2833                          void *data)
2834 {
2835         const struct cred *cred = current_cred();
2836
2837         if (flags & MS_REMOUNT)
2838                 return superblock_has_perm(cred, path->dentry->d_sb,
2839                                            FILESYSTEM__REMOUNT, NULL);
2840         else
2841                 return path_has_perm(cred, path, FILE__MOUNTON);
2842 }
2843
2844 static int selinux_move_mount(const struct path *from_path,
2845                               const struct path *to_path)
2846 {
2847         const struct cred *cred = current_cred();
2848
2849         return path_has_perm(cred, to_path, FILE__MOUNTON);
2850 }
2851
2852 static int selinux_umount(struct vfsmount *mnt, int flags)
2853 {
2854         const struct cred *cred = current_cred();
2855
2856         return superblock_has_perm(cred, mnt->mnt_sb,
2857                                    FILESYSTEM__UNMOUNT, NULL);
2858 }
2859
2860 static int selinux_fs_context_dup(struct fs_context *fc,
2861                                   struct fs_context *src_fc)
2862 {
2863         const struct selinux_mnt_opts *src = src_fc->security;
2864         struct selinux_mnt_opts *opts;
2865
2866         if (!src)
2867                 return 0;
2868
2869         fc->security = kzalloc(sizeof(struct selinux_mnt_opts), GFP_KERNEL);
2870         if (!fc->security)
2871                 return -ENOMEM;
2872
2873         opts = fc->security;
2874
2875         if (src->fscontext) {
2876                 opts->fscontext = kstrdup(src->fscontext, GFP_KERNEL);
2877                 if (!opts->fscontext)
2878                         return -ENOMEM;
2879         }
2880         if (src->context) {
2881                 opts->context = kstrdup(src->context, GFP_KERNEL);
2882                 if (!opts->context)
2883                         return -ENOMEM;
2884         }
2885         if (src->rootcontext) {
2886                 opts->rootcontext = kstrdup(src->rootcontext, GFP_KERNEL);
2887                 if (!opts->rootcontext)
2888                         return -ENOMEM;
2889         }
2890         if (src->defcontext) {
2891                 opts->defcontext = kstrdup(src->defcontext, GFP_KERNEL);
2892                 if (!opts->defcontext)
2893                         return -ENOMEM;
2894         }
2895         return 0;
2896 }
2897
2898 static const struct fs_parameter_spec selinux_fs_parameters[] = {
2899         fsparam_string(CONTEXT_STR,     Opt_context),
2900         fsparam_string(DEFCONTEXT_STR,  Opt_defcontext),
2901         fsparam_string(FSCONTEXT_STR,   Opt_fscontext),
2902         fsparam_string(ROOTCONTEXT_STR, Opt_rootcontext),
2903         fsparam_flag  (SECLABEL_STR,    Opt_seclabel),
2904         {}
2905 };
2906
2907 static int selinux_fs_context_parse_param(struct fs_context *fc,
2908                                           struct fs_parameter *param)
2909 {
2910         struct fs_parse_result result;
2911         int opt, rc;
2912
2913         opt = fs_parse(fc, selinux_fs_parameters, param, &result);
2914         if (opt < 0)
2915                 return opt;
2916
2917         rc = selinux_add_opt(opt, param->string, &fc->security);
2918         if (!rc) {
2919                 param->string = NULL;
2920                 rc = 1;
2921         }
2922         return rc;
2923 }
2924
2925 /* inode security operations */
2926
2927 static int selinux_inode_alloc_security(struct inode *inode)
2928 {
2929         struct inode_security_struct *isec = selinux_inode(inode);
2930         u32 sid = current_sid();
2931
2932         spin_lock_init(&isec->lock);
2933         INIT_LIST_HEAD(&isec->list);
2934         isec->inode = inode;
2935         isec->sid = SECINITSID_UNLABELED;
2936         isec->sclass = SECCLASS_FILE;
2937         isec->task_sid = sid;
2938         isec->initialized = LABEL_INVALID;
2939
2940         return 0;
2941 }
2942
2943 static void selinux_inode_free_security(struct inode *inode)
2944 {
2945         inode_free_security(inode);
2946 }
2947
2948 static int selinux_dentry_init_security(struct dentry *dentry, int mode,
2949                                         const struct qstr *name, void **ctx,
2950                                         u32 *ctxlen)
2951 {
2952         u32 newsid;
2953         int rc;
2954
2955         rc = selinux_determine_inode_label(selinux_cred(current_cred()),
2956                                            d_inode(dentry->d_parent), name,
2957                                            inode_mode_to_security_class(mode),
2958                                            &newsid);
2959         if (rc)
2960                 return rc;
2961
2962         return security_sid_to_context(&selinux_state, newsid, (char **)ctx,
2963                                        ctxlen);
2964 }
2965
2966 static int selinux_dentry_create_files_as(struct dentry *dentry, int mode,
2967                                           struct qstr *name,
2968                                           const struct cred *old,
2969                                           struct cred *new)
2970 {
2971         u32 newsid;
2972         int rc;
2973         struct task_security_struct *tsec;
2974
2975         rc = selinux_determine_inode_label(selinux_cred(old),
2976                                            d_inode(dentry->d_parent), name,
2977                                            inode_mode_to_security_class(mode),
2978                                            &newsid);
2979         if (rc)
2980                 return rc;
2981
2982         tsec = selinux_cred(new);
2983         tsec->create_sid = newsid;
2984         return 0;
2985 }
2986
2987 static int selinux_inode_init_security(struct inode *inode, struct inode *dir,
2988                                        const struct qstr *qstr,
2989                                        const char **name,
2990                                        void **value, size_t *len)
2991 {
2992         const struct task_security_struct *tsec = selinux_cred(current_cred());
2993         struct superblock_security_struct *sbsec;
2994         u32 newsid, clen;
2995         int rc;
2996         char *context;
2997
2998         sbsec = selinux_superblock(dir->i_sb);
2999
3000         newsid = tsec->create_sid;
3001
3002         rc = selinux_determine_inode_label(tsec, dir, qstr,
3003                 inode_mode_to_security_class(inode->i_mode),
3004                 &newsid);
3005         if (rc)
3006                 return rc;
3007
3008         /* Possibly defer initialization to selinux_complete_init. */
3009         if (sbsec->flags & SE_SBINITIALIZED) {
3010                 struct inode_security_struct *isec = selinux_inode(inode);
3011                 isec->sclass = inode_mode_to_security_class(inode->i_mode);
3012                 isec->sid = newsid;
3013                 isec->initialized = LABEL_INITIALIZED;
3014         }
3015
3016         if (!selinux_initialized(&selinux_state) ||
3017             !(sbsec->flags & SBLABEL_MNT))
3018                 return -EOPNOTSUPP;
3019
3020         if (name)
3021                 *name = XATTR_SELINUX_SUFFIX;
3022
3023         if (value && len) {
3024                 rc = security_sid_to_context_force(&selinux_state, newsid,
3025                                                    &context, &clen);
3026                 if (rc)
3027                         return rc;
3028                 *value = context;
3029                 *len = clen;
3030         }
3031
3032         return 0;
3033 }
3034
3035 static int selinux_inode_init_security_anon(struct inode *inode,
3036                                             const struct qstr *name,
3037                                             const struct inode *context_inode)
3038 {
3039         const struct task_security_struct *tsec = selinux_cred(current_cred());
3040         struct common_audit_data ad;
3041         struct inode_security_struct *isec;
3042         int rc;
3043
3044         if (unlikely(!selinux_initialized(&selinux_state)))
3045                 return 0;
3046
3047         isec = selinux_inode(inode);
3048
3049         /*
3050          * We only get here once per ephemeral inode.  The inode has
3051          * been initialized via inode_alloc_security but is otherwise
3052          * untouched.
3053          */
3054
3055         if (context_inode) {
3056                 struct inode_security_struct *context_isec =
3057                         selinux_inode(context_inode);
3058                 if (context_isec->initialized != LABEL_INITIALIZED) {
3059                         pr_err("SELinux:  context_inode is not initialized");
3060                         return -EACCES;
3061                 }
3062
3063                 isec->sclass = context_isec->sclass;
3064                 isec->sid = context_isec->sid;
3065         } else {
3066                 isec->sclass = SECCLASS_ANON_INODE;
3067                 rc = security_transition_sid(
3068                         &selinux_state, tsec->sid, tsec->sid,
3069                         isec->sclass, name, &isec->sid);
3070                 if (rc)
3071                         return rc;
3072         }
3073
3074         isec->initialized = LABEL_INITIALIZED;
3075         /*
3076          * Now that we've initialized security, check whether we're
3077          * allowed to actually create this type of anonymous inode.
3078          */
3079
3080         ad.type = LSM_AUDIT_DATA_INODE;
3081         ad.u.inode = inode;
3082
3083         return avc_has_perm(&selinux_state,
3084                             tsec->sid,
3085                             isec->sid,
3086                             isec->sclass,
3087                             FILE__CREATE,
3088                             &ad);
3089 }
3090
3091 static int selinux_inode_create(struct inode *dir, struct dentry *dentry, umode_t mode)
3092 {
3093         return may_create(dir, dentry, SECCLASS_FILE);
3094 }
3095
3096 static int selinux_inode_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_dentry)
3097 {
3098         return may_link(dir, old_dentry, MAY_LINK);
3099 }
3100
3101 static int selinux_inode_unlink(struct inode *dir, struct dentry *dentry)
3102 {
3103         return may_link(dir, dentry, MAY_UNLINK);
3104 }
3105
3106 static int selinux_inode_symlink(struct inode *dir, struct dentry *dentry, const char *name)
3107 {
3108         return may_create(dir, dentry, SECCLASS_LNK_FILE);
3109 }
3110
3111 static int selinux_inode_mkdir(struct inode *dir, struct dentry *dentry, umode_t mask)
3112 {
3113         return may_create(dir, dentry, SECCLASS_DIR);
3114 }
3115
3116 static int selinux_inode_rmdir(struct inode *dir, struct dentry *dentry)
3117 {
3118         return may_link(dir, dentry, MAY_RMDIR);
3119 }
3120
3121 static int selinux_inode_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)
3122 {
3123         return may_create(dir, dentry, inode_mode_to_security_class(mode));
3124 }
3125
3126 static int selinux_inode_rename(struct inode *old_inode, struct dentry *old_dentry,
3127                                 struct inode *new_inode, struct dentry *new_dentry)
3128 {
3129         return may_rename(old_inode, old_dentry, new_inode, new_dentry);
3130 }
3131
3132 static int selinux_inode_readlink(struct dentry *dentry)
3133 {
3134         const struct cred *cred = current_cred();
3135
3136         return dentry_has_perm(cred, dentry, FILE__READ);
3137 }
3138
3139 static int selinux_inode_follow_link(struct dentry *dentry, struct inode *inode,
3140                                      bool rcu)
3141 {
3142         const struct cred *cred = current_cred();
3143         struct common_audit_data ad;
3144         struct inode_security_struct *isec;
3145         u32 sid;
3146
3147         validate_creds(cred);
3148
3149         ad.type = LSM_AUDIT_DATA_DENTRY;
3150         ad.u.dentry = dentry;
3151         sid = cred_sid(cred);
3152         isec = inode_security_rcu(inode, rcu);
3153         if (IS_ERR(isec))
3154                 return PTR_ERR(isec);
3155
3156         return avc_has_perm(&selinux_state,
3157                                   sid, isec->sid, isec->sclass, FILE__READ, &ad);
3158 }
3159
3160 static noinline int audit_inode_permission(struct inode *inode,
3161                                            u32 perms, u32 audited, u32 denied,
3162                                            int result)
3163 {
3164         struct common_audit_data ad;
3165         struct inode_security_struct *isec = selinux_inode(inode);
3166
3167         ad.type = LSM_AUDIT_DATA_INODE;
3168         ad.u.inode = inode;
3169
3170         return slow_avc_audit(&selinux_state,
3171                             current_sid(), isec->sid, isec->sclass, perms,
3172                             audited, denied, result, &ad);
3173 }
3174
3175 static int selinux_inode_permission(struct inode *inode, int mask)
3176 {
3177         const struct cred *cred = current_cred();
3178         u32 perms;
3179         bool from_access;
3180         bool no_block = mask & MAY_NOT_BLOCK;
3181         struct inode_security_struct *isec;
3182         u32 sid;
3183         struct av_decision avd;
3184         int rc, rc2;
3185         u32 audited, denied;
3186
3187         from_access = mask & MAY_ACCESS;
3188         mask &= (MAY_READ|MAY_WRITE|MAY_EXEC|MAY_APPEND);
3189
3190         /* No permission to check.  Existence test. */
3191         if (!mask)
3192                 return 0;
3193
3194         validate_creds(cred);
3195
3196         if (unlikely(IS_PRIVATE(inode)))
3197                 return 0;
3198
3199         perms = file_mask_to_av(inode->i_mode, mask);
3200
3201         sid = cred_sid(cred);
3202         isec = inode_security_rcu(inode, no_block);
3203         if (IS_ERR(isec))
3204                 return PTR_ERR(isec);
3205
3206         rc = avc_has_perm_noaudit(&selinux_state,
3207                                   sid, isec->sid, isec->sclass, perms, 0,
3208                                   &avd);
3209         audited = avc_audit_required(perms, &avd, rc,
3210                                      from_access ? FILE__AUDIT_ACCESS : 0,
3211                                      &denied);
3212         if (likely(!audited))
3213                 return rc;
3214
3215         rc2 = audit_inode_permission(inode, perms, audited, denied, rc);
3216         if (rc2)
3217                 return rc2;
3218         return rc;
3219 }
3220
3221 static int selinux_inode_setattr(struct dentry *dentry, struct iattr *iattr)
3222 {
3223         const struct cred *cred = current_cred();
3224         struct inode *inode = d_backing_inode(dentry);
3225         unsigned int ia_valid = iattr->ia_valid;
3226         __u32 av = FILE__WRITE;
3227
3228         /* ATTR_FORCE is just used for ATTR_KILL_S[UG]ID. */
3229         if (ia_valid & ATTR_FORCE) {
3230                 ia_valid &= ~(ATTR_KILL_SUID | ATTR_KILL_SGID | ATTR_MODE |
3231                               ATTR_FORCE);
3232                 if (!ia_valid)
3233                         return 0;
3234         }
3235
3236         if (ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID |
3237                         ATTR_ATIME_SET | ATTR_MTIME_SET | ATTR_TIMES_SET))
3238                 return dentry_has_perm(cred, dentry, FILE__SETATTR);
3239
3240         if (selinux_policycap_openperm() &&
3241             inode->i_sb->s_magic != SOCKFS_MAGIC &&
3242             (ia_valid & ATTR_SIZE) &&
3243             !(ia_valid & ATTR_FILE))
3244                 av |= FILE__OPEN;
3245
3246         return dentry_has_perm(cred, dentry, av);
3247 }
3248
3249 static int selinux_inode_getattr(const struct path *path)
3250 {
3251         return path_has_perm(current_cred(), path, FILE__GETATTR);
3252 }
3253
3254 static bool has_cap_mac_admin(bool audit)
3255 {
3256         const struct cred *cred = current_cred();
3257         unsigned int opts = audit ? CAP_OPT_NONE : CAP_OPT_NOAUDIT;
3258
3259         if (cap_capable(cred, &init_user_ns, CAP_MAC_ADMIN, opts))
3260                 return false;
3261         if (cred_has_capability(cred, CAP_MAC_ADMIN, opts, true))
3262                 return false;
3263         return true;
3264 }
3265
3266 static int selinux_inode_setxattr(struct user_namespace *mnt_userns,
3267                                   struct dentry *dentry, const char *name,
3268                                   const void *value, size_t size, int flags)
3269 {
3270         struct inode *inode = d_backing_inode(dentry);
3271         struct inode_security_struct *isec;
3272         struct superblock_security_struct *sbsec;
3273         struct common_audit_data ad;
3274         u32 newsid, sid = current_sid();
3275         int rc = 0;
3276
3277         if (strcmp(name, XATTR_NAME_SELINUX)) {
3278                 rc = cap_inode_setxattr(dentry, name, value, size, flags);
3279                 if (rc)
3280                         return rc;
3281
3282                 /* Not an attribute we recognize, so just check the
3283                    ordinary setattr permission. */
3284                 return dentry_has_perm(current_cred(), dentry, FILE__SETATTR);
3285         }
3286
3287         if (!selinux_initialized(&selinux_state))
3288                 return (inode_owner_or_capable(mnt_userns, inode) ? 0 : -EPERM);
3289
3290         sbsec = selinux_superblock(inode->i_sb);
3291         if (!(sbsec->flags & SBLABEL_MNT))
3292                 return -EOPNOTSUPP;
3293
3294         if (!inode_owner_or_capable(mnt_userns, inode))
3295                 return -EPERM;
3296
3297         ad.type = LSM_AUDIT_DATA_DENTRY;
3298         ad.u.dentry = dentry;
3299
3300         isec = backing_inode_security(dentry);
3301         rc = avc_has_perm(&selinux_state,
3302                           sid, isec->sid, isec->sclass,
3303                           FILE__RELABELFROM, &ad);
3304         if (rc)
3305                 return rc;
3306
3307         rc = security_context_to_sid(&selinux_state, value, size, &newsid,
3308                                      GFP_KERNEL);
3309         if (rc == -EINVAL) {
3310                 if (!has_cap_mac_admin(true)) {
3311                         struct audit_buffer *ab;
3312                         size_t audit_size;
3313
3314                         /* We strip a nul only if it is at the end, otherwise the
3315                          * context contains a nul and we should audit that */
3316                         if (value) {
3317                                 const char *str = value;
3318
3319                                 if (str[size - 1] == '\0')
3320                                         audit_size = size - 1;
3321                                 else
3322                                         audit_size = size;
3323                         } else {
3324                                 audit_size = 0;
3325                         }
3326                         ab = audit_log_start(audit_context(),
3327                                              GFP_ATOMIC, AUDIT_SELINUX_ERR);
3328                         audit_log_format(ab, "op=setxattr invalid_context=");
3329                         audit_log_n_untrustedstring(ab, value, audit_size);
3330                         audit_log_end(ab);
3331
3332                         return rc;
3333                 }
3334                 rc = security_context_to_sid_force(&selinux_state, value,
3335                                                    size, &newsid);
3336         }
3337         if (rc)
3338                 return rc;
3339
3340         rc = avc_has_perm(&selinux_state,
3341                           sid, newsid, isec->sclass,
3342                           FILE__RELABELTO, &ad);
3343         if (rc)
3344                 return rc;
3345
3346         rc = security_validate_transition(&selinux_state, isec->sid, newsid,
3347                                           sid, isec->sclass);
3348         if (rc)
3349                 return rc;
3350
3351         return avc_has_perm(&selinux_state,
3352                             newsid,
3353                             sbsec->sid,
3354                             SECCLASS_FILESYSTEM,
3355                             FILESYSTEM__ASSOCIATE,
3356                             &ad);
3357 }
3358
3359 static void selinux_inode_post_setxattr(struct dentry *dentry, const char *name,
3360                                         const void *value, size_t size,
3361                                         int flags)
3362 {
3363         struct inode *inode = d_backing_inode(dentry);
3364         struct inode_security_struct *isec;
3365         u32 newsid;
3366         int rc;
3367
3368         if (strcmp(name, XATTR_NAME_SELINUX)) {
3369                 /* Not an attribute we recognize, so nothing to do. */
3370                 return;
3371         }
3372
3373         if (!selinux_initialized(&selinux_state)) {
3374                 /* If we haven't even been initialized, then we can't validate
3375                  * against a policy, so leave the label as invalid. It may
3376                  * resolve to a valid label on the next revalidation try if
3377                  * we've since initialized.
3378                  */
3379                 return;
3380         }
3381
3382         rc = security_context_to_sid_force(&selinux_state, value, size,
3383                                            &newsid);
3384         if (rc) {
3385                 pr_err("SELinux:  unable to map context to SID"
3386                        "for (%s, %lu), rc=%d\n",
3387                        inode->i_sb->s_id, inode->i_ino, -rc);
3388                 return;
3389         }
3390
3391         isec = backing_inode_security(dentry);
3392         spin_lock(&isec->lock);
3393         isec->sclass = inode_mode_to_security_class(inode->i_mode);
3394         isec->sid = newsid;
3395         isec->initialized = LABEL_INITIALIZED;
3396         spin_unlock(&isec->lock);
3397
3398         return;
3399 }
3400
3401 static int selinux_inode_getxattr(struct dentry *dentry, const char *name)
3402 {
3403         const struct cred *cred = current_cred();
3404
3405         return dentry_has_perm(cred, dentry, FILE__GETATTR);
3406 }
3407
3408 static int selinux_inode_listxattr(struct dentry *dentry)
3409 {
3410         const struct cred *cred = current_cred();
3411
3412         return dentry_has_perm(cred, dentry, FILE__GETATTR);
3413 }
3414
3415 static int selinux_inode_removexattr(struct user_namespace *mnt_userns,
3416                                      struct dentry *dentry, const char *name)
3417 {
3418         if (strcmp(name, XATTR_NAME_SELINUX)) {
3419                 int rc = cap_inode_removexattr(mnt_userns, dentry, name);
3420                 if (rc)
3421                         return rc;
3422
3423                 /* Not an attribute we recognize, so just check the
3424                    ordinary setattr permission. */
3425                 return dentry_has_perm(current_cred(), dentry, FILE__SETATTR);
3426         }
3427
3428         if (!selinux_initialized(&selinux_state))
3429                 return 0;
3430
3431         /* No one is allowed to remove a SELinux security label.
3432            You can change the label, but all data must be labeled. */
3433         return -EACCES;
3434 }
3435
3436 static int selinux_path_notify(const struct path *path, u64 mask,
3437                                                 unsigned int obj_type)
3438 {
3439         int ret;
3440         u32 perm;
3441
3442         struct common_audit_data ad;
3443
3444         ad.type = LSM_AUDIT_DATA_PATH;
3445         ad.u.path = *path;
3446
3447         /*
3448          * Set permission needed based on the type of mark being set.
3449          * Performs an additional check for sb watches.
3450          */
3451         switch (obj_type) {
3452         case FSNOTIFY_OBJ_TYPE_VFSMOUNT:
3453                 perm = FILE__WATCH_MOUNT;
3454                 break;
3455         case FSNOTIFY_OBJ_TYPE_SB:
3456                 perm = FILE__WATCH_SB;
3457                 ret = superblock_has_perm(current_cred(), path->dentry->d_sb,
3458                                                 FILESYSTEM__WATCH, &ad);
3459                 if (ret)
3460                         return ret;
3461                 break;
3462         case FSNOTIFY_OBJ_TYPE_INODE:
3463                 perm = FILE__WATCH;
3464                 break;
3465         default:
3466                 return -EINVAL;
3467         }
3468
3469         /* blocking watches require the file:watch_with_perm permission */
3470         if (mask & (ALL_FSNOTIFY_PERM_EVENTS))
3471                 perm |= FILE__WATCH_WITH_PERM;
3472
3473         /* watches on read-like events need the file:watch_reads permission */
3474         if (mask & (FS_ACCESS | FS_ACCESS_PERM | FS_CLOSE_NOWRITE))
3475                 perm |= FILE__WATCH_READS;
3476
3477         return path_has_perm(current_cred(), path, perm);
3478 }
3479
3480 /*
3481  * Copy the inode security context value to the user.
3482  *
3483  * Permission check is handled by selinux_inode_getxattr hook.
3484  */
3485 static int selinux_inode_getsecurity(struct user_namespace *mnt_userns,
3486                                      struct inode *inode, const char *name,
3487                                      void **buffer, bool alloc)
3488 {
3489         u32 size;
3490         int error;
3491         char *context = NULL;
3492         struct inode_security_struct *isec;
3493
3494         /*
3495          * If we're not initialized yet, then we can't validate contexts, so
3496          * just let vfs_getxattr fall back to using the on-disk xattr.
3497          */
3498         if (!selinux_initialized(&selinux_state) ||
3499             strcmp(name, XATTR_SELINUX_SUFFIX))
3500                 return -EOPNOTSUPP;
3501
3502         /*
3503          * If the caller has CAP_MAC_ADMIN, then get the raw context
3504          * value even if it is not defined by current policy; otherwise,
3505          * use the in-core value under current policy.
3506          * Use the non-auditing forms of the permission checks since
3507          * getxattr may be called by unprivileged processes commonly
3508          * and lack of permission just means that we fall back to the
3509          * in-core context value, not a denial.
3510          */
3511         isec = inode_security(inode);
3512         if (has_cap_mac_admin(false))
3513                 error = security_sid_to_context_force(&selinux_state,
3514                                                       isec->sid, &context,
3515                                                       &size);
3516         else
3517                 error = security_sid_to_context(&selinux_state, isec->sid,
3518                                                 &context, &size);
3519         if (error)
3520                 return error;
3521         error = size;
3522         if (alloc) {
3523                 *buffer = context;
3524                 goto out_nofree;
3525         }
3526         kfree(context);
3527 out_nofree:
3528         return error;
3529 }
3530
3531 static int selinux_inode_setsecurity(struct inode *inode, const char *name,
3532                                      const void *value, size_t size, int flags)
3533 {
3534         struct inode_security_struct *isec = inode_security_novalidate(inode);
3535         struct superblock_security_struct *sbsec;
3536         u32 newsid;
3537         int rc;
3538
3539         if (strcmp(name, XATTR_SELINUX_SUFFIX))
3540                 return -EOPNOTSUPP;
3541
3542         sbsec = selinux_superblock(inode->i_sb);
3543         if (!(sbsec->flags & SBLABEL_MNT))
3544                 return -EOPNOTSUPP;
3545
3546         if (!value || !size)
3547                 return -EACCES;
3548
3549         rc = security_context_to_sid(&selinux_state, value, size, &newsid,
3550                                      GFP_KERNEL);
3551         if (rc)
3552                 return rc;
3553
3554         spin_lock(&isec->lock);
3555         isec->sclass = inode_mode_to_security_class(inode->i_mode);
3556         isec->sid = newsid;
3557         isec->initialized = LABEL_INITIALIZED;
3558         spin_unlock(&isec->lock);
3559         return 0;
3560 }
3561
3562 static int selinux_inode_listsecurity(struct inode *inode, char *buffer, size_t buffer_size)
3563 {
3564         const int len = sizeof(XATTR_NAME_SELINUX);
3565
3566         if (!selinux_initialized(&selinux_state))
3567                 return 0;
3568
3569         if (buffer && len <= buffer_size)
3570                 memcpy(buffer, XATTR_NAME_SELINUX, len);
3571         return len;
3572 }
3573
3574 static void selinux_inode_getsecid(struct inode *inode, u32 *secid)
3575 {
3576         struct inode_security_struct *isec = inode_security_novalidate(inode);
3577         *secid = isec->sid;
3578 }
3579
3580 static int selinux_inode_copy_up(struct dentry *src, struct cred **new)
3581 {
3582         u32 sid;
3583         struct task_security_struct *tsec;
3584         struct cred *new_creds = *new;
3585
3586         if (new_creds == NULL) {
3587                 new_creds = prepare_creds();
3588                 if (!new_creds)
3589                         return -ENOMEM;
3590         }
3591
3592         tsec = selinux_cred(new_creds);
3593         /* Get label from overlay inode and set it in create_sid */
3594         selinux_inode_getsecid(d_inode(src), &sid);
3595         tsec->create_sid = sid;
3596         *new = new_creds;
3597         return 0;
3598 }
3599
3600 static int selinux_inode_copy_up_xattr(const char *name)
3601 {
3602         /* The copy_up hook above sets the initial context on an inode, but we
3603          * don't then want to overwrite it by blindly copying all the lower
3604          * xattrs up.  Instead, we have to filter out SELinux-related xattrs.
3605          */
3606         if (strcmp(name, XATTR_NAME_SELINUX) == 0)
3607                 return 1; /* Discard */
3608         /*
3609          * Any other attribute apart from SELINUX is not claimed, supported
3610          * by selinux.
3611          */
3612         return -EOPNOTSUPP;
3613 }
3614
3615 /* kernfs node operations */
3616
3617 static int selinux_kernfs_init_security(struct kernfs_node *kn_dir,
3618                                         struct kernfs_node *kn)
3619 {
3620         const struct task_security_struct *tsec = selinux_cred(current_cred());
3621         u32 parent_sid, newsid, clen;
3622         int rc;
3623         char *context;
3624
3625         rc = kernfs_xattr_get(kn_dir, XATTR_NAME_SELINUX, NULL, 0);
3626         if (rc == -ENODATA)
3627                 return 0;
3628         else if (rc < 0)
3629                 return rc;
3630
3631         clen = (u32)rc;
3632         context = kmalloc(clen, GFP_KERNEL);
3633         if (!context)
3634                 return -ENOMEM;
3635
3636         rc = kernfs_xattr_get(kn_dir, XATTR_NAME_SELINUX, context, clen);
3637         if (rc < 0) {
3638                 kfree(context);
3639                 return rc;
3640         }
3641
3642         rc = security_context_to_sid(&selinux_state, context, clen, &parent_sid,
3643                                      GFP_KERNEL);
3644         kfree(context);
3645         if (rc)
3646                 return rc;
3647
3648         if (tsec->create_sid) {
3649                 newsid = tsec->create_sid;
3650         } else {
3651                 u16 secclass = inode_mode_to_security_class(kn->mode);
3652                 struct qstr q;
3653
3654                 q.name = kn->name;
3655                 q.hash_len = hashlen_string(kn_dir, kn->name);
3656
3657                 rc = security_transition_sid(&selinux_state, tsec->sid,
3658                                              parent_sid, secclass, &q,
3659                                              &newsid);
3660                 if (rc)
3661                         return rc;
3662         }
3663
3664         rc = security_sid_to_context_force(&selinux_state, newsid,
3665                                            &context, &clen);
3666         if (rc)
3667                 return rc;
3668
3669         rc = kernfs_xattr_set(kn, XATTR_NAME_SELINUX, context, clen,
3670                               XATTR_CREATE);
3671         kfree(context);
3672         return rc;
3673 }
3674
3675
3676 /* file security operations */
3677
3678 static int selinux_revalidate_file_permission(struct file *file, int mask)
3679 {
3680         const struct cred *cred = current_cred();
3681         struct inode *inode = file_inode(file);
3682
3683         /* file_mask_to_av won't add FILE__WRITE if MAY_APPEND is set */
3684         if ((file->f_flags & O_APPEND) && (mask & MAY_WRITE))
3685                 mask |= MAY_APPEND;
3686
3687         return file_has_perm(cred, file,
3688                              file_mask_to_av(inode->i_mode, mask));
3689 }
3690
3691 static int selinux_file_permission(struct file *file, int mask)
3692 {
3693         struct inode *inode = file_inode(file);
3694         struct file_security_struct *fsec = selinux_file(file);
3695         struct inode_security_struct *isec;
3696         u32 sid = current_sid();
3697
3698         if (!mask)
3699                 /* No permission to check.  Existence test. */
3700                 return 0;
3701
3702         isec = inode_security(inode);
3703         if (sid == fsec->sid && fsec->isid == isec->sid &&
3704             fsec->pseqno == avc_policy_seqno(&selinux_state))
3705                 /* No change since file_open check. */
3706                 return 0;
3707
3708         return selinux_revalidate_file_permission(file, mask);
3709 }
3710
3711 static int selinux_file_alloc_security(struct file *file)
3712 {
3713         struct file_security_struct *fsec = selinux_file(file);
3714         u32 sid = current_sid();
3715
3716         fsec->sid = sid;
3717         fsec->fown_sid = sid;
3718
3719         return 0;
3720 }
3721
3722 /*
3723  * Check whether a task has the ioctl permission and cmd
3724  * operation to an inode.
3725  */
3726 static int ioctl_has_perm(const struct cred *cred, struct file *file,
3727                 u32 requested, u16 cmd)
3728 {
3729         struct common_audit_data ad;
3730         struct file_security_struct *fsec = selinux_file(file);
3731         struct inode *inode = file_inode(file);
3732         struct inode_security_struct *isec;
3733         struct lsm_ioctlop_audit ioctl;
3734         u32 ssid = cred_sid(cred);
3735         int rc;
3736         u8 driver = cmd >> 8;
3737         u8 xperm = cmd & 0xff;
3738
3739         ad.type = LSM_AUDIT_DATA_IOCTL_OP;
3740         ad.u.op = &ioctl;
3741         ad.u.op->cmd = cmd;
3742         ad.u.op->path = file->f_path;
3743
3744         if (ssid != fsec->sid) {
3745                 rc = avc_has_perm(&selinux_state,
3746                                   ssid, fsec->sid,
3747                                 SECCLASS_FD,
3748                                 FD__USE,
3749                                 &ad);
3750                 if (rc)
3751                         goto out;
3752         }
3753
3754         if (unlikely(IS_PRIVATE(inode)))
3755                 return 0;
3756
3757         isec = inode_security(inode);
3758         rc = avc_has_extended_perms(&selinux_state,
3759                                     ssid, isec->sid, isec->sclass,
3760                                     requested, driver, xperm, &ad);
3761 out:
3762         return rc;
3763 }
3764
3765 static int selinux_file_ioctl(struct file *file, unsigned int cmd,
3766                               unsigned long arg)
3767 {
3768         const struct cred *cred = current_cred();
3769         int error = 0;
3770
3771         switch (cmd) {
3772         case FIONREAD:
3773         case FIBMAP:
3774         case FIGETBSZ:
3775         case FS_IOC_GETFLAGS:
3776         case FS_IOC_GETVERSION:
3777                 error = file_has_perm(cred, file, FILE__GETATTR);
3778                 break;
3779
3780         case FS_IOC_SETFLAGS:
3781         case FS_IOC_SETVERSION:
3782                 error = file_has_perm(cred, file, FILE__SETATTR);
3783                 break;
3784
3785         /* sys_ioctl() checks */
3786         case FIONBIO:
3787         case FIOASYNC:
3788                 error = file_has_perm(cred, file, 0);
3789                 break;
3790
3791         case KDSKBENT:
3792         case KDSKBSENT:
3793                 error = cred_has_capability(cred, CAP_SYS_TTY_CONFIG,
3794                                             CAP_OPT_NONE, true);
3795                 break;
3796
3797         /* default case assumes that the command will go
3798          * to the file's ioctl() function.
3799          */
3800         default:
3801                 error = ioctl_has_perm(cred, file, FILE__IOCTL, (u16) cmd);
3802         }
3803         return error;
3804 }
3805
3806 static int default_noexec __ro_after_init;
3807
3808 static int file_map_prot_check(struct file *file, unsigned long prot, int shared)
3809 {
3810         const struct cred *cred = current_cred();
3811         u32 sid = cred_sid(cred);
3812         int rc = 0;
3813
3814         if (default_noexec &&
3815             (prot & PROT_EXEC) && (!file || IS_PRIVATE(file_inode(file)) ||
3816                                    (!shared && (prot & PROT_WRITE)))) {
3817                 /*
3818                  * We are making executable an anonymous mapping or a
3819                  * private file mapping that will also be writable.
3820                  * This has an additional check.
3821                  */
3822                 rc = avc_has_perm(&selinux_state,
3823                                   sid, sid, SECCLASS_PROCESS,
3824                                   PROCESS__EXECMEM, NULL);
3825                 if (rc)
3826                         goto error;
3827         }
3828
3829         if (file) {
3830                 /* read access is always possible with a mapping */
3831                 u32 av = FILE__READ;
3832
3833                 /* write access only matters if the mapping is shared */
3834                 if (shared && (prot & PROT_WRITE))
3835                         av |= FILE__WRITE;
3836
3837                 if (prot & PROT_EXEC)
3838                         av |= FILE__EXECUTE;
3839
3840                 return file_has_perm(cred, file, av);
3841         }
3842
3843 error:
3844         return rc;
3845 }
3846
3847 static int selinux_mmap_addr(unsigned long addr)
3848 {
3849         int rc = 0;
3850
3851         if (addr < CONFIG_LSM_MMAP_MIN_ADDR) {
3852                 u32 sid = current_sid();
3853                 rc = avc_has_perm(&selinux_state,
3854                                   sid, sid, SECCLASS_MEMPROTECT,
3855                                   MEMPROTECT__MMAP_ZERO, NULL);
3856         }
3857
3858         return rc;
3859 }
3860
3861 static int selinux_mmap_file(struct file *file, unsigned long reqprot,
3862                              unsigned long prot, unsigned long flags)
3863 {
3864         struct common_audit_data ad;
3865         int rc;
3866
3867         if (file) {
3868                 ad.type = LSM_AUDIT_DATA_FILE;
3869                 ad.u.file = file;
3870                 rc = inode_has_perm(current_cred(), file_inode(file),
3871                                     FILE__MAP, &ad);
3872                 if (rc)
3873                         return rc;
3874         }
3875
3876         if (checkreqprot_get(&selinux_state))
3877                 prot = reqprot;
3878
3879         return file_map_prot_check(file, prot,
3880                                    (flags & MAP_TYPE) == MAP_SHARED);
3881 }
3882
3883 static int selinux_file_mprotect(struct vm_area_struct *vma,
3884                                  unsigned long reqprot,
3885                                  unsigned long prot)
3886 {
3887         const struct cred *cred = current_cred();
3888         u32 sid = cred_sid(cred);
3889
3890         if (checkreqprot_get(&selinux_state))
3891                 prot = reqprot;
3892
3893         if (default_noexec &&
3894             (prot & PROT_EXEC) && !(vma->vm_flags & VM_EXEC)) {
3895                 int rc = 0;
3896                 if (vma->vm_start >= vma->vm_mm->start_brk &&
3897                     vma->vm_end <= vma->vm_mm->brk) {
3898                         rc = avc_has_perm(&selinux_state,
3899                                           sid, sid, SECCLASS_PROCESS,
3900                                           PROCESS__EXECHEAP, NULL);
3901                 } else if (!vma->vm_file &&
3902                            ((vma->vm_start <= vma->vm_mm->start_stack &&
3903                              vma->vm_end >= vma->vm_mm->start_stack) ||
3904                             vma_is_stack_for_current(vma))) {
3905                         rc = avc_has_perm(&selinux_state,
3906                                           sid, sid, SECCLASS_PROCESS,
3907                                           PROCESS__EXECSTACK, NULL);
3908                 } else if (vma->vm_file && vma->anon_vma) {
3909                         /*
3910                          * We are making executable a file mapping that has
3911                          * had some COW done. Since pages might have been
3912                          * written, check ability to execute the possibly
3913                          * modified content.  This typically should only
3914                          * occur for text relocations.
3915                          */
3916                         rc = file_has_perm(cred, vma->vm_file, FILE__EXECMOD);
3917                 }
3918                 if (rc)
3919                         return rc;
3920         }
3921
3922         return file_map_prot_check(vma->vm_file, prot, vma->vm_flags&VM_SHARED);
3923 }
3924
3925 static int selinux_file_lock(struct file *file, unsigned int cmd)
3926 {
3927         const struct cred *cred = current_cred();
3928
3929         return file_has_perm(cred, file, FILE__LOCK);
3930 }
3931
3932 static int selinux_file_fcntl(struct file *file, unsigned int cmd,
3933                               unsigned long arg)
3934 {
3935         const struct cred *cred = current_cred();
3936         int err = 0;
3937
3938         switch (cmd) {
3939         case F_SETFL:
3940                 if ((file->f_flags & O_APPEND) && !(arg & O_APPEND)) {
3941                         err = file_has_perm(cred, file, FILE__WRITE);
3942                         break;
3943                 }
3944                 fallthrough;
3945         case F_SETOWN:
3946         case F_SETSIG:
3947         case F_GETFL:
3948         case F_GETOWN:
3949         case F_GETSIG:
3950         case F_GETOWNER_UIDS:
3951                 /* Just check FD__USE permission */
3952                 err = file_has_perm(cred, file, 0);
3953                 break;
3954         case F_GETLK:
3955         case F_SETLK:
3956         case F_SETLKW:
3957         case F_OFD_GETLK:
3958         case F_OFD_SETLK:
3959         case F_OFD_SETLKW:
3960 #if BITS_PER_LONG == 32
3961         case F_GETLK64:
3962         case F_SETLK64:
3963         case F_SETLKW64:
3964 #endif
3965                 err = file_has_perm(cred, file, FILE__LOCK);
3966                 break;
3967         }
3968
3969         return err;
3970 }
3971
3972 static void selinux_file_set_fowner(struct file *file)
3973 {
3974         struct file_security_struct *fsec;
3975
3976         fsec = selinux_file(file);
3977         fsec->fown_sid = current_sid();
3978 }
3979
3980 static int selinux_file_send_sigiotask(struct task_struct *tsk,
3981                                        struct fown_struct *fown, int signum)
3982 {
3983         struct file *file;
3984         u32 sid = task_sid_obj(tsk);
3985         u32 perm;
3986         struct file_security_struct *fsec;
3987
3988         /* struct fown_struct is never outside the context of a struct file */
3989         file = container_of(fown, struct file, f_owner);
3990
3991         fsec = selinux_file(file);
3992
3993         if (!signum)
3994                 perm = signal_to_av(SIGIO); /* as per send_sigio_to_task */
3995         else
3996                 perm = signal_to_av(signum);
3997
3998         return avc_has_perm(&selinux_state,
3999                             fsec->fown_sid, sid,
4000                             SECCLASS_PROCESS, perm, NULL);
4001 }
4002
4003 static int selinux_file_receive(struct file *file)
4004 {
4005         const struct cred *cred = current_cred();
4006
4007         return file_has_perm(cred, file, file_to_av(file));
4008 }
4009
4010 static int selinux_file_open(struct file *file)
4011 {
4012         struct file_security_struct *fsec;
4013         struct inode_security_struct *isec;
4014
4015         fsec = selinux_file(file);
4016         isec = inode_security(file_inode(file));
4017         /*
4018          * Save inode label and policy sequence number
4019          * at open-time so that selinux_file_permission
4020          * can determine whether revalidation is necessary.
4021          * Task label is already saved in the file security
4022          * struct as its SID.
4023          */
4024         fsec->isid = isec->sid;
4025         fsec->pseqno = avc_policy_seqno(&selinux_state);
4026         /*
4027          * Since the inode label or policy seqno may have changed
4028          * between the selinux_inode_permission check and the saving
4029          * of state above, recheck that access is still permitted.
4030          * Otherwise, access might never be revalidated against the
4031          * new inode label or new policy.
4032          * This check is not redundant - do not remove.
4033          */
4034         return file_path_has_perm(file->f_cred, file, open_file_to_av(file));
4035 }
4036
4037 /* task security operations */
4038
4039 static int selinux_task_alloc(struct task_struct *task,
4040                               unsigned long clone_flags)
4041 {
4042         u32 sid = current_sid();
4043
4044         return avc_has_perm(&selinux_state,
4045                             sid, sid, SECCLASS_PROCESS, PROCESS__FORK, NULL);
4046 }
4047
4048 /*
4049  * prepare a new set of credentials for modification
4050  */
4051 static int selinux_cred_prepare(struct cred *new, const struct cred *old,
4052                                 gfp_t gfp)
4053 {
4054         const struct task_security_struct *old_tsec = selinux_cred(old);
4055         struct task_security_struct *tsec = selinux_cred(new);
4056
4057         *tsec = *old_tsec;
4058         return 0;
4059 }
4060
4061 /*
4062  * transfer the SELinux data to a blank set of creds
4063  */
4064 static void selinux_cred_transfer(struct cred *new, const struct cred *old)
4065 {
4066         const struct task_security_struct *old_tsec = selinux_cred(old);
4067         struct task_security_struct *tsec = selinux_cred(new);
4068
4069         *tsec = *old_tsec;
4070 }
4071
4072 static void selinux_cred_getsecid(const struct cred *c, u32 *secid)
4073 {
4074         *secid = cred_sid(c);
4075 }
4076
4077 /*
4078  * set the security data for a kernel service
4079  * - all the creation contexts are set to unlabelled
4080  */
4081 static int selinux_kernel_act_as(struct cred *new, u32 secid)
4082 {
4083         struct task_security_struct *tsec = selinux_cred(new);
4084         u32 sid = current_sid();
4085         int ret;
4086
4087         ret = avc_has_perm(&selinux_state,
4088                            sid, secid,
4089                            SECCLASS_KERNEL_SERVICE,
4090                            KERNEL_SERVICE__USE_AS_OVERRIDE,
4091                            NULL);
4092         if (ret == 0) {
4093                 tsec->sid = secid;
4094                 tsec->create_sid = 0;
4095                 tsec->keycreate_sid = 0;
4096                 tsec->sockcreate_sid = 0;
4097         }
4098         return ret;
4099 }
4100
4101 /*
4102  * set the file creation context in a security record to the same as the
4103  * objective context of the specified inode
4104  */
4105 static int selinux_kernel_create_files_as(struct cred *new, struct inode *inode)
4106 {
4107         struct inode_security_struct *isec = inode_security(inode);
4108         struct task_security_struct *tsec = selinux_cred(new);
4109         u32 sid = current_sid();
4110         int ret;
4111
4112         ret = avc_has_perm(&selinux_state,
4113                            sid, isec->sid,
4114                            SECCLASS_KERNEL_SERVICE,
4115                            KERNEL_SERVICE__CREATE_FILES_AS,
4116                            NULL);
4117
4118         if (ret == 0)
4119                 tsec->create_sid = isec->sid;
4120         return ret;
4121 }
4122
4123 static int selinux_kernel_module_request(char *kmod_name)
4124 {
4125         struct common_audit_data ad;
4126
4127         ad.type = LSM_AUDIT_DATA_KMOD;
4128         ad.u.kmod_name = kmod_name;
4129
4130         return avc_has_perm(&selinux_state,
4131                             current_sid(), SECINITSID_KERNEL, SECCLASS_SYSTEM,
4132                             SYSTEM__MODULE_REQUEST, &ad);
4133 }
4134
4135 static int selinux_kernel_module_from_file(struct file *file)
4136 {
4137         struct common_audit_data ad;
4138         struct inode_security_struct *isec;
4139         struct file_security_struct *fsec;
4140         u32 sid = current_sid();
4141         int rc;
4142
4143         /* init_module */
4144         if (file == NULL)
4145                 return avc_has_perm(&selinux_state,
4146                                     sid, sid, SECCLASS_SYSTEM,
4147                                         SYSTEM__MODULE_LOAD, NULL);
4148
4149         /* finit_module */
4150
4151         ad.type = LSM_AUDIT_DATA_FILE;
4152         ad.u.file = file;
4153
4154         fsec = selinux_file(file);
4155         if (sid != fsec->sid) {
4156                 rc = avc_has_perm(&selinux_state,
4157                                   sid, fsec->sid, SECCLASS_FD, FD__USE, &ad);
4158                 if (rc)
4159                         return rc;
4160         }
4161
4162         isec = inode_security(file_inode(file));
4163         return avc_has_perm(&selinux_state,
4164                             sid, isec->sid, SECCLASS_SYSTEM,
4165                                 SYSTEM__MODULE_LOAD, &ad);
4166 }
4167
4168 static int selinux_kernel_read_file(struct file *file,
4169                                     enum kernel_read_file_id id,
4170                                     bool contents)
4171 {
4172         int rc = 0;
4173
4174         switch (id) {
4175         case READING_MODULE:
4176                 rc = selinux_kernel_module_from_file(contents ? file : NULL);
4177                 break;
4178         default:
4179                 break;
4180         }
4181
4182         return rc;
4183 }
4184
4185 static int selinux_kernel_load_data(enum kernel_load_data_id id, bool contents)
4186 {
4187         int rc = 0;
4188
4189         switch (id) {
4190         case LOADING_MODULE:
4191                 rc = selinux_kernel_module_from_file(NULL);
4192                 break;
4193         default:
4194                 break;
4195         }
4196
4197         return rc;
4198 }
4199
4200 static int selinux_task_setpgid(struct task_struct *p, pid_t pgid)
4201 {
4202         return avc_has_perm(&selinux_state,
4203                             current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
4204                             PROCESS__SETPGID, NULL);
4205 }
4206
4207 static int selinux_task_getpgid(struct task_struct *p)
4208 {
4209         return avc_has_perm(&selinux_state,
4210                             current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
4211                             PROCESS__GETPGID, NULL);
4212 }
4213
4214 static int selinux_task_getsid(struct task_struct *p)
4215 {
4216         return avc_has_perm(&selinux_state,
4217                             current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
4218                             PROCESS__GETSESSION, NULL);
4219 }
4220
4221 static void selinux_task_getsecid_subj(struct task_struct *p, u32 *secid)
4222 {
4223         *secid = task_sid_subj(p);
4224 }
4225
4226 static void selinux_task_getsecid_obj(struct task_struct *p, u32 *secid)
4227 {
4228         *secid = task_sid_obj(p);
4229 }
4230
4231 static int selinux_task_setnice(struct task_struct *p, int nice)
4232 {
4233         return avc_has_perm(&selinux_state,
4234                             current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
4235                             PROCESS__SETSCHED, NULL);
4236 }
4237
4238 static int selinux_task_setioprio(struct task_struct *p, int ioprio)
4239 {
4240         return avc_has_perm(&selinux_state,
4241                             current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
4242                             PROCESS__SETSCHED, NULL);
4243 }
4244
4245 static int selinux_task_getioprio(struct task_struct *p)
4246 {
4247         return avc_has_perm(&selinux_state,
4248                             current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
4249                             PROCESS__GETSCHED, NULL);
4250 }
4251
4252 static int selinux_task_prlimit(const struct cred *cred, const struct cred *tcred,
4253                                 unsigned int flags)
4254 {
4255         u32 av = 0;
4256
4257         if (!flags)
4258                 return 0;
4259         if (flags & LSM_PRLIMIT_WRITE)
4260                 av |= PROCESS__SETRLIMIT;
4261         if (flags & LSM_PRLIMIT_READ)
4262                 av |= PROCESS__GETRLIMIT;
4263         return avc_has_perm(&selinux_state,
4264                             cred_sid(cred), cred_sid(tcred),
4265                             SECCLASS_PROCESS, av, NULL);
4266 }
4267
4268 static int selinux_task_setrlimit(struct task_struct *p, unsigned int resource,
4269                 struct rlimit *new_rlim)
4270 {
4271         struct rlimit *old_rlim = p->signal->rlim + resource;
4272
4273         /* Control the ability to change the hard limit (whether
4274            lowering or raising it), so that the hard limit can
4275            later be used as a safe reset point for the soft limit
4276            upon context transitions.  See selinux_bprm_committing_creds. */
4277         if (old_rlim->rlim_max != new_rlim->rlim_max)
4278                 return avc_has_perm(&selinux_state,
4279                                     current_sid(), task_sid_obj(p),
4280                                     SECCLASS_PROCESS, PROCESS__SETRLIMIT, NULL);
4281
4282         return 0;
4283 }
4284
4285 static int selinux_task_setscheduler(struct task_struct *p)
4286 {
4287         return avc_has_perm(&selinux_state,
4288                             current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
4289                             PROCESS__SETSCHED, NULL);
4290 }
4291
4292 static int selinux_task_getscheduler(struct task_struct *p)
4293 {
4294         return avc_has_perm(&selinux_state,
4295                             current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
4296                             PROCESS__GETSCHED, NULL);
4297 }
4298
4299 static int selinux_task_movememory(struct task_struct *p)
4300 {
4301         return avc_has_perm(&selinux_state,
4302                             current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
4303                             PROCESS__SETSCHED, NULL);
4304 }
4305
4306 static int selinux_task_kill(struct task_struct *p, struct kernel_siginfo *info,
4307                                 int sig, const struct cred *cred)
4308 {
4309         u32 secid;
4310         u32 perm;
4311
4312         if (!sig)
4313                 perm = PROCESS__SIGNULL; /* null signal; existence test */
4314         else
4315                 perm = signal_to_av(sig);
4316         if (!cred)
4317                 secid = current_sid();
4318         else
4319                 secid = cred_sid(cred);
4320         return avc_has_perm(&selinux_state,
4321                             secid, task_sid_obj(p), SECCLASS_PROCESS, perm, NULL);
4322 }
4323
4324 static void selinux_task_to_inode(struct task_struct *p,
4325                                   struct inode *inode)
4326 {
4327         struct inode_security_struct *isec = selinux_inode(inode);
4328         u32 sid = task_sid_obj(p);
4329
4330         spin_lock(&isec->lock);
4331         isec->sclass = inode_mode_to_security_class(inode->i_mode);
4332         isec->sid = sid;
4333         isec->initialized = LABEL_INITIALIZED;
4334         spin_unlock(&isec->lock);
4335 }
4336
4337 /* Returns error only if unable to parse addresses */
4338 static int selinux_parse_skb_ipv4(struct sk_buff *skb,
4339                         struct common_audit_data *ad, u8 *proto)
4340 {
4341         int offset, ihlen, ret = -EINVAL;
4342         struct iphdr _iph, *ih;
4343
4344         offset = skb_network_offset(skb);
4345         ih = skb_header_pointer(skb, offset, sizeof(_iph), &_iph);
4346         if (ih == NULL)
4347                 goto out;
4348
4349         ihlen = ih->ihl * 4;
4350         if (ihlen < sizeof(_iph))
4351                 goto out;
4352
4353         ad->u.net->v4info.saddr = ih->saddr;
4354         ad->u.net->v4info.daddr = ih->daddr;
4355         ret = 0;
4356
4357         if (proto)
4358                 *proto = ih->protocol;
4359
4360         switch (ih->protocol) {
4361         case IPPROTO_TCP: {
4362                 struct tcphdr _tcph, *th;
4363
4364                 if (ntohs(ih->frag_off) & IP_OFFSET)
4365                         break;
4366
4367                 offset += ihlen;
4368                 th = skb_header_pointer(skb, offset, sizeof(_tcph), &_tcph);
4369                 if (th == NULL)
4370                         break;
4371
4372                 ad->u.net->sport = th->source;
4373                 ad->u.net->dport = th->dest;
4374                 break;
4375         }
4376
4377         case IPPROTO_UDP: {
4378                 struct udphdr _udph, *uh;
4379
4380                 if (ntohs(ih->frag_off) & IP_OFFSET)
4381                         break;
4382
4383                 offset += ihlen;
4384                 uh = skb_header_pointer(skb, offset, sizeof(_udph), &_udph);
4385                 if (uh == NULL)
4386                         break;
4387
4388                 ad->u.net->sport = uh->source;
4389                 ad->u.net->dport = uh->dest;
4390                 break;
4391         }
4392
4393         case IPPROTO_DCCP: {
4394                 struct dccp_hdr _dccph, *dh;
4395
4396                 if (ntohs(ih->frag_off) & IP_OFFSET)
4397                         break;
4398
4399                 offset += ihlen;
4400                 dh = skb_header_pointer(skb, offset, sizeof(_dccph), &_dccph);
4401                 if (dh == NULL)
4402                         break;
4403
4404                 ad->u.net->sport = dh->dccph_sport;
4405                 ad->u.net->dport = dh->dccph_dport;
4406                 break;
4407         }
4408
4409 #if IS_ENABLED(CONFIG_IP_SCTP)
4410         case IPPROTO_SCTP: {
4411                 struct sctphdr _sctph, *sh;
4412
4413                 if (ntohs(ih->frag_off) & IP_OFFSET)
4414                         break;
4415
4416                 offset += ihlen;
4417                 sh = skb_header_pointer(skb, offset, sizeof(_sctph), &_sctph);
4418                 if (sh == NULL)
4419                         break;
4420
4421                 ad->u.net->sport = sh->source;
4422                 ad->u.net->dport = sh->dest;
4423                 break;
4424         }
4425 #endif
4426         default:
4427                 break;
4428         }
4429 out:
4430         return ret;
4431 }
4432
4433 #if IS_ENABLED(CONFIG_IPV6)
4434
4435 /* Returns error only if unable to parse addresses */
4436 static int selinux_parse_skb_ipv6(struct sk_buff *skb,
4437                         struct common_audit_data *ad, u8 *proto)
4438 {
4439         u8 nexthdr;
4440         int ret = -EINVAL, offset;
4441         struct ipv6hdr _ipv6h, *ip6;
4442         __be16 frag_off;
4443
4444         offset = skb_network_offset(skb);
4445         ip6 = skb_header_pointer(skb, offset, sizeof(_ipv6h), &_ipv6h);
4446         if (ip6 == NULL)
4447                 goto out;
4448
4449         ad->u.net->v6info.saddr = ip6->saddr;
4450         ad->u.net->v6info.daddr = ip6->daddr;
4451         ret = 0;
4452
4453         nexthdr = ip6->nexthdr;
4454         offset += sizeof(_ipv6h);
4455         offset = ipv6_skip_exthdr(skb, offset, &nexthdr, &frag_off);
4456         if (offset < 0)
4457                 goto out;
4458
4459         if (proto)
4460                 *proto = nexthdr;
4461
4462         switch (nexthdr) {
4463         case IPPROTO_TCP: {
4464                 struct tcphdr _tcph, *th;
4465
4466                 th = skb_header_pointer(skb, offset, sizeof(_tcph), &_tcph);
4467                 if (th == NULL)
4468                         break;
4469
4470                 ad->u.net->sport = th->source;
4471                 ad->u.net->dport = th->dest;
4472                 break;
4473         }
4474
4475         case IPPROTO_UDP: {
4476                 struct udphdr _udph, *uh;
4477
4478                 uh = skb_header_pointer(skb, offset, sizeof(_udph), &_udph);
4479                 if (uh == NULL)
4480                         break;
4481
4482                 ad->u.net->sport = uh->source;
4483                 ad->u.net->dport = uh->dest;
4484                 break;
4485         }
4486
4487         case IPPROTO_DCCP: {
4488                 struct dccp_hdr _dccph, *dh;
4489
4490                 dh = skb_header_pointer(skb, offset, sizeof(_dccph), &_dccph);
4491                 if (dh == NULL)
4492                         break;
4493
4494                 ad->u.net->sport = dh->dccph_sport;
4495                 ad->u.net->dport = dh->dccph_dport;
4496                 break;
4497         }
4498
4499 #if IS_ENABLED(CONFIG_IP_SCTP)
4500         case IPPROTO_SCTP: {
4501                 struct sctphdr _sctph, *sh;
4502
4503                 sh = skb_header_pointer(skb, offset, sizeof(_sctph), &_sctph);
4504                 if (sh == NULL)
4505                         break;
4506
4507                 ad->u.net->sport = sh->source;
4508                 ad->u.net->dport = sh->dest;
4509                 break;
4510         }
4511 #endif
4512         /* includes fragments */
4513         default:
4514                 break;
4515         }
4516 out:
4517         return ret;
4518 }
4519
4520 #endif /* IPV6 */
4521
4522 static int selinux_parse_skb(struct sk_buff *skb, struct common_audit_data *ad,
4523                              char **_addrp, int src, u8 *proto)
4524 {
4525         char *addrp;
4526         int ret;
4527
4528         switch (ad->u.net->family) {
4529         case PF_INET:
4530                 ret = selinux_parse_skb_ipv4(skb, ad, proto);
4531                 if (ret)
4532                         goto parse_error;
4533                 addrp = (char *)(src ? &ad->u.net->v4info.saddr :
4534                                        &ad->u.net->v4info.daddr);
4535                 goto okay;
4536
4537 #if IS_ENABLED(CONFIG_IPV6)
4538         case PF_INET6:
4539                 ret = selinux_parse_skb_ipv6(skb, ad, proto);
4540                 if (ret)
4541                         goto parse_error;
4542                 addrp = (char *)(src ? &ad->u.net->v6info.saddr :
4543                                        &ad->u.net->v6info.daddr);
4544                 goto okay;
4545 #endif  /* IPV6 */
4546         default:
4547                 addrp = NULL;
4548                 goto okay;
4549         }
4550
4551 parse_error:
4552         pr_warn(
4553                "SELinux: failure in selinux_parse_skb(),"
4554                " unable to parse packet\n");
4555         return ret;
4556
4557 okay:
4558         if (_addrp)
4559                 *_addrp = addrp;
4560         return 0;
4561 }
4562
4563 /**
4564  * selinux_skb_peerlbl_sid - Determine the peer label of a packet
4565  * @skb: the packet
4566  * @family: protocol family
4567  * @sid: the packet's peer label SID
4568  *
4569  * Description:
4570  * Check the various different forms of network peer labeling and determine
4571  * the peer label/SID for the packet; most of the magic actually occurs in
4572  * the security server function security_net_peersid_cmp().  The function
4573  * returns zero if the value in @sid is valid (although it may be SECSID_NULL)
4574  * or -EACCES if @sid is invalid due to inconsistencies with the different
4575  * peer labels.
4576  *
4577  */
4578 static int selinux_skb_peerlbl_sid(struct sk_buff *skb, u16 family, u32 *sid)
4579 {
4580         int err;
4581         u32 xfrm_sid;
4582         u32 nlbl_sid;
4583         u32 nlbl_type;
4584
4585         err = selinux_xfrm_skb_sid(skb, &xfrm_sid);
4586         if (unlikely(err))
4587                 return -EACCES;
4588         err = selinux_netlbl_skbuff_getsid(skb, family, &nlbl_type, &nlbl_sid);
4589         if (unlikely(err))
4590                 return -EACCES;
4591
4592         err = security_net_peersid_resolve(&selinux_state, nlbl_sid,
4593                                            nlbl_type, xfrm_sid, sid);
4594         if (unlikely(err)) {
4595                 pr_warn(
4596                        "SELinux: failure in selinux_skb_peerlbl_sid(),"
4597                        " unable to determine packet's peer label\n");
4598                 return -EACCES;
4599         }
4600
4601         return 0;
4602 }
4603
4604 /**
4605  * selinux_conn_sid - Determine the child socket label for a connection
4606  * @sk_sid: the parent socket's SID
4607  * @skb_sid: the packet's SID
4608  * @conn_sid: the resulting connection SID
4609  *
4610  * If @skb_sid is valid then the user:role:type information from @sk_sid is
4611  * combined with the MLS information from @skb_sid in order to create
4612  * @conn_sid.  If @skb_sid is not valid then @conn_sid is simply a copy
4613  * of @sk_sid.  Returns zero on success, negative values on failure.
4614  *
4615  */
4616 static int selinux_conn_sid(u32 sk_sid, u32 skb_sid, u32 *conn_sid)
4617 {
4618         int err = 0;
4619
4620         if (skb_sid != SECSID_NULL)
4621                 err = security_sid_mls_copy(&selinux_state, sk_sid, skb_sid,
4622                                             conn_sid);
4623         else
4624                 *conn_sid = sk_sid;
4625
4626         return err;
4627 }
4628
4629 /* socket security operations */
4630
4631 static int socket_sockcreate_sid(const struct task_security_struct *tsec,
4632                                  u16 secclass, u32 *socksid)
4633 {
4634         if (tsec->sockcreate_sid > SECSID_NULL) {
4635                 *socksid = tsec->sockcreate_sid;
4636                 return 0;
4637         }
4638
4639         return security_transition_sid(&selinux_state, tsec->sid, tsec->sid,
4640                                        secclass, NULL, socksid);
4641 }
4642
4643 static int sock_has_perm(struct sock *sk, u32 perms)
4644 {
4645         struct sk_security_struct *sksec = sk->sk_security;
4646         struct common_audit_data ad;
4647         struct lsm_network_audit net = {0,};
4648
4649         if (sksec->sid == SECINITSID_KERNEL)
4650                 return 0;
4651
4652         ad.type = LSM_AUDIT_DATA_NET;
4653         ad.u.net = &net;
4654         ad.u.net->sk = sk;
4655
4656         return avc_has_perm(&selinux_state,
4657                             current_sid(), sksec->sid, sksec->sclass, perms,
4658                             &ad);
4659 }
4660
4661 static int selinux_socket_create(int family, int type,
4662                                  int protocol, int kern)
4663 {
4664         const struct task_security_struct *tsec = selinux_cred(current_cred());
4665         u32 newsid;
4666         u16 secclass;
4667         int rc;
4668
4669         if (kern)
4670                 return 0;
4671
4672         secclass = socket_type_to_security_class(family, type, protocol);
4673         rc = socket_sockcreate_sid(tsec, secclass, &newsid);
4674         if (rc)
4675                 return rc;
4676
4677         return avc_has_perm(&selinux_state,
4678                             tsec->sid, newsid, secclass, SOCKET__CREATE, NULL);
4679 }
4680
4681 static int selinux_socket_post_create(struct socket *sock, int family,
4682                                       int type, int protocol, int kern)
4683 {
4684         const struct task_security_struct *tsec = selinux_cred(current_cred());
4685         struct inode_security_struct *isec = inode_security_novalidate(SOCK_INODE(sock));
4686         struct sk_security_struct *sksec;
4687         u16 sclass = socket_type_to_security_class(family, type, protocol);
4688         u32 sid = SECINITSID_KERNEL;
4689         int err = 0;
4690
4691         if (!kern) {
4692                 err = socket_sockcreate_sid(tsec, sclass, &sid);
4693                 if (err)
4694                         return err;
4695         }
4696
4697         isec->sclass = sclass;
4698         isec->sid = sid;
4699         isec->initialized = LABEL_INITIALIZED;
4700
4701         if (sock->sk) {
4702                 sksec = sock->sk->sk_security;
4703                 sksec->sclass = sclass;
4704                 sksec->sid = sid;
4705                 /* Allows detection of the first association on this socket */
4706                 if (sksec->sclass == SECCLASS_SCTP_SOCKET)
4707                         sksec->sctp_assoc_state = SCTP_ASSOC_UNSET;
4708
4709                 err = selinux_netlbl_socket_post_create(sock->sk, family);
4710         }
4711
4712         return err;
4713 }
4714
4715 static int selinux_socket_socketpair(struct socket *socka,
4716                                      struct socket *sockb)
4717 {
4718         struct sk_security_struct *sksec_a = socka->sk->sk_security;
4719         struct sk_security_struct *sksec_b = sockb->sk->sk_security;
4720
4721         sksec_a->peer_sid = sksec_b->sid;
4722         sksec_b->peer_sid = sksec_a->sid;
4723
4724         return 0;
4725 }
4726
4727 /* Range of port numbers used to automatically bind.
4728    Need to determine whether we should perform a name_bind
4729    permission check between the socket and the port number. */
4730
4731 static int selinux_socket_bind(struct socket *sock, struct sockaddr *address, int addrlen)
4732 {
4733         struct sock *sk = sock->sk;
4734         struct sk_security_struct *sksec = sk->sk_security;
4735         u16 family;
4736         int err;
4737
4738         err = sock_has_perm(sk, SOCKET__BIND);
4739         if (err)
4740                 goto out;
4741
4742         /* If PF_INET or PF_INET6, check name_bind permission for the port. */
4743         family = sk->sk_family;
4744         if (family == PF_INET || family == PF_INET6) {
4745                 char *addrp;
4746                 struct common_audit_data ad;
4747                 struct lsm_network_audit net = {0,};
4748                 struct sockaddr_in *addr4 = NULL;
4749                 struct sockaddr_in6 *addr6 = NULL;
4750                 u16 family_sa;
4751                 unsigned short snum;
4752                 u32 sid, node_perm;
4753
4754                 /*
4755                  * sctp_bindx(3) calls via selinux_sctp_bind_connect()
4756                  * that validates multiple binding addresses. Because of this
4757                  * need to check address->sa_family as it is possible to have
4758                  * sk->sk_family = PF_INET6 with addr->sa_family = AF_INET.
4759                  */
4760                 if (addrlen < offsetofend(struct sockaddr, sa_family))
4761                         return -EINVAL;
4762                 family_sa = address->sa_family;
4763                 switch (family_sa) {
4764                 case AF_UNSPEC:
4765                 case AF_INET:
4766                         if (addrlen < sizeof(struct sockaddr_in))
4767                                 return -EINVAL;
4768                         addr4 = (struct sockaddr_in *)address;
4769                         if (family_sa == AF_UNSPEC) {
4770                                 /* see __inet_bind(), we only want to allow
4771                                  * AF_UNSPEC if the address is INADDR_ANY
4772                                  */
4773                                 if (addr4->sin_addr.s_addr != htonl(INADDR_ANY))
4774                                         goto err_af;
4775                                 family_sa = AF_INET;
4776                         }
4777                         snum = ntohs(addr4->sin_port);
4778                         addrp = (char *)&addr4->sin_addr.s_addr;
4779                         break;
4780                 case AF_INET6:
4781                         if (addrlen < SIN6_LEN_RFC2133)
4782                                 return -EINVAL;
4783                         addr6 = (struct sockaddr_in6 *)address;
4784                         snum = ntohs(addr6->sin6_port);
4785                         addrp = (char *)&addr6->sin6_addr.s6_addr;
4786                         break;
4787                 default:
4788                         goto err_af;
4789                 }
4790
4791                 ad.type = LSM_AUDIT_DATA_NET;
4792                 ad.u.net = &net;
4793                 ad.u.net->sport = htons(snum);
4794                 ad.u.net->family = family_sa;
4795
4796                 if (snum) {
4797                         int low, high;
4798
4799                         inet_get_local_port_range(sock_net(sk), &low, &high);
4800
4801                         if (inet_port_requires_bind_service(sock_net(sk), snum) ||
4802                             snum < low || snum > high) {
4803                                 err = sel_netport_sid(sk->sk_protocol,
4804                                                       snum, &sid);
4805                                 if (err)
4806                                         goto out;
4807                                 err = avc_has_perm(&selinux_state,
4808                                                    sksec->sid, sid,
4809                                                    sksec->sclass,
4810                                                    SOCKET__NAME_BIND, &ad);
4811                                 if (err)
4812                                         goto out;
4813                         }
4814                 }
4815
4816                 switch (sksec->sclass) {
4817                 case SECCLASS_TCP_SOCKET:
4818                         node_perm = TCP_SOCKET__NODE_BIND;
4819                         break;
4820
4821                 case SECCLASS_UDP_SOCKET:
4822                         node_perm = UDP_SOCKET__NODE_BIND;
4823                         break;
4824
4825                 case SECCLASS_DCCP_SOCKET:
4826                         node_perm = DCCP_SOCKET__NODE_BIND;
4827                         break;
4828
4829                 case SECCLASS_SCTP_SOCKET:
4830                         node_perm = SCTP_SOCKET__NODE_BIND;
4831                         break;
4832
4833                 default:
4834                         node_perm = RAWIP_SOCKET__NODE_BIND;
4835                         break;
4836                 }
4837
4838                 err = sel_netnode_sid(addrp, family_sa, &sid);
4839                 if (err)
4840                         goto out;
4841
4842                 if (family_sa == AF_INET)
4843                         ad.u.net->v4info.saddr = addr4->sin_addr.s_addr;
4844                 else
4845                         ad.u.net->v6info.saddr = addr6->sin6_addr;
4846
4847                 err = avc_has_perm(&selinux_state,
4848                                    sksec->sid, sid,
4849                                    sksec->sclass, node_perm, &ad);
4850                 if (err)
4851                         goto out;
4852         }
4853 out:
4854         return err;
4855 err_af:
4856         /* Note that SCTP services expect -EINVAL, others -EAFNOSUPPORT. */
4857         if (sksec->sclass == SECCLASS_SCTP_SOCKET)
4858                 return -EINVAL;
4859         return -EAFNOSUPPORT;
4860 }
4861
4862 /* This supports connect(2) and SCTP connect services such as sctp_connectx(3)
4863  * and sctp_sendmsg(3) as described in Documentation/security/SCTP.rst
4864  */
4865 static int selinux_socket_connect_helper(struct socket *sock,
4866                                          struct sockaddr *address, int addrlen)
4867 {
4868         struct sock *sk = sock->sk;
4869         struct sk_security_struct *sksec = sk->sk_security;
4870         int err;
4871
4872         err = sock_has_perm(sk, SOCKET__CONNECT);
4873         if (err)
4874                 return err;
4875         if (addrlen < offsetofend(struct sockaddr, sa_family))
4876                 return -EINVAL;
4877
4878         /* connect(AF_UNSPEC) has special handling, as it is a documented
4879          * way to disconnect the socket
4880          */
4881         if (address->sa_family == AF_UNSPEC)
4882                 return 0;
4883
4884         /*
4885          * If a TCP, DCCP or SCTP socket, check name_connect permission
4886          * for the port.
4887          */
4888         if (sksec->sclass == SECCLASS_TCP_SOCKET ||
4889             sksec->sclass == SECCLASS_DCCP_SOCKET ||
4890             sksec->sclass == SECCLASS_SCTP_SOCKET) {
4891                 struct common_audit_data ad;
4892                 struct lsm_network_audit net = {0,};
4893                 struct sockaddr_in *addr4 = NULL;
4894                 struct sockaddr_in6 *addr6 = NULL;
4895                 unsigned short snum;
4896                 u32 sid, perm;
4897
4898                 /* sctp_connectx(3) calls via selinux_sctp_bind_connect()
4899                  * that validates multiple connect addresses. Because of this
4900                  * need to check address->sa_family as it is possible to have
4901                  * sk->sk_family = PF_INET6 with addr->sa_family = AF_INET.
4902                  */
4903                 switch (address->sa_family) {
4904                 case AF_INET:
4905                         addr4 = (struct sockaddr_in *)address;
4906                         if (addrlen < sizeof(struct sockaddr_in))
4907                                 return -EINVAL;
4908                         snum = ntohs(addr4->sin_port);
4909                         break;
4910                 case AF_INET6:
4911                         addr6 = (struct sockaddr_in6 *)address;
4912                         if (addrlen < SIN6_LEN_RFC2133)
4913                                 return -EINVAL;
4914                         snum = ntohs(addr6->sin6_port);
4915                         break;
4916                 default:
4917                         /* Note that SCTP services expect -EINVAL, whereas
4918                          * others expect -EAFNOSUPPORT.
4919                          */
4920                         if (sksec->sclass == SECCLASS_SCTP_SOCKET)
4921                                 return -EINVAL;
4922                         else
4923                                 return -EAFNOSUPPORT;
4924                 }
4925
4926                 err = sel_netport_sid(sk->sk_protocol, snum, &sid);
4927                 if (err)
4928                         return err;
4929
4930                 switch (sksec->sclass) {
4931                 case SECCLASS_TCP_SOCKET:
4932                         perm = TCP_SOCKET__NAME_CONNECT;
4933                         break;
4934                 case SECCLASS_DCCP_SOCKET:
4935                         perm = DCCP_SOCKET__NAME_CONNECT;
4936                         break;
4937                 case SECCLASS_SCTP_SOCKET:
4938                         perm = SCTP_SOCKET__NAME_CONNECT;
4939                         break;
4940                 }
4941
4942                 ad.type = LSM_AUDIT_DATA_NET;
4943                 ad.u.net = &net;
4944                 ad.u.net->dport = htons(snum);
4945                 ad.u.net->family = address->sa_family;
4946                 err = avc_has_perm(&selinux_state,
4947                                    sksec->sid, sid, sksec->sclass, perm, &ad);
4948                 if (err)
4949                         return err;
4950         }
4951
4952         return 0;
4953 }
4954
4955 /* Supports connect(2), see comments in selinux_socket_connect_helper() */
4956 static int selinux_socket_connect(struct socket *sock,
4957                                   struct sockaddr *address, int addrlen)
4958 {
4959         int err;
4960         struct sock *sk = sock->sk;
4961
4962         err = selinux_socket_connect_helper(sock, address, addrlen);
4963         if (err)
4964                 return err;
4965
4966         return selinux_netlbl_socket_connect(sk, address);
4967 }
4968
4969 static int selinux_socket_listen(struct socket *sock, int backlog)
4970 {
4971         return sock_has_perm(sock->sk, SOCKET__LISTEN);
4972 }
4973
4974 static int selinux_socket_accept(struct socket *sock, struct socket *newsock)
4975 {
4976         int err;
4977         struct inode_security_struct *isec;
4978         struct inode_security_struct *newisec;
4979         u16 sclass;
4980         u32 sid;
4981
4982         err = sock_has_perm(sock->sk, SOCKET__ACCEPT);
4983         if (err)
4984                 return err;
4985
4986         isec = inode_security_novalidate(SOCK_INODE(sock));
4987         spin_lock(&isec->lock);
4988         sclass = isec->sclass;
4989         sid = isec->sid;
4990         spin_unlock(&isec->lock);
4991
4992         newisec = inode_security_novalidate(SOCK_INODE(newsock));
4993         newisec->sclass = sclass;
4994         newisec->sid = sid;
4995         newisec->initialized = LABEL_INITIALIZED;
4996
4997         return 0;
4998 }
4999
5000 static int selinux_socket_sendmsg(struct socket *sock, struct msghdr *msg,
5001                                   int size)
5002 {
5003         return sock_has_perm(sock->sk, SOCKET__WRITE);
5004 }
5005
5006 static int selinux_socket_recvmsg(struct socket *sock, struct msghdr *msg,
5007                                   int size, int flags)
5008 {
5009         return sock_has_perm(sock->sk, SOCKET__READ);
5010 }
5011
5012 static int selinux_socket_getsockname(struct socket *sock)
5013 {
5014         return sock_has_perm(sock->sk, SOCKET__GETATTR);
5015 }
5016
5017 static int selinux_socket_getpeername(struct socket *sock)
5018 {
5019         return sock_has_perm(sock->sk, SOCKET__GETATTR);
5020 }
5021
5022 static int selinux_socket_setsockopt(struct socket *sock, int level, int optname)
5023 {
5024         int err;
5025
5026         err = sock_has_perm(sock->sk, SOCKET__SETOPT);
5027         if (err)
5028                 return err;
5029
5030         return selinux_netlbl_socket_setsockopt(sock, level, optname);
5031 }
5032
5033 static int selinux_socket_getsockopt(struct socket *sock, int level,
5034                                      int optname)
5035 {
5036         return sock_has_perm(sock->sk, SOCKET__GETOPT);
5037 }
5038
5039 static int selinux_socket_shutdown(struct socket *sock, int how)
5040 {
5041         return sock_has_perm(sock->sk, SOCKET__SHUTDOWN);
5042 }
5043
5044 static int selinux_socket_unix_stream_connect(struct sock *sock,
5045                                               struct sock *other,
5046                                               struct sock *newsk)
5047 {
5048         struct sk_security_struct *sksec_sock = sock->sk_security;
5049         struct sk_security_struct *sksec_other = other->sk_security;
5050         struct sk_security_struct *sksec_new = newsk->sk_security;
5051         struct common_audit_data ad;
5052         struct lsm_network_audit net = {0,};
5053         int err;
5054
5055         ad.type = LSM_AUDIT_DATA_NET;
5056         ad.u.net = &net;
5057         ad.u.net->sk = other;
5058
5059         err = avc_has_perm(&selinux_state,
5060                            sksec_sock->sid, sksec_other->sid,
5061                            sksec_other->sclass,
5062                            UNIX_STREAM_SOCKET__CONNECTTO, &ad);
5063         if (err)
5064                 return err;
5065
5066         /* server child socket */
5067         sksec_new->peer_sid = sksec_sock->sid;
5068         err = security_sid_mls_copy(&selinux_state, sksec_other->sid,
5069                                     sksec_sock->sid, &sksec_new->sid);
5070         if (err)
5071                 return err;
5072
5073         /* connecting socket */
5074         sksec_sock->peer_sid = sksec_new->sid;
5075
5076         return 0;
5077 }
5078
5079 static int selinux_socket_unix_may_send(struct socket *sock,
5080                                         struct socket *other)
5081 {
5082         struct sk_security_struct *ssec = sock->sk->sk_security;
5083         struct sk_security_struct *osec = other->sk->sk_security;
5084         struct common_audit_data ad;
5085         struct lsm_network_audit net = {0,};
5086
5087         ad.type = LSM_AUDIT_DATA_NET;
5088         ad.u.net = &net;
5089         ad.u.net->sk = other->sk;
5090
5091         return avc_has_perm(&selinux_state,
5092                             ssec->sid, osec->sid, osec->sclass, SOCKET__SENDTO,
5093                             &ad);
5094 }
5095
5096 static int selinux_inet_sys_rcv_skb(struct net *ns, int ifindex,
5097                                     char *addrp, u16 family, u32 peer_sid,
5098                                     struct common_audit_data *ad)
5099 {
5100         int err;
5101         u32 if_sid;
5102         u32 node_sid;
5103
5104         err = sel_netif_sid(ns, ifindex, &if_sid);
5105         if (err)
5106                 return err;
5107         err = avc_has_perm(&selinux_state,
5108                            peer_sid, if_sid,
5109                            SECCLASS_NETIF, NETIF__INGRESS, ad);
5110         if (err)
5111                 return err;
5112
5113         err = sel_netnode_sid(addrp, family, &node_sid);
5114         if (err)
5115                 return err;
5116         return avc_has_perm(&selinux_state,
5117                             peer_sid, node_sid,
5118                             SECCLASS_NODE, NODE__RECVFROM, ad);
5119 }
5120
5121 static int selinux_sock_rcv_skb_compat(struct sock *sk, struct sk_buff *skb,
5122                                        u16 family)
5123 {
5124         int err = 0;
5125         struct sk_security_struct *sksec = sk->sk_security;
5126         u32 sk_sid = sksec->sid;
5127         struct common_audit_data ad;
5128         struct lsm_network_audit net = {0,};
5129         char *addrp;
5130
5131         ad.type = LSM_AUDIT_DATA_NET;
5132         ad.u.net = &net;
5133         ad.u.net->netif = skb->skb_iif;
5134         ad.u.net->family = family;
5135         err = selinux_parse_skb(skb, &ad, &addrp, 1, NULL);
5136         if (err)
5137                 return err;
5138
5139         if (selinux_secmark_enabled()) {
5140                 err = avc_has_perm(&selinux_state,
5141                                    sk_sid, skb->secmark, SECCLASS_PACKET,
5142                                    PACKET__RECV, &ad);
5143                 if (err)
5144                         return err;
5145         }
5146
5147         err = selinux_netlbl_sock_rcv_skb(sksec, skb, family, &ad);
5148         if (err)
5149                 return err;
5150         err = selinux_xfrm_sock_rcv_skb(sksec->sid, skb, &ad);
5151
5152         return err;
5153 }
5154
5155 static int selinux_socket_sock_rcv_skb(struct sock *sk, struct sk_buff *skb)
5156 {
5157         int err;
5158         struct sk_security_struct *sksec = sk->sk_security;
5159         u16 family = sk->sk_family;
5160         u32 sk_sid = sksec->sid;
5161         struct common_audit_data ad;
5162         struct lsm_network_audit net = {0,};
5163         char *addrp;
5164         u8 secmark_active;
5165         u8 peerlbl_active;
5166
5167         if (family != PF_INET && family != PF_INET6)
5168                 return 0;
5169
5170         /* Handle mapped IPv4 packets arriving via IPv6 sockets */
5171         if (family == PF_INET6 && skb->protocol == htons(ETH_P_IP))
5172                 family = PF_INET;
5173
5174         /* If any sort of compatibility mode is enabled then handoff processing
5175          * to the selinux_sock_rcv_skb_compat() function to deal with the
5176          * special handling.  We do this in an attempt to keep this function
5177          * as fast and as clean as possible. */
5178         if (!selinux_policycap_netpeer())
5179                 return selinux_sock_rcv_skb_compat(sk, skb, family);
5180
5181         secmark_active = selinux_secmark_enabled();
5182         peerlbl_active = selinux_peerlbl_enabled();
5183         if (!secmark_active && !peerlbl_active)
5184                 return 0;
5185
5186         ad.type = LSM_AUDIT_DATA_NET;
5187         ad.u.net = &net;
5188         ad.u.net->netif = skb->skb_iif;
5189         ad.u.net->family = family;
5190         err = selinux_parse_skb(skb, &ad, &addrp, 1, NULL);
5191         if (err)
5192                 return err;
5193
5194         if (peerlbl_active) {
5195                 u32 peer_sid;
5196
5197                 err = selinux_skb_peerlbl_sid(skb, family, &peer_sid);
5198                 if (err)
5199                         return err;
5200                 err = selinux_inet_sys_rcv_skb(sock_net(sk), skb->skb_iif,
5201                                                addrp, family, peer_sid, &ad);
5202                 if (err) {
5203                         selinux_netlbl_err(skb, family, err, 0);
5204                         return err;
5205                 }
5206                 err = avc_has_perm(&selinux_state,
5207                                    sk_sid, peer_sid, SECCLASS_PEER,
5208                                    PEER__RECV, &ad);
5209                 if (err) {
5210                         selinux_netlbl_err(skb, family, err, 0);
5211                         return err;
5212                 }
5213         }
5214
5215         if (secmark_active) {
5216                 err = avc_has_perm(&selinux_state,
5217                                    sk_sid, skb->secmark, SECCLASS_PACKET,
5218                                    PACKET__RECV, &ad);
5219                 if (err)
5220                         return err;
5221         }
5222
5223         return err;
5224 }
5225
5226 static int selinux_socket_getpeersec_stream(struct socket *sock, char __user *optval,
5227                                             int __user *optlen, unsigned len)
5228 {
5229         int err = 0;
5230         char *scontext;
5231         u32 scontext_len;
5232         struct sk_security_struct *sksec = sock->sk->sk_security;
5233         u32 peer_sid = SECSID_NULL;
5234
5235         if (sksec->sclass == SECCLASS_UNIX_STREAM_SOCKET ||
5236             sksec->sclass == SECCLASS_TCP_SOCKET ||
5237             sksec->sclass == SECCLASS_SCTP_SOCKET)
5238                 peer_sid = sksec->peer_sid;
5239         if (peer_sid == SECSID_NULL)
5240                 return -ENOPROTOOPT;
5241
5242         err = security_sid_to_context(&selinux_state, peer_sid, &scontext,
5243                                       &scontext_len);
5244         if (err)
5245                 return err;
5246
5247         if (scontext_len > len) {
5248                 err = -ERANGE;
5249                 goto out_len;
5250         }
5251
5252         if (copy_to_user(optval, scontext, scontext_len))
5253                 err = -EFAULT;
5254
5255 out_len:
5256         if (put_user(scontext_len, optlen))
5257                 err = -EFAULT;
5258         kfree(scontext);
5259         return err;
5260 }
5261
5262 static int selinux_socket_getpeersec_dgram(struct socket *sock, struct sk_buff *skb, u32 *secid)
5263 {
5264         u32 peer_secid = SECSID_NULL;
5265         u16 family;
5266         struct inode_security_struct *isec;
5267
5268         if (skb && skb->protocol == htons(ETH_P_IP))
5269                 family = PF_INET;
5270         else if (skb && skb->protocol == htons(ETH_P_IPV6))
5271                 family = PF_INET6;
5272         else if (sock)
5273                 family = sock->sk->sk_family;
5274         else
5275                 goto out;
5276
5277         if (sock && family == PF_UNIX) {
5278                 isec = inode_security_novalidate(SOCK_INODE(sock));
5279                 peer_secid = isec->sid;
5280         } else if (skb)
5281                 selinux_skb_peerlbl_sid(skb, family, &peer_secid);
5282
5283 out:
5284         *secid = peer_secid;
5285         if (peer_secid == SECSID_NULL)
5286                 return -EINVAL;
5287         return 0;
5288 }
5289
5290 static int selinux_sk_alloc_security(struct sock *sk, int family, gfp_t priority)
5291 {
5292         struct sk_security_struct *sksec;
5293
5294         sksec = kzalloc(sizeof(*sksec), priority);
5295         if (!sksec)
5296                 return -ENOMEM;
5297
5298         sksec->peer_sid = SECINITSID_UNLABELED;
5299         sksec->sid = SECINITSID_UNLABELED;
5300         sksec->sclass = SECCLASS_SOCKET;
5301         selinux_netlbl_sk_security_reset(sksec);
5302         sk->sk_security = sksec;
5303
5304         return 0;
5305 }
5306
5307 static void selinux_sk_free_security(struct sock *sk)
5308 {
5309         struct sk_security_struct *sksec = sk->sk_security;
5310
5311         sk->sk_security = NULL;
5312         selinux_netlbl_sk_security_free(sksec);
5313         kfree(sksec);
5314 }
5315
5316 static void selinux_sk_clone_security(const struct sock *sk, struct sock *newsk)
5317 {
5318         struct sk_security_struct *sksec = sk->sk_security;
5319         struct sk_security_struct *newsksec = newsk->sk_security;
5320
5321         newsksec->sid = sksec->sid;
5322         newsksec->peer_sid = sksec->peer_sid;
5323         newsksec->sclass = sksec->sclass;
5324
5325         selinux_netlbl_sk_security_reset(newsksec);
5326 }
5327
5328 static void selinux_sk_getsecid(struct sock *sk, u32 *secid)
5329 {
5330         if (!sk)
5331                 *secid = SECINITSID_ANY_SOCKET;
5332         else {
5333                 struct sk_security_struct *sksec = sk->sk_security;
5334
5335                 *secid = sksec->sid;
5336         }
5337 }
5338
5339 static void selinux_sock_graft(struct sock *sk, struct socket *parent)
5340 {
5341         struct inode_security_struct *isec =
5342                 inode_security_novalidate(SOCK_INODE(parent));
5343         struct sk_security_struct *sksec = sk->sk_security;
5344
5345         if (sk->sk_family == PF_INET || sk->sk_family == PF_INET6 ||
5346             sk->sk_family == PF_UNIX)
5347                 isec->sid = sksec->sid;
5348         sksec->sclass = isec->sclass;
5349 }
5350
5351 /* Called whenever SCTP receives an INIT chunk. This happens when an incoming
5352  * connect(2), sctp_connectx(3) or sctp_sendmsg(3) (with no association
5353  * already present).
5354  */
5355 static int selinux_sctp_assoc_request(struct sctp_endpoint *ep,
5356                                       struct sk_buff *skb)
5357 {
5358         struct sk_security_struct *sksec = ep->base.sk->sk_security;
5359         struct common_audit_data ad;
5360         struct lsm_network_audit net = {0,};
5361         u8 peerlbl_active;
5362         u32 peer_sid = SECINITSID_UNLABELED;
5363         u32 conn_sid;
5364         int err = 0;
5365
5366         if (!selinux_policycap_extsockclass())
5367                 return 0;
5368
5369         peerlbl_active = selinux_peerlbl_enabled();
5370
5371         if (peerlbl_active) {
5372                 /* This will return peer_sid = SECSID_NULL if there are
5373                  * no peer labels, see security_net_peersid_resolve().
5374                  */
5375                 err = selinux_skb_peerlbl_sid(skb, ep->base.sk->sk_family,
5376                                               &peer_sid);
5377                 if (err)
5378                         return err;
5379
5380                 if (peer_sid == SECSID_NULL)
5381                         peer_sid = SECINITSID_UNLABELED;
5382         }
5383
5384         if (sksec->sctp_assoc_state == SCTP_ASSOC_UNSET) {
5385                 sksec->sctp_assoc_state = SCTP_ASSOC_SET;
5386
5387                 /* Here as first association on socket. As the peer SID
5388                  * was allowed by peer recv (and the netif/node checks),
5389                  * then it is approved by policy and used as the primary
5390                  * peer SID for getpeercon(3).
5391                  */
5392                 sksec->peer_sid = peer_sid;
5393         } else if  (sksec->peer_sid != peer_sid) {
5394                 /* Other association peer SIDs are checked to enforce
5395                  * consistency among the peer SIDs.
5396                  */
5397                 ad.type = LSM_AUDIT_DATA_NET;
5398                 ad.u.net = &net;
5399                 ad.u.net->sk = ep->base.sk;
5400                 err = avc_has_perm(&selinux_state,
5401                                    sksec->peer_sid, peer_sid, sksec->sclass,
5402                                    SCTP_SOCKET__ASSOCIATION, &ad);
5403                 if (err)
5404                         return err;
5405         }
5406
5407         /* Compute the MLS component for the connection and store
5408          * the information in ep. This will be used by SCTP TCP type
5409          * sockets and peeled off connections as they cause a new
5410          * socket to be generated. selinux_sctp_sk_clone() will then
5411          * plug this into the new socket.
5412          */
5413         err = selinux_conn_sid(sksec->sid, peer_sid, &conn_sid);
5414         if (err)
5415                 return err;
5416
5417         ep->secid = conn_sid;
5418         ep->peer_secid = peer_sid;
5419
5420         /* Set any NetLabel labels including CIPSO/CALIPSO options. */
5421         return selinux_netlbl_sctp_assoc_request(ep, skb);
5422 }
5423
5424 /* Check if sctp IPv4/IPv6 addresses are valid for binding or connecting
5425  * based on their @optname.
5426  */
5427 static int selinux_sctp_bind_connect(struct sock *sk, int optname,
5428                                      struct sockaddr *address,
5429                                      int addrlen)
5430 {
5431         int len, err = 0, walk_size = 0;
5432         void *addr_buf;
5433         struct sockaddr *addr;
5434         struct socket *sock;
5435
5436         if (!selinux_policycap_extsockclass())
5437                 return 0;
5438
5439         /* Process one or more addresses that may be IPv4 or IPv6 */
5440         sock = sk->sk_socket;
5441         addr_buf = address;
5442
5443         while (walk_size < addrlen) {
5444                 if (walk_size + sizeof(sa_family_t) > addrlen)
5445                         return -EINVAL;
5446
5447                 addr = addr_buf;
5448                 switch (addr->sa_family) {
5449                 case AF_UNSPEC:
5450                 case AF_INET:
5451                         len = sizeof(struct sockaddr_in);
5452                         break;
5453                 case AF_INET6:
5454                         len = sizeof(struct sockaddr_in6);
5455                         break;
5456                 default:
5457                         return -EINVAL;
5458                 }
5459
5460                 if (walk_size + len > addrlen)
5461                         return -EINVAL;
5462
5463                 err = -EINVAL;
5464                 switch (optname) {
5465                 /* Bind checks */
5466                 case SCTP_PRIMARY_ADDR:
5467                 case SCTP_SET_PEER_PRIMARY_ADDR:
5468                 case SCTP_SOCKOPT_BINDX_ADD:
5469                         err = selinux_socket_bind(sock, addr, len);
5470                         break;
5471                 /* Connect checks */
5472                 case SCTP_SOCKOPT_CONNECTX:
5473                 case SCTP_PARAM_SET_PRIMARY:
5474                 case SCTP_PARAM_ADD_IP:
5475                 case SCTP_SENDMSG_CONNECT:
5476                         err = selinux_socket_connect_helper(sock, addr, len);
5477                         if (err)
5478                                 return err;
5479
5480                         /* As selinux_sctp_bind_connect() is called by the
5481                          * SCTP protocol layer, the socket is already locked,
5482                          * therefore selinux_netlbl_socket_connect_locked()
5483                          * is called here. The situations handled are:
5484                          * sctp_connectx(3), sctp_sendmsg(3), sendmsg(2),
5485                          * whenever a new IP address is added or when a new
5486                          * primary address is selected.
5487                          * Note that an SCTP connect(2) call happens before
5488                          * the SCTP protocol layer and is handled via
5489                          * selinux_socket_connect().
5490                          */
5491                         err = selinux_netlbl_socket_connect_locked(sk, addr);
5492                         break;
5493                 }
5494
5495                 if (err)
5496                         return err;
5497
5498                 addr_buf += len;
5499                 walk_size += len;
5500         }
5501
5502         return 0;
5503 }
5504
5505 /* Called whenever a new socket is created by accept(2) or sctp_peeloff(3). */
5506 static void selinux_sctp_sk_clone(struct sctp_endpoint *ep, struct sock *sk,
5507                                   struct sock *newsk)
5508 {
5509         struct sk_security_struct *sksec = sk->sk_security;
5510         struct sk_security_struct *newsksec = newsk->sk_security;
5511
5512         /* If policy does not support SECCLASS_SCTP_SOCKET then call
5513          * the non-sctp clone version.
5514          */
5515         if (!selinux_policycap_extsockclass())
5516                 return selinux_sk_clone_security(sk, newsk);
5517
5518         newsksec->sid = ep->secid;
5519         newsksec->peer_sid = ep->peer_secid;
5520         newsksec->sclass = sksec->sclass;
5521         selinux_netlbl_sctp_sk_clone(sk, newsk);
5522 }
5523
5524 static int selinux_inet_conn_request(const struct sock *sk, struct sk_buff *skb,
5525                                      struct request_sock *req)
5526 {
5527         struct sk_security_struct *sksec = sk->sk_security;
5528         int err;
5529         u16 family = req->rsk_ops->family;
5530         u32 connsid;
5531         u32 peersid;
5532
5533         err = selinux_skb_peerlbl_sid(skb, family, &peersid);
5534         if (err)
5535                 return err;
5536         err = selinux_conn_sid(sksec->sid, peersid, &connsid);
5537         if (err)
5538                 return err;
5539         req->secid = connsid;
5540         req->peer_secid = peersid;
5541
5542         return selinux_netlbl_inet_conn_request(req, family);
5543 }
5544
5545 static void selinux_inet_csk_clone(struct sock *newsk,
5546                                    const struct request_sock *req)
5547 {
5548         struct sk_security_struct *newsksec = newsk->sk_security;
5549
5550         newsksec->sid = req->secid;
5551         newsksec->peer_sid = req->peer_secid;
5552         /* NOTE: Ideally, we should also get the isec->sid for the
5553            new socket in sync, but we don't have the isec available yet.
5554            So we will wait until sock_graft to do it, by which
5555            time it will have been created and available. */
5556
5557         /* We don't need to take any sort of lock here as we are the only
5558          * thread with access to newsksec */
5559         selinux_netlbl_inet_csk_clone(newsk, req->rsk_ops->family);
5560 }
5561
5562 static void selinux_inet_conn_established(struct sock *sk, struct sk_buff *skb)
5563 {
5564         u16 family = sk->sk_family;
5565         struct sk_security_struct *sksec = sk->sk_security;
5566
5567         /* handle mapped IPv4 packets arriving via IPv6 sockets */
5568         if (family == PF_INET6 && skb->protocol == htons(ETH_P_IP))
5569                 family = PF_INET;
5570
5571         selinux_skb_peerlbl_sid(skb, family, &sksec->peer_sid);
5572 }
5573
5574 static int selinux_secmark_relabel_packet(u32 sid)
5575 {
5576         const struct task_security_struct *__tsec;
5577         u32 tsid;
5578
5579         __tsec = selinux_cred(current_cred());
5580         tsid = __tsec->sid;
5581
5582         return avc_has_perm(&selinux_state,
5583                             tsid, sid, SECCLASS_PACKET, PACKET__RELABELTO,
5584                             NULL);
5585 }
5586
5587 static void selinux_secmark_refcount_inc(void)
5588 {
5589         atomic_inc(&selinux_secmark_refcount);
5590 }
5591
5592 static void selinux_secmark_refcount_dec(void)
5593 {
5594         atomic_dec(&selinux_secmark_refcount);
5595 }
5596
5597 static void selinux_req_classify_flow(const struct request_sock *req,
5598                                       struct flowi_common *flic)
5599 {
5600         flic->flowic_secid = req->secid;
5601 }
5602
5603 static int selinux_tun_dev_alloc_security(void **security)
5604 {
5605         struct tun_security_struct *tunsec;
5606
5607         tunsec = kzalloc(sizeof(*tunsec), GFP_KERNEL);
5608         if (!tunsec)
5609                 return -ENOMEM;
5610         tunsec->sid = current_sid();
5611
5612         *security = tunsec;
5613         return 0;
5614 }
5615
5616 static void selinux_tun_dev_free_security(void *security)
5617 {
5618         kfree(security);
5619 }
5620
5621 static int selinux_tun_dev_create(void)
5622 {
5623         u32 sid = current_sid();
5624
5625         /* we aren't taking into account the "sockcreate" SID since the socket
5626          * that is being created here is not a socket in the traditional sense,
5627          * instead it is a private sock, accessible only to the kernel, and
5628          * representing a wide range of network traffic spanning multiple
5629          * connections unlike traditional sockets - check the TUN driver to
5630          * get a better understanding of why this socket is special */
5631
5632         return avc_has_perm(&selinux_state,
5633                             sid, sid, SECCLASS_TUN_SOCKET, TUN_SOCKET__CREATE,
5634                             NULL);
5635 }
5636
5637 static int selinux_tun_dev_attach_queue(void *security)
5638 {
5639         struct tun_security_struct *tunsec = security;
5640
5641         return avc_has_perm(&selinux_state,
5642                             current_sid(), tunsec->sid, SECCLASS_TUN_SOCKET,
5643                             TUN_SOCKET__ATTACH_QUEUE, NULL);
5644 }
5645
5646 static int selinux_tun_dev_attach(struct sock *sk, void *security)
5647 {
5648         struct tun_security_struct *tunsec = security;
5649         struct sk_security_struct *sksec = sk->sk_security;
5650
5651         /* we don't currently perform any NetLabel based labeling here and it
5652          * isn't clear that we would want to do so anyway; while we could apply
5653          * labeling without the support of the TUN user the resulting labeled
5654          * traffic from the other end of the connection would almost certainly
5655          * cause confusion to the TUN user that had no idea network labeling
5656          * protocols were being used */
5657
5658         sksec->sid = tunsec->sid;
5659         sksec->sclass = SECCLASS_TUN_SOCKET;
5660
5661         return 0;
5662 }
5663
5664 static int selinux_tun_dev_open(void *security)
5665 {
5666         struct tun_security_struct *tunsec = security;
5667         u32 sid = current_sid();
5668         int err;
5669
5670         err = avc_has_perm(&selinux_state,
5671                            sid, tunsec->sid, SECCLASS_TUN_SOCKET,
5672                            TUN_SOCKET__RELABELFROM, NULL);
5673         if (err)
5674                 return err;
5675         err = avc_has_perm(&selinux_state,
5676                            sid, sid, SECCLASS_TUN_SOCKET,
5677                            TUN_SOCKET__RELABELTO, NULL);
5678         if (err)
5679                 return err;
5680         tunsec->sid = sid;
5681
5682         return 0;
5683 }
5684
5685 #ifdef CONFIG_NETFILTER
5686
5687 static unsigned int selinux_ip_forward(struct sk_buff *skb,
5688                                        const struct net_device *indev,
5689                                        u16 family)
5690 {
5691         int err;
5692         char *addrp;
5693         u32 peer_sid;
5694         struct common_audit_data ad;
5695         struct lsm_network_audit net = {0,};
5696         u8 secmark_active;
5697         u8 netlbl_active;
5698         u8 peerlbl_active;
5699
5700         if (!selinux_policycap_netpeer())
5701                 return NF_ACCEPT;
5702
5703         secmark_active = selinux_secmark_enabled();
5704         netlbl_active = netlbl_enabled();
5705         peerlbl_active = selinux_peerlbl_enabled();
5706         if (!secmark_active && !peerlbl_active)
5707                 return NF_ACCEPT;
5708
5709         if (selinux_skb_peerlbl_sid(skb, family, &peer_sid) != 0)
5710                 return NF_DROP;
5711
5712         ad.type = LSM_AUDIT_DATA_NET;
5713         ad.u.net = &net;
5714         ad.u.net->netif = indev->ifindex;
5715         ad.u.net->family = family;
5716         if (selinux_parse_skb(skb, &ad, &addrp, 1, NULL) != 0)
5717                 return NF_DROP;
5718
5719         if (peerlbl_active) {
5720                 err = selinux_inet_sys_rcv_skb(dev_net(indev), indev->ifindex,
5721                                                addrp, family, peer_sid, &ad);
5722                 if (err) {
5723                         selinux_netlbl_err(skb, family, err, 1);
5724                         return NF_DROP;
5725                 }
5726         }
5727
5728         if (secmark_active)
5729                 if (avc_has_perm(&selinux_state,
5730                                  peer_sid, skb->secmark,
5731                                  SECCLASS_PACKET, PACKET__FORWARD_IN, &ad))
5732                         return NF_DROP;
5733
5734         if (netlbl_active)
5735                 /* we do this in the FORWARD path and not the POST_ROUTING
5736                  * path because we want to make sure we apply the necessary
5737                  * labeling before IPsec is applied so we can leverage AH
5738                  * protection */
5739                 if (selinux_netlbl_skbuff_setsid(skb, family, peer_sid) != 0)
5740                         return NF_DROP;
5741
5742         return NF_ACCEPT;
5743 }
5744
5745 static unsigned int selinux_ipv4_forward(void *priv,
5746                                          struct sk_buff *skb,
5747                                          const struct nf_hook_state *state)
5748 {
5749         return selinux_ip_forward(skb, state->in, PF_INET);
5750 }
5751
5752 #if IS_ENABLED(CONFIG_IPV6)
5753 static unsigned int selinux_ipv6_forward(void *priv,
5754                                          struct sk_buff *skb,
5755                                          const struct nf_hook_state *state)
5756 {
5757         return selinux_ip_forward(skb, state->in, PF_INET6);
5758 }
5759 #endif  /* IPV6 */
5760
5761 static unsigned int selinux_ip_output(struct sk_buff *skb,
5762                                       u16 family)
5763 {
5764         struct sock *sk;
5765         u32 sid;
5766
5767         if (!netlbl_enabled())
5768                 return NF_ACCEPT;
5769
5770         /* we do this in the LOCAL_OUT path and not the POST_ROUTING path
5771          * because we want to make sure we apply the necessary labeling
5772          * before IPsec is applied so we can leverage AH protection */
5773         sk = skb->sk;
5774         if (sk) {
5775                 struct sk_security_struct *sksec;
5776
5777                 if (sk_listener(sk))
5778                         /* if the socket is the listening state then this
5779                          * packet is a SYN-ACK packet which means it needs to
5780                          * be labeled based on the connection/request_sock and
5781                          * not the parent socket.  unfortunately, we can't
5782                          * lookup the request_sock yet as it isn't queued on
5783                          * the parent socket until after the SYN-ACK is sent.
5784                          * the "solution" is to simply pass the packet as-is
5785                          * as any IP option based labeling should be copied
5786                          * from the initial connection request (in the IP
5787                          * layer).  it is far from ideal, but until we get a
5788                          * security label in the packet itself this is the
5789                          * best we can do. */
5790                         return NF_ACCEPT;
5791
5792                 /* standard practice, label using the parent socket */
5793                 sksec = sk->sk_security;
5794                 sid = sksec->sid;
5795         } else
5796                 sid = SECINITSID_KERNEL;
5797         if (selinux_netlbl_skbuff_setsid(skb, family, sid) != 0)
5798                 return NF_DROP;
5799
5800         return NF_ACCEPT;
5801 }
5802
5803 static unsigned int selinux_ipv4_output(void *priv,
5804                                         struct sk_buff *skb,
5805                                         const struct nf_hook_state *state)
5806 {
5807         return selinux_ip_output(skb, PF_INET);
5808 }
5809
5810 #if IS_ENABLED(CONFIG_IPV6)
5811 static unsigned int selinux_ipv6_output(void *priv,
5812                                         struct sk_buff *skb,
5813                                         const struct nf_hook_state *state)
5814 {
5815         return selinux_ip_output(skb, PF_INET6);
5816 }
5817 #endif  /* IPV6 */
5818
5819 static unsigned int selinux_ip_postroute_compat(struct sk_buff *skb,
5820                                                 int ifindex,
5821                                                 u16 family)
5822 {
5823         struct sock *sk = skb_to_full_sk(skb);
5824         struct sk_security_struct *sksec;
5825         struct common_audit_data ad;
5826         struct lsm_network_audit net = {0,};
5827         char *addrp;
5828         u8 proto;
5829
5830         if (sk == NULL)
5831                 return NF_ACCEPT;
5832         sksec = sk->sk_security;
5833
5834         ad.type = LSM_AUDIT_DATA_NET;
5835         ad.u.net = &net;
5836         ad.u.net->netif = ifindex;
5837         ad.u.net->family = family;
5838         if (selinux_parse_skb(skb, &ad, &addrp, 0, &proto))
5839                 return NF_DROP;
5840
5841         if (selinux_secmark_enabled())
5842                 if (avc_has_perm(&selinux_state,
5843                                  sksec->sid, skb->secmark,
5844                                  SECCLASS_PACKET, PACKET__SEND, &ad))
5845                         return NF_DROP_ERR(-ECONNREFUSED);
5846
5847         if (selinux_xfrm_postroute_last(sksec->sid, skb, &ad, proto))
5848                 return NF_DROP_ERR(-ECONNREFUSED);
5849
5850         return NF_ACCEPT;
5851 }
5852
5853 static unsigned int selinux_ip_postroute(struct sk_buff *skb,
5854                                          const struct net_device *outdev,
5855                                          u16 family)
5856 {
5857         u32 secmark_perm;
5858         u32 peer_sid;
5859         int ifindex = outdev->ifindex;
5860         struct sock *sk;
5861         struct common_audit_data ad;
5862         struct lsm_network_audit net = {0,};
5863         char *addrp;
5864         u8 secmark_active;
5865         u8 peerlbl_active;
5866
5867         /* If any sort of compatibility mode is enabled then handoff processing
5868          * to the selinux_ip_postroute_compat() function to deal with the
5869          * special handling.  We do this in an attempt to keep this function
5870          * as fast and as clean as possible. */
5871         if (!selinux_policycap_netpeer())
5872                 return selinux_ip_postroute_compat(skb, ifindex, family);
5873
5874         secmark_active = selinux_secmark_enabled();
5875         peerlbl_active = selinux_peerlbl_enabled();
5876         if (!secmark_active && !peerlbl_active)
5877                 return NF_ACCEPT;
5878
5879         sk = skb_to_full_sk(skb);
5880
5881 #ifdef CONFIG_XFRM
5882         /* If skb->dst->xfrm is non-NULL then the packet is undergoing an IPsec
5883          * packet transformation so allow the packet to pass without any checks
5884          * since we'll have another chance to perform access control checks
5885          * when the packet is on it's final way out.
5886          * NOTE: there appear to be some IPv6 multicast cases where skb->dst
5887          *       is NULL, in this case go ahead and apply access control.
5888          * NOTE: if this is a local socket (skb->sk != NULL) that is in the
5889          *       TCP listening state we cannot wait until the XFRM processing
5890          *       is done as we will miss out on the SA label if we do;
5891          *       unfortunately, this means more work, but it is only once per
5892          *       connection. */
5893         if (skb_dst(skb) != NULL && skb_dst(skb)->xfrm != NULL &&
5894             !(sk && sk_listener(sk)))
5895                 return NF_ACCEPT;
5896 #endif
5897
5898         if (sk == NULL) {
5899                 /* Without an associated socket the packet is either coming
5900                  * from the kernel or it is being forwarded; check the packet
5901                  * to determine which and if the packet is being forwarded
5902                  * query the packet directly to determine the security label. */
5903                 if (skb->skb_iif) {
5904                         secmark_perm = PACKET__FORWARD_OUT;
5905                         if (selinux_skb_peerlbl_sid(skb, family, &peer_sid))
5906                                 return NF_DROP;
5907                 } else {
5908                         secmark_perm = PACKET__SEND;
5909                         peer_sid = SECINITSID_KERNEL;
5910                 }
5911         } else if (sk_listener(sk)) {
5912                 /* Locally generated packet but the associated socket is in the
5913                  * listening state which means this is a SYN-ACK packet.  In
5914                  * this particular case the correct security label is assigned
5915                  * to the connection/request_sock but unfortunately we can't
5916                  * query the request_sock as it isn't queued on the parent
5917                  * socket until after the SYN-ACK packet is sent; the only
5918                  * viable choice is to regenerate the label like we do in
5919                  * selinux_inet_conn_request().  See also selinux_ip_output()
5920                  * for similar problems. */
5921                 u32 skb_sid;
5922                 struct sk_security_struct *sksec;
5923
5924                 sksec = sk->sk_security;
5925                 if (selinux_skb_peerlbl_sid(skb, family, &skb_sid))
5926                         return NF_DROP;
5927                 /* At this point, if the returned skb peerlbl is SECSID_NULL
5928                  * and the packet has been through at least one XFRM
5929                  * transformation then we must be dealing with the "final"
5930                  * form of labeled IPsec packet; since we've already applied
5931                  * all of our access controls on this packet we can safely
5932                  * pass the packet. */
5933                 if (skb_sid == SECSID_NULL) {
5934                         switch (family) {
5935                         case PF_INET:
5936                                 if (IPCB(skb)->flags & IPSKB_XFRM_TRANSFORMED)
5937                                         return NF_ACCEPT;
5938                                 break;
5939                         case PF_INET6:
5940                                 if (IP6CB(skb)->flags & IP6SKB_XFRM_TRANSFORMED)
5941                                         return NF_ACCEPT;
5942                                 break;
5943                         default:
5944                                 return NF_DROP_ERR(-ECONNREFUSED);
5945                         }
5946                 }
5947                 if (selinux_conn_sid(sksec->sid, skb_sid, &peer_sid))
5948                         return NF_DROP;
5949                 secmark_perm = PACKET__SEND;
5950         } else {
5951                 /* Locally generated packet, fetch the security label from the
5952                  * associated socket. */
5953                 struct sk_security_struct *sksec = sk->sk_security;
5954                 peer_sid = sksec->sid;
5955                 secmark_perm = PACKET__SEND;
5956         }
5957
5958         ad.type = LSM_AUDIT_DATA_NET;
5959         ad.u.net = &net;
5960         ad.u.net->netif = ifindex;
5961         ad.u.net->family = family;
5962         if (selinux_parse_skb(skb, &ad, &addrp, 0, NULL))
5963                 return NF_DROP;
5964
5965         if (secmark_active)
5966                 if (avc_has_perm(&selinux_state,
5967                                  peer_sid, skb->secmark,
5968                                  SECCLASS_PACKET, secmark_perm, &ad))
5969                         return NF_DROP_ERR(-ECONNREFUSED);
5970
5971         if (peerlbl_active) {
5972                 u32 if_sid;
5973                 u32 node_sid;
5974
5975                 if (sel_netif_sid(dev_net(outdev), ifindex, &if_sid))
5976                         return NF_DROP;
5977                 if (avc_has_perm(&selinux_state,
5978                                  peer_sid, if_sid,
5979                                  SECCLASS_NETIF, NETIF__EGRESS, &ad))
5980                         return NF_DROP_ERR(-ECONNREFUSED);
5981
5982                 if (sel_netnode_sid(addrp, family, &node_sid))
5983                         return NF_DROP;
5984                 if (avc_has_perm(&selinux_state,
5985                                  peer_sid, node_sid,
5986                                  SECCLASS_NODE, NODE__SENDTO, &ad))
5987                         return NF_DROP_ERR(-ECONNREFUSED);
5988         }
5989
5990         return NF_ACCEPT;
5991 }
5992
5993 static unsigned int selinux_ipv4_postroute(void *priv,
5994                                            struct sk_buff *skb,
5995                                            const struct nf_hook_state *state)
5996 {
5997         return selinux_ip_postroute(skb, state->out, PF_INET);
5998 }
5999
6000 #if IS_ENABLED(CONFIG_IPV6)
6001 static unsigned int selinux_ipv6_postroute(void *priv,
6002                                            struct sk_buff *skb,
6003                                            const struct nf_hook_state *state)
6004 {
6005         return selinux_ip_postroute(skb, state->out, PF_INET6);
6006 }
6007 #endif  /* IPV6 */
6008
6009 #endif  /* CONFIG_NETFILTER */
6010
6011 static int selinux_netlink_send(struct sock *sk, struct sk_buff *skb)
6012 {
6013         int rc = 0;
6014         unsigned int msg_len;
6015         unsigned int data_len = skb->len;
6016         unsigned char *data = skb->data;
6017         struct nlmsghdr *nlh;
6018         struct sk_security_struct *sksec = sk->sk_security;
6019         u16 sclass = sksec->sclass;
6020         u32 perm;
6021
6022         while (data_len >= nlmsg_total_size(0)) {
6023                 nlh = (struct nlmsghdr *)data;
6024
6025                 /* NOTE: the nlmsg_len field isn't reliably set by some netlink
6026                  *       users which means we can't reject skb's with bogus
6027                  *       length fields; our solution is to follow what
6028                  *       netlink_rcv_skb() does and simply skip processing at
6029                  *       messages with length fields that are clearly junk
6030                  */
6031                 if (nlh->nlmsg_len < NLMSG_HDRLEN || nlh->nlmsg_len > data_len)
6032                         return 0;
6033
6034                 rc = selinux_nlmsg_lookup(sclass, nlh->nlmsg_type, &perm);
6035                 if (rc == 0) {
6036                         rc = sock_has_perm(sk, perm);
6037                         if (rc)
6038                                 return rc;
6039                 } else if (rc == -EINVAL) {
6040                         /* -EINVAL is a missing msg/perm mapping */
6041                         pr_warn_ratelimited("SELinux: unrecognized netlink"
6042                                 " message: protocol=%hu nlmsg_type=%hu sclass=%s"
6043                                 " pid=%d comm=%s\n",
6044                                 sk->sk_protocol, nlh->nlmsg_type,
6045                                 secclass_map[sclass - 1].name,
6046                                 task_pid_nr(current), current->comm);
6047                         if (enforcing_enabled(&selinux_state) &&
6048                             !security_get_allow_unknown(&selinux_state))
6049                                 return rc;
6050                         rc = 0;
6051                 } else if (rc == -ENOENT) {
6052                         /* -ENOENT is a missing socket/class mapping, ignore */
6053                         rc = 0;
6054                 } else {
6055                         return rc;
6056                 }
6057
6058                 /* move to the next message after applying netlink padding */
6059                 msg_len = NLMSG_ALIGN(nlh->nlmsg_len);
6060                 if (msg_len >= data_len)
6061                         return 0;
6062                 data_len -= msg_len;
6063                 data += msg_len;
6064         }
6065
6066         return rc;
6067 }
6068
6069 static void ipc_init_security(struct ipc_security_struct *isec, u16 sclass)
6070 {
6071         isec->sclass = sclass;
6072         isec->sid = current_sid();
6073 }
6074
6075 static int ipc_has_perm(struct kern_ipc_perm *ipc_perms,
6076                         u32 perms)
6077 {
6078         struct ipc_security_struct *isec;
6079         struct common_audit_data ad;
6080         u32 sid = current_sid();
6081
6082         isec = selinux_ipc(ipc_perms);
6083
6084         ad.type = LSM_AUDIT_DATA_IPC;
6085         ad.u.ipc_id = ipc_perms->key;
6086
6087         return avc_has_perm(&selinux_state,
6088                             sid, isec->sid, isec->sclass, perms, &ad);
6089 }
6090
6091 static int selinux_msg_msg_alloc_security(struct msg_msg *msg)
6092 {
6093         struct msg_security_struct *msec;
6094
6095         msec = selinux_msg_msg(msg);
6096         msec->sid = SECINITSID_UNLABELED;
6097
6098         return 0;
6099 }
6100
6101 /* message queue security operations */
6102 static int selinux_msg_queue_alloc_security(struct kern_ipc_perm *msq)
6103 {
6104         struct ipc_security_struct *isec;
6105         struct common_audit_data ad;
6106         u32 sid = current_sid();
6107         int rc;
6108
6109         isec = selinux_ipc(msq);
6110         ipc_init_security(isec, SECCLASS_MSGQ);
6111
6112         ad.type = LSM_AUDIT_DATA_IPC;
6113         ad.u.ipc_id = msq->key;
6114
6115         rc = avc_has_perm(&selinux_state,
6116                           sid, isec->sid, SECCLASS_MSGQ,
6117                           MSGQ__CREATE, &ad);
6118         return rc;
6119 }
6120
6121 static int selinux_msg_queue_associate(struct kern_ipc_perm *msq, int msqflg)
6122 {
6123         struct ipc_security_struct *isec;
6124         struct common_audit_data ad;
6125         u32 sid = current_sid();
6126
6127         isec = selinux_ipc(msq);
6128
6129         ad.type = LSM_AUDIT_DATA_IPC;
6130         ad.u.ipc_id = msq->key;
6131
6132         return avc_has_perm(&selinux_state,
6133                             sid, isec->sid, SECCLASS_MSGQ,
6134                             MSGQ__ASSOCIATE, &ad);
6135 }
6136
6137 static int selinux_msg_queue_msgctl(struct kern_ipc_perm *msq, int cmd)
6138 {
6139         int err;
6140         int perms;
6141
6142         switch (cmd) {
6143         case IPC_INFO:
6144         case MSG_INFO:
6145                 /* No specific object, just general system-wide information. */
6146                 return avc_has_perm(&selinux_state,
6147                                     current_sid(), SECINITSID_KERNEL,
6148                                     SECCLASS_SYSTEM, SYSTEM__IPC_INFO, NULL);
6149         case IPC_STAT:
6150         case MSG_STAT:
6151         case MSG_STAT_ANY:
6152                 perms = MSGQ__GETATTR | MSGQ__ASSOCIATE;
6153                 break;
6154         case IPC_SET:
6155                 perms = MSGQ__SETATTR;
6156                 break;
6157         case IPC_RMID:
6158                 perms = MSGQ__DESTROY;
6159                 break;
6160         default:
6161                 return 0;
6162         }
6163
6164         err = ipc_has_perm(msq, perms);
6165         return err;
6166 }
6167
6168 static int selinux_msg_queue_msgsnd(struct kern_ipc_perm *msq, struct msg_msg *msg, int msqflg)
6169 {
6170         struct ipc_security_struct *isec;
6171         struct msg_security_struct *msec;
6172         struct common_audit_data ad;
6173         u32 sid = current_sid();
6174         int rc;
6175
6176         isec = selinux_ipc(msq);
6177         msec = selinux_msg_msg(msg);
6178
6179         /*
6180          * First time through, need to assign label to the message
6181          */
6182         if (msec->sid == SECINITSID_UNLABELED) {
6183                 /*
6184                  * Compute new sid based on current process and
6185                  * message queue this message will be stored in
6186                  */
6187                 rc = security_transition_sid(&selinux_state, sid, isec->sid,
6188                                              SECCLASS_MSG, NULL, &msec->sid);
6189                 if (rc)
6190                         return rc;
6191         }
6192
6193         ad.type = LSM_AUDIT_DATA_IPC;
6194         ad.u.ipc_id = msq->key;
6195
6196         /* Can this process write to the queue? */
6197         rc = avc_has_perm(&selinux_state,
6198                           sid, isec->sid, SECCLASS_MSGQ,
6199                           MSGQ__WRITE, &ad);
6200         if (!rc)
6201                 /* Can this process send the message */
6202                 rc = avc_has_perm(&selinux_state,
6203                                   sid, msec->sid, SECCLASS_MSG,
6204                                   MSG__SEND, &ad);
6205         if (!rc)
6206                 /* Can the message be put in the queue? */
6207                 rc = avc_has_perm(&selinux_state,
6208                                   msec->sid, isec->sid, SECCLASS_MSGQ,
6209                                   MSGQ__ENQUEUE, &ad);
6210
6211         return rc;
6212 }
6213
6214 static int selinux_msg_queue_msgrcv(struct kern_ipc_perm *msq, struct msg_msg *msg,
6215                                     struct task_struct *target,
6216                                     long type, int mode)
6217 {
6218         struct ipc_security_struct *isec;
6219         struct msg_security_struct *msec;
6220         struct common_audit_data ad;
6221         u32 sid = task_sid_subj(target);
6222         int rc;
6223
6224         isec = selinux_ipc(msq);
6225         msec = selinux_msg_msg(msg);
6226
6227         ad.type = LSM_AUDIT_DATA_IPC;
6228         ad.u.ipc_id = msq->key;
6229
6230         rc = avc_has_perm(&selinux_state,
6231                           sid, isec->sid,
6232                           SECCLASS_MSGQ, MSGQ__READ, &ad);
6233         if (!rc)
6234                 rc = avc_has_perm(&selinux_state,
6235                                   sid, msec->sid,
6236                                   SECCLASS_MSG, MSG__RECEIVE, &ad);
6237         return rc;
6238 }
6239
6240 /* Shared Memory security operations */
6241 static int selinux_shm_alloc_security(struct kern_ipc_perm *shp)
6242 {
6243         struct ipc_security_struct *isec;
6244         struct common_audit_data ad;
6245         u32 sid = current_sid();
6246         int rc;
6247
6248         isec = selinux_ipc(shp);
6249         ipc_init_security(isec, SECCLASS_SHM);
6250
6251         ad.type = LSM_AUDIT_DATA_IPC;
6252         ad.u.ipc_id = shp->key;
6253
6254         rc = avc_has_perm(&selinux_state,
6255                           sid, isec->sid, SECCLASS_SHM,
6256                           SHM__CREATE, &ad);
6257         return rc;
6258 }
6259
6260 static int selinux_shm_associate(struct kern_ipc_perm *shp, int shmflg)
6261 {
6262         struct ipc_security_struct *isec;
6263         struct common_audit_data ad;
6264         u32 sid = current_sid();
6265
6266         isec = selinux_ipc(shp);
6267
6268         ad.type = LSM_AUDIT_DATA_IPC;
6269         ad.u.ipc_id = shp->key;
6270
6271         return avc_has_perm(&selinux_state,
6272                             sid, isec->sid, SECCLASS_SHM,
6273                             SHM__ASSOCIATE, &ad);
6274 }
6275
6276 /* Note, at this point, shp is locked down */
6277 static int selinux_shm_shmctl(struct kern_ipc_perm *shp, int cmd)
6278 {
6279         int perms;
6280         int err;
6281
6282         switch (cmd) {
6283         case IPC_INFO:
6284         case SHM_INFO:
6285                 /* No specific object, just general system-wide information. */
6286                 return avc_has_perm(&selinux_state,
6287                                     current_sid(), SECINITSID_KERNEL,
6288                                     SECCLASS_SYSTEM, SYSTEM__IPC_INFO, NULL);
6289         case IPC_STAT:
6290         case SHM_STAT:
6291         case SHM_STAT_ANY:
6292                 perms = SHM__GETATTR | SHM__ASSOCIATE;
6293                 break;
6294         case IPC_SET:
6295                 perms = SHM__SETATTR;
6296                 break;
6297         case SHM_LOCK:
6298         case SHM_UNLOCK:
6299                 perms = SHM__LOCK;
6300                 break;
6301         case IPC_RMID:
6302                 perms = SHM__DESTROY;
6303                 break;
6304         default:
6305                 return 0;
6306         }
6307
6308         err = ipc_has_perm(shp, perms);
6309         return err;
6310 }
6311
6312 static int selinux_shm_shmat(struct kern_ipc_perm *shp,
6313                              char __user *shmaddr, int shmflg)
6314 {
6315         u32 perms;
6316
6317         if (shmflg & SHM_RDONLY)
6318                 perms = SHM__READ;
6319         else
6320                 perms = SHM__READ | SHM__WRITE;
6321
6322         return ipc_has_perm(shp, perms);
6323 }
6324
6325 /* Semaphore security operations */
6326 static int selinux_sem_alloc_security(struct kern_ipc_perm *sma)
6327 {
6328         struct ipc_security_struct *isec;
6329         struct common_audit_data ad;
6330         u32 sid = current_sid();
6331         int rc;
6332
6333         isec = selinux_ipc(sma);
6334         ipc_init_security(isec, SECCLASS_SEM);
6335
6336         ad.type = LSM_AUDIT_DATA_IPC;
6337         ad.u.ipc_id = sma->key;
6338
6339         rc = avc_has_perm(&selinux_state,
6340                           sid, isec->sid, SECCLASS_SEM,
6341                           SEM__CREATE, &ad);
6342         return rc;
6343 }
6344
6345 static int selinux_sem_associate(struct kern_ipc_perm *sma, int semflg)
6346 {
6347         struct ipc_security_struct *isec;
6348         struct common_audit_data ad;
6349         u32 sid = current_sid();
6350
6351         isec = selinux_ipc(sma);
6352
6353         ad.type = LSM_AUDIT_DATA_IPC;
6354         ad.u.ipc_id = sma->key;
6355
6356         return avc_has_perm(&selinux_state,
6357                             sid, isec->sid, SECCLASS_SEM,
6358                             SEM__ASSOCIATE, &ad);
6359 }
6360
6361 /* Note, at this point, sma is locked down */
6362 static int selinux_sem_semctl(struct kern_ipc_perm *sma, int cmd)
6363 {
6364         int err;
6365         u32 perms;
6366
6367         switch (cmd) {
6368         case IPC_INFO:
6369         case SEM_INFO:
6370                 /* No specific object, just general system-wide information. */
6371                 return avc_has_perm(&selinux_state,
6372                                     current_sid(), SECINITSID_KERNEL,
6373                                     SECCLASS_SYSTEM, SYSTEM__IPC_INFO, NULL);
6374         case GETPID:
6375         case GETNCNT:
6376         case GETZCNT:
6377                 perms = SEM__GETATTR;
6378                 break;
6379         case GETVAL:
6380         case GETALL:
6381                 perms = SEM__READ;
6382                 break;
6383         case SETVAL:
6384         case SETALL:
6385                 perms = SEM__WRITE;
6386                 break;
6387         case IPC_RMID:
6388                 perms = SEM__DESTROY;
6389                 break;
6390         case IPC_SET:
6391                 perms = SEM__SETATTR;
6392                 break;
6393         case IPC_STAT:
6394         case SEM_STAT:
6395         case SEM_STAT_ANY:
6396                 perms = SEM__GETATTR | SEM__ASSOCIATE;
6397                 break;
6398         default:
6399                 return 0;
6400         }
6401
6402         err = ipc_has_perm(sma, perms);
6403         return err;
6404 }
6405
6406 static int selinux_sem_semop(struct kern_ipc_perm *sma,
6407                              struct sembuf *sops, unsigned nsops, int alter)
6408 {
6409         u32 perms;
6410
6411         if (alter)
6412                 perms = SEM__READ | SEM__WRITE;
6413         else
6414                 perms = SEM__READ;
6415
6416         return ipc_has_perm(sma, perms);
6417 }
6418
6419 static int selinux_ipc_permission(struct kern_ipc_perm *ipcp, short flag)
6420 {
6421         u32 av = 0;
6422
6423         av = 0;
6424         if (flag & S_IRUGO)
6425                 av |= IPC__UNIX_READ;
6426         if (flag & S_IWUGO)
6427                 av |= IPC__UNIX_WRITE;
6428
6429         if (av == 0)
6430                 return 0;
6431
6432         return ipc_has_perm(ipcp, av);
6433 }
6434
6435 static void selinux_ipc_getsecid(struct kern_ipc_perm *ipcp, u32 *secid)
6436 {
6437         struct ipc_security_struct *isec = selinux_ipc(ipcp);
6438         *secid = isec->sid;
6439 }
6440
6441 static void selinux_d_instantiate(struct dentry *dentry, struct inode *inode)
6442 {
6443         if (inode)
6444                 inode_doinit_with_dentry(inode, dentry);
6445 }
6446
6447 static int selinux_getprocattr(struct task_struct *p,
6448                                char *name, char **value)
6449 {
6450         const struct task_security_struct *__tsec;
6451         u32 sid;
6452         int error;
6453         unsigned len;
6454
6455         rcu_read_lock();
6456         __tsec = selinux_cred(__task_cred(p));
6457
6458         if (current != p) {
6459                 error = avc_has_perm(&selinux_state,
6460                                      current_sid(), __tsec->sid,
6461                                      SECCLASS_PROCESS, PROCESS__GETATTR, NULL);
6462                 if (error)
6463                         goto bad;
6464         }
6465
6466         if (!strcmp(name, "current"))
6467                 sid = __tsec->sid;
6468         else if (!strcmp(name, "prev"))
6469                 sid = __tsec->osid;
6470         else if (!strcmp(name, "exec"))
6471                 sid = __tsec->exec_sid;
6472         else if (!strcmp(name, "fscreate"))
6473                 sid = __tsec->create_sid;
6474         else if (!strcmp(name, "keycreate"))
6475                 sid = __tsec->keycreate_sid;
6476         else if (!strcmp(name, "sockcreate"))
6477                 sid = __tsec->sockcreate_sid;
6478         else {
6479                 error = -EINVAL;
6480                 goto bad;
6481         }
6482         rcu_read_unlock();
6483
6484         if (!sid)
6485                 return 0;
6486
6487         error = security_sid_to_context(&selinux_state, sid, value, &len);
6488         if (error)
6489                 return error;
6490         return len;
6491
6492 bad:
6493         rcu_read_unlock();
6494         return error;
6495 }
6496
6497 static int selinux_setprocattr(const char *name, void *value, size_t size)
6498 {
6499         struct task_security_struct *tsec;
6500         struct cred *new;
6501         u32 mysid = current_sid(), sid = 0, ptsid;
6502         int error;
6503         char *str = value;
6504
6505         /*
6506          * Basic control over ability to set these attributes at all.
6507          */
6508         if (!strcmp(name, "exec"))
6509                 error = avc_has_perm(&selinux_state,
6510                                      mysid, mysid, SECCLASS_PROCESS,
6511                                      PROCESS__SETEXEC, NULL);
6512         else if (!strcmp(name, "fscreate"))
6513                 error = avc_has_perm(&selinux_state,
6514                                      mysid, mysid, SECCLASS_PROCESS,
6515                                      PROCESS__SETFSCREATE, NULL);
6516         else if (!strcmp(name, "keycreate"))
6517                 error = avc_has_perm(&selinux_state,
6518                                      mysid, mysid, SECCLASS_PROCESS,
6519                                      PROCESS__SETKEYCREATE, NULL);
6520         else if (!strcmp(name, "sockcreate"))
6521                 error = avc_has_perm(&selinux_state,
6522                                      mysid, mysid, SECCLASS_PROCESS,
6523                                      PROCESS__SETSOCKCREATE, NULL);
6524         else if (!strcmp(name, "current"))
6525                 error = avc_has_perm(&selinux_state,
6526                                      mysid, mysid, SECCLASS_PROCESS,
6527                                      PROCESS__SETCURRENT, NULL);
6528         else
6529                 error = -EINVAL;
6530         if (error)
6531                 return error;
6532
6533         /* Obtain a SID for the context, if one was specified. */
6534         if (size && str[0] && str[0] != '\n') {
6535                 if (str[size-1] == '\n') {
6536                         str[size-1] = 0;
6537                         size--;
6538                 }
6539                 error = security_context_to_sid(&selinux_state, value, size,
6540                                                 &sid, GFP_KERNEL);
6541                 if (error == -EINVAL && !strcmp(name, "fscreate")) {
6542                         if (!has_cap_mac_admin(true)) {
6543                                 struct audit_buffer *ab;
6544                                 size_t audit_size;
6545
6546                                 /* We strip a nul only if it is at the end, otherwise the
6547                                  * context contains a nul and we should audit that */
6548                                 if (str[size - 1] == '\0')
6549                                         audit_size = size - 1;
6550                                 else
6551                                         audit_size = size;
6552                                 ab = audit_log_start(audit_context(),
6553                                                      GFP_ATOMIC,
6554                                                      AUDIT_SELINUX_ERR);
6555                                 audit_log_format(ab, "op=fscreate invalid_context=");
6556                                 audit_log_n_untrustedstring(ab, value, audit_size);
6557                                 audit_log_end(ab);
6558
6559                                 return error;
6560                         }
6561                         error = security_context_to_sid_force(
6562                                                       &selinux_state,
6563                                                       value, size, &sid);
6564                 }
6565                 if (error)
6566                         return error;
6567         }
6568
6569         new = prepare_creds();
6570         if (!new)
6571                 return -ENOMEM;
6572
6573         /* Permission checking based on the specified context is
6574            performed during the actual operation (execve,
6575            open/mkdir/...), when we know the full context of the
6576            operation.  See selinux_bprm_creds_for_exec for the execve
6577            checks and may_create for the file creation checks. The
6578            operation will then fail if the context is not permitted. */
6579         tsec = selinux_cred(new);
6580         if (!strcmp(name, "exec")) {
6581                 tsec->exec_sid = sid;
6582         } else if (!strcmp(name, "fscreate")) {
6583                 tsec->create_sid = sid;
6584         } else if (!strcmp(name, "keycreate")) {
6585                 if (sid) {
6586                         error = avc_has_perm(&selinux_state, mysid, sid,
6587                                              SECCLASS_KEY, KEY__CREATE, NULL);
6588                         if (error)
6589                                 goto abort_change;
6590                 }
6591                 tsec->keycreate_sid = sid;
6592         } else if (!strcmp(name, "sockcreate")) {
6593                 tsec->sockcreate_sid = sid;
6594         } else if (!strcmp(name, "current")) {
6595                 error = -EINVAL;
6596                 if (sid == 0)
6597                         goto abort_change;
6598
6599                 /* Only allow single threaded processes to change context */
6600                 error = -EPERM;
6601                 if (!current_is_single_threaded()) {
6602                         error = security_bounded_transition(&selinux_state,
6603                                                             tsec->sid, sid);
6604                         if (error)
6605                                 goto abort_change;
6606                 }
6607
6608                 /* Check permissions for the transition. */
6609                 error = avc_has_perm(&selinux_state,
6610                                      tsec->sid, sid, SECCLASS_PROCESS,
6611                                      PROCESS__DYNTRANSITION, NULL);
6612                 if (error)
6613                         goto abort_change;
6614
6615                 /* Check for ptracing, and update the task SID if ok.
6616                    Otherwise, leave SID unchanged and fail. */
6617                 ptsid = ptrace_parent_sid();
6618                 if (ptsid != 0) {
6619                         error = avc_has_perm(&selinux_state,
6620                                              ptsid, sid, SECCLASS_PROCESS,
6621                                              PROCESS__PTRACE, NULL);
6622                         if (error)
6623                                 goto abort_change;
6624                 }
6625
6626                 tsec->sid = sid;
6627         } else {
6628                 error = -EINVAL;
6629                 goto abort_change;
6630         }
6631
6632         commit_creds(new);
6633         return size;
6634
6635 abort_change:
6636         abort_creds(new);
6637         return error;
6638 }
6639
6640 static int selinux_ismaclabel(const char *name)
6641 {
6642         return (strcmp(name, XATTR_SELINUX_SUFFIX) == 0);
6643 }
6644
6645 static int selinux_secid_to_secctx(u32 secid, char **secdata, u32 *seclen)
6646 {
6647         return security_sid_to_context(&selinux_state, secid,
6648                                        secdata, seclen);
6649 }
6650
6651 static int selinux_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid)
6652 {
6653         return security_context_to_sid(&selinux_state, secdata, seclen,
6654                                        secid, GFP_KERNEL);
6655 }
6656
6657 static void selinux_release_secctx(char *secdata, u32 seclen)
6658 {
6659         kfree(secdata);
6660 }
6661
6662 static void selinux_inode_invalidate_secctx(struct inode *inode)
6663 {
6664         struct inode_security_struct *isec = selinux_inode(inode);
6665
6666         spin_lock(&isec->lock);
6667         isec->initialized = LABEL_INVALID;
6668         spin_unlock(&isec->lock);
6669 }
6670
6671 /*
6672  *      called with inode->i_mutex locked
6673  */
6674 static int selinux_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen)
6675 {
6676         int rc = selinux_inode_setsecurity(inode, XATTR_SELINUX_SUFFIX,
6677                                            ctx, ctxlen, 0);
6678         /* Do not return error when suppressing label (SBLABEL_MNT not set). */
6679         return rc == -EOPNOTSUPP ? 0 : rc;
6680 }
6681
6682 /*
6683  *      called with inode->i_mutex locked
6684  */
6685 static int selinux_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen)
6686 {
6687         return __vfs_setxattr_noperm(&init_user_ns, dentry, XATTR_NAME_SELINUX,
6688                                      ctx, ctxlen, 0);
6689 }
6690
6691 static int selinux_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen)
6692 {
6693         int len = 0;
6694         len = selinux_inode_getsecurity(&init_user_ns, inode,
6695                                         XATTR_SELINUX_SUFFIX, ctx, true);
6696         if (len < 0)
6697                 return len;
6698         *ctxlen = len;
6699         return 0;
6700 }
6701 #ifdef CONFIG_KEYS
6702
6703 static int selinux_key_alloc(struct key *k, const struct cred *cred,
6704                              unsigned long flags)
6705 {
6706         const struct task_security_struct *tsec;
6707         struct key_security_struct *ksec;
6708
6709         ksec = kzalloc(sizeof(struct key_security_struct), GFP_KERNEL);
6710         if (!ksec)
6711                 return -ENOMEM;
6712
6713         tsec = selinux_cred(cred);
6714         if (tsec->keycreate_sid)
6715                 ksec->sid = tsec->keycreate_sid;
6716         else
6717                 ksec->sid = tsec->sid;
6718
6719         k->security = ksec;
6720         return 0;
6721 }
6722
6723 static void selinux_key_free(struct key *k)
6724 {
6725         struct key_security_struct *ksec = k->security;
6726
6727         k->security = NULL;
6728         kfree(ksec);
6729 }
6730
6731 static int selinux_key_permission(key_ref_t key_ref,
6732                                   const struct cred *cred,
6733                                   enum key_need_perm need_perm)
6734 {
6735         struct key *key;
6736         struct key_security_struct *ksec;
6737         u32 perm, sid;
6738
6739         switch (need_perm) {
6740         case KEY_NEED_VIEW:
6741                 perm = KEY__VIEW;
6742                 break;
6743         case KEY_NEED_READ:
6744                 perm = KEY__READ;
6745                 break;
6746         case KEY_NEED_WRITE:
6747                 perm = KEY__WRITE;
6748                 break;
6749         case KEY_NEED_SEARCH:
6750                 perm = KEY__SEARCH;
6751                 break;
6752         case KEY_NEED_LINK:
6753                 perm = KEY__LINK;
6754                 break;
6755         case KEY_NEED_SETATTR:
6756                 perm = KEY__SETATTR;
6757                 break;
6758         case KEY_NEED_UNLINK:
6759         case KEY_SYSADMIN_OVERRIDE:
6760         case KEY_AUTHTOKEN_OVERRIDE:
6761         case KEY_DEFER_PERM_CHECK:
6762                 return 0;
6763         default:
6764                 WARN_ON(1);
6765                 return -EPERM;
6766
6767         }
6768
6769         sid = cred_sid(cred);
6770         key = key_ref_to_ptr(key_ref);
6771         ksec = key->security;
6772
6773         return avc_has_perm(&selinux_state,
6774                             sid, ksec->sid, SECCLASS_KEY, perm, NULL);
6775 }
6776
6777 static int selinux_key_getsecurity(struct key *key, char **_buffer)
6778 {
6779         struct key_security_struct *ksec = key->security;
6780         char *context = NULL;
6781         unsigned len;
6782         int rc;
6783
6784         rc = security_sid_to_context(&selinux_state, ksec->sid,
6785                                      &context, &len);
6786         if (!rc)
6787                 rc = len;
6788         *_buffer = context;
6789         return rc;
6790 }
6791
6792 #ifdef CONFIG_KEY_NOTIFICATIONS
6793 static int selinux_watch_key(struct key *key)
6794 {
6795         struct key_security_struct *ksec = key->security;
6796         u32 sid = current_sid();
6797
6798         return avc_has_perm(&selinux_state,
6799                             sid, ksec->sid, SECCLASS_KEY, KEY__VIEW, NULL);
6800 }
6801 #endif
6802 #endif
6803
6804 #ifdef CONFIG_SECURITY_INFINIBAND
6805 static int selinux_ib_pkey_access(void *ib_sec, u64 subnet_prefix, u16 pkey_val)
6806 {
6807         struct common_audit_data ad;
6808         int err;
6809         u32 sid = 0;
6810         struct ib_security_struct *sec = ib_sec;
6811         struct lsm_ibpkey_audit ibpkey;
6812
6813         err = sel_ib_pkey_sid(subnet_prefix, pkey_val, &sid);
6814         if (err)
6815                 return err;
6816
6817         ad.type = LSM_AUDIT_DATA_IBPKEY;
6818         ibpkey.subnet_prefix = subnet_prefix;
6819         ibpkey.pkey = pkey_val;
6820         ad.u.ibpkey = &ibpkey;
6821         return avc_has_perm(&selinux_state,
6822                             sec->sid, sid,
6823                             SECCLASS_INFINIBAND_PKEY,
6824                             INFINIBAND_PKEY__ACCESS, &ad);
6825 }
6826
6827 static int selinux_ib_endport_manage_subnet(void *ib_sec, const char *dev_name,
6828                                             u8 port_num)
6829 {
6830         struct common_audit_data ad;
6831         int err;
6832         u32 sid = 0;
6833         struct ib_security_struct *sec = ib_sec;
6834         struct lsm_ibendport_audit ibendport;
6835
6836         err = security_ib_endport_sid(&selinux_state, dev_name, port_num,
6837                                       &sid);
6838
6839         if (err)
6840                 return err;
6841
6842         ad.type = LSM_AUDIT_DATA_IBENDPORT;
6843         ibendport.dev_name = dev_name;
6844         ibendport.port = port_num;
6845         ad.u.ibendport = &ibendport;
6846         return avc_has_perm(&selinux_state,
6847                             sec->sid, sid,
6848                             SECCLASS_INFINIBAND_ENDPORT,
6849                             INFINIBAND_ENDPORT__MANAGE_SUBNET, &ad);
6850 }
6851
6852 static int selinux_ib_alloc_security(void **ib_sec)
6853 {
6854         struct ib_security_struct *sec;
6855
6856         sec = kzalloc(sizeof(*sec), GFP_KERNEL);
6857         if (!sec)
6858                 return -ENOMEM;
6859         sec->sid = current_sid();
6860
6861         *ib_sec = sec;
6862         return 0;
6863 }
6864
6865 static void selinux_ib_free_security(void *ib_sec)
6866 {
6867         kfree(ib_sec);
6868 }
6869 #endif
6870
6871 #ifdef CONFIG_BPF_SYSCALL
6872 static int selinux_bpf(int cmd, union bpf_attr *attr,
6873                                      unsigned int size)
6874 {
6875         u32 sid = current_sid();
6876         int ret;
6877
6878         switch (cmd) {
6879         case BPF_MAP_CREATE:
6880                 ret = avc_has_perm(&selinux_state,
6881                                    sid, sid, SECCLASS_BPF, BPF__MAP_CREATE,
6882                                    NULL);
6883                 break;
6884         case BPF_PROG_LOAD:
6885                 ret = avc_has_perm(&selinux_state,
6886                                    sid, sid, SECCLASS_BPF, BPF__PROG_LOAD,
6887                                    NULL);
6888                 break;
6889         default:
6890                 ret = 0;
6891                 break;
6892         }
6893
6894         return ret;
6895 }
6896
6897 static u32 bpf_map_fmode_to_av(fmode_t fmode)
6898 {
6899         u32 av = 0;
6900
6901         if (fmode & FMODE_READ)
6902                 av |= BPF__MAP_READ;
6903         if (fmode & FMODE_WRITE)
6904                 av |= BPF__MAP_WRITE;
6905         return av;
6906 }
6907
6908 /* This function will check the file pass through unix socket or binder to see
6909  * if it is a bpf related object. And apply correspinding checks on the bpf
6910  * object based on the type. The bpf maps and programs, not like other files and
6911  * socket, are using a shared anonymous inode inside the kernel as their inode.
6912  * So checking that inode cannot identify if the process have privilege to
6913  * access the bpf object and that's why we have to add this additional check in
6914  * selinux_file_receive and selinux_binder_transfer_files.
6915  */
6916 static int bpf_fd_pass(struct file *file, u32 sid)
6917 {
6918         struct bpf_security_struct *bpfsec;
6919         struct bpf_prog *prog;
6920         struct bpf_map *map;
6921         int ret;
6922
6923         if (file->f_op == &bpf_map_fops) {
6924                 map = file->private_data;
6925                 bpfsec = map->security;
6926                 ret = avc_has_perm(&selinux_state,
6927                                    sid, bpfsec->sid, SECCLASS_BPF,
6928                                    bpf_map_fmode_to_av(file->f_mode), NULL);
6929                 if (ret)
6930                         return ret;
6931         } else if (file->f_op == &bpf_prog_fops) {
6932                 prog = file->private_data;
6933                 bpfsec = prog->aux->security;
6934                 ret = avc_has_perm(&selinux_state,
6935                                    sid, bpfsec->sid, SECCLASS_BPF,
6936                                    BPF__PROG_RUN, NULL);
6937                 if (ret)
6938                         return ret;
6939         }
6940         return 0;
6941 }
6942
6943 static int selinux_bpf_map(struct bpf_map *map, fmode_t fmode)
6944 {
6945         u32 sid = current_sid();
6946         struct bpf_security_struct *bpfsec;
6947
6948         bpfsec = map->security;
6949         return avc_has_perm(&selinux_state,
6950                             sid, bpfsec->sid, SECCLASS_BPF,
6951                             bpf_map_fmode_to_av(fmode), NULL);
6952 }
6953
6954 static int selinux_bpf_prog(struct bpf_prog *prog)
6955 {
6956         u32 sid = current_sid();
6957         struct bpf_security_struct *bpfsec;
6958
6959         bpfsec = prog->aux->security;
6960         return avc_has_perm(&selinux_state,
6961                             sid, bpfsec->sid, SECCLASS_BPF,
6962                             BPF__PROG_RUN, NULL);
6963 }
6964
6965 static int selinux_bpf_map_alloc(struct bpf_map *map)
6966 {
6967         struct bpf_security_struct *bpfsec;
6968
6969         bpfsec = kzalloc(sizeof(*bpfsec), GFP_KERNEL);
6970         if (!bpfsec)
6971                 return -ENOMEM;
6972
6973         bpfsec->sid = current_sid();
6974         map->security = bpfsec;
6975
6976         return 0;
6977 }
6978
6979 static void selinux_bpf_map_free(struct bpf_map *map)
6980 {
6981         struct bpf_security_struct *bpfsec = map->security;
6982
6983         map->security = NULL;
6984         kfree(bpfsec);
6985 }
6986
6987 static int selinux_bpf_prog_alloc(struct bpf_prog_aux *aux)
6988 {
6989         struct bpf_security_struct *bpfsec;
6990
6991         bpfsec = kzalloc(sizeof(*bpfsec), GFP_KERNEL);
6992         if (!bpfsec)
6993                 return -ENOMEM;
6994
6995         bpfsec->sid = current_sid();
6996         aux->security = bpfsec;
6997
6998         return 0;
6999 }
7000
7001 static void selinux_bpf_prog_free(struct bpf_prog_aux *aux)
7002 {
7003         struct bpf_security_struct *bpfsec = aux->security;
7004
7005         aux->security = NULL;
7006         kfree(bpfsec);
7007 }
7008 #endif
7009
7010 static int selinux_lockdown(enum lockdown_reason what)
7011 {
7012         struct common_audit_data ad;
7013         u32 sid = current_sid();
7014         int invalid_reason = (what <= LOCKDOWN_NONE) ||
7015                              (what == LOCKDOWN_INTEGRITY_MAX) ||
7016                              (what >= LOCKDOWN_CONFIDENTIALITY_MAX);
7017
7018         if (WARN(invalid_reason, "Invalid lockdown reason")) {
7019                 audit_log(audit_context(),
7020                           GFP_ATOMIC, AUDIT_SELINUX_ERR,
7021                           "lockdown_reason=invalid");
7022                 return -EINVAL;
7023         }
7024
7025         ad.type = LSM_AUDIT_DATA_LOCKDOWN;
7026         ad.u.reason = what;
7027
7028         if (what <= LOCKDOWN_INTEGRITY_MAX)
7029                 return avc_has_perm(&selinux_state,
7030                                     sid, sid, SECCLASS_LOCKDOWN,
7031                                     LOCKDOWN__INTEGRITY, &ad);
7032         else
7033                 return avc_has_perm(&selinux_state,
7034                                     sid, sid, SECCLASS_LOCKDOWN,
7035                                     LOCKDOWN__CONFIDENTIALITY, &ad);
7036 }
7037
7038 struct lsm_blob_sizes selinux_blob_sizes __lsm_ro_after_init = {
7039         .lbs_cred = sizeof(struct task_security_struct),
7040         .lbs_file = sizeof(struct file_security_struct),
7041         .lbs_inode = sizeof(struct inode_security_struct),
7042         .lbs_ipc = sizeof(struct ipc_security_struct),
7043         .lbs_msg_msg = sizeof(struct msg_security_struct),
7044         .lbs_superblock = sizeof(struct superblock_security_struct),
7045 };
7046
7047 #ifdef CONFIG_PERF_EVENTS
7048 static int selinux_perf_event_open(struct perf_event_attr *attr, int type)
7049 {
7050         u32 requested, sid = current_sid();
7051
7052         if (type == PERF_SECURITY_OPEN)
7053                 requested = PERF_EVENT__OPEN;
7054         else if (type == PERF_SECURITY_CPU)
7055                 requested = PERF_EVENT__CPU;
7056         else if (type == PERF_SECURITY_KERNEL)
7057                 requested = PERF_EVENT__KERNEL;
7058         else if (type == PERF_SECURITY_TRACEPOINT)
7059                 requested = PERF_EVENT__TRACEPOINT;
7060         else
7061                 return -EINVAL;
7062
7063         return avc_has_perm(&selinux_state, sid, sid, SECCLASS_PERF_EVENT,
7064                             requested, NULL);
7065 }
7066
7067 static int selinux_perf_event_alloc(struct perf_event *event)
7068 {
7069         struct perf_event_security_struct *perfsec;
7070
7071         perfsec = kzalloc(sizeof(*perfsec), GFP_KERNEL);
7072         if (!perfsec)
7073                 return -ENOMEM;
7074
7075         perfsec->sid = current_sid();
7076         event->security = perfsec;
7077
7078         return 0;
7079 }
7080
7081 static void selinux_perf_event_free(struct perf_event *event)
7082 {
7083         struct perf_event_security_struct *perfsec = event->security;
7084
7085         event->security = NULL;
7086         kfree(perfsec);
7087 }
7088
7089 static int selinux_perf_event_read(struct perf_event *event)
7090 {
7091         struct perf_event_security_struct *perfsec = event->security;
7092         u32 sid = current_sid();
7093
7094         return avc_has_perm(&selinux_state, sid, perfsec->sid,
7095                             SECCLASS_PERF_EVENT, PERF_EVENT__READ, NULL);
7096 }
7097
7098 static int selinux_perf_event_write(struct perf_event *event)
7099 {
7100         struct perf_event_security_struct *perfsec = event->security;
7101         u32 sid = current_sid();
7102
7103         return avc_has_perm(&selinux_state, sid, perfsec->sid,
7104                             SECCLASS_PERF_EVENT, PERF_EVENT__WRITE, NULL);
7105 }
7106 #endif
7107
7108 /*
7109  * IMPORTANT NOTE: When adding new hooks, please be careful to keep this order:
7110  * 1. any hooks that don't belong to (2.) or (3.) below,
7111  * 2. hooks that both access structures allocated by other hooks, and allocate
7112  *    structures that can be later accessed by other hooks (mostly "cloning"
7113  *    hooks),
7114  * 3. hooks that only allocate structures that can be later accessed by other
7115  *    hooks ("allocating" hooks).
7116  *
7117  * Please follow block comment delimiters in the list to keep this order.
7118  *
7119  * This ordering is needed for SELinux runtime disable to work at least somewhat
7120  * safely. Breaking the ordering rules above might lead to NULL pointer derefs
7121  * when disabling SELinux at runtime.
7122  */
7123 static struct security_hook_list selinux_hooks[] __lsm_ro_after_init = {
7124         LSM_HOOK_INIT(binder_set_context_mgr, selinux_binder_set_context_mgr),
7125         LSM_HOOK_INIT(binder_transaction, selinux_binder_transaction),
7126         LSM_HOOK_INIT(binder_transfer_binder, selinux_binder_transfer_binder),
7127         LSM_HOOK_INIT(binder_transfer_file, selinux_binder_transfer_file),
7128
7129         LSM_HOOK_INIT(ptrace_access_check, selinux_ptrace_access_check),
7130         LSM_HOOK_INIT(ptrace_traceme, selinux_ptrace_traceme),
7131         LSM_HOOK_INIT(capget, selinux_capget),
7132         LSM_HOOK_INIT(capset, selinux_capset),
7133         LSM_HOOK_INIT(capable, selinux_capable),
7134         LSM_HOOK_INIT(quotactl, selinux_quotactl),
7135         LSM_HOOK_INIT(quota_on, selinux_quota_on),
7136         LSM_HOOK_INIT(syslog, selinux_syslog),
7137         LSM_HOOK_INIT(vm_enough_memory, selinux_vm_enough_memory),
7138
7139         LSM_HOOK_INIT(netlink_send, selinux_netlink_send),
7140
7141         LSM_HOOK_INIT(bprm_creds_for_exec, selinux_bprm_creds_for_exec),
7142         LSM_HOOK_INIT(bprm_committing_creds, selinux_bprm_committing_creds),
7143         LSM_HOOK_INIT(bprm_committed_creds, selinux_bprm_committed_creds),
7144
7145         LSM_HOOK_INIT(sb_free_mnt_opts, selinux_free_mnt_opts),
7146         LSM_HOOK_INIT(sb_mnt_opts_compat, selinux_sb_mnt_opts_compat),
7147         LSM_HOOK_INIT(sb_remount, selinux_sb_remount),
7148         LSM_HOOK_INIT(sb_kern_mount, selinux_sb_kern_mount),
7149         LSM_HOOK_INIT(sb_show_options, selinux_sb_show_options),
7150         LSM_HOOK_INIT(sb_statfs, selinux_sb_statfs),
7151         LSM_HOOK_INIT(sb_mount, selinux_mount),
7152         LSM_HOOK_INIT(sb_umount, selinux_umount),
7153         LSM_HOOK_INIT(sb_set_mnt_opts, selinux_set_mnt_opts),
7154         LSM_HOOK_INIT(sb_clone_mnt_opts, selinux_sb_clone_mnt_opts),
7155
7156         LSM_HOOK_INIT(move_mount, selinux_move_mount),
7157
7158         LSM_HOOK_INIT(dentry_init_security, selinux_dentry_init_security),
7159         LSM_HOOK_INIT(dentry_create_files_as, selinux_dentry_create_files_as),
7160
7161         LSM_HOOK_INIT(inode_free_security, selinux_inode_free_security),
7162         LSM_HOOK_INIT(inode_init_security, selinux_inode_init_security),
7163         LSM_HOOK_INIT(inode_init_security_anon, selinux_inode_init_security_anon),
7164         LSM_HOOK_INIT(inode_create, selinux_inode_create),
7165         LSM_HOOK_INIT(inode_link, selinux_inode_link),
7166         LSM_HOOK_INIT(inode_unlink, selinux_inode_unlink),
7167         LSM_HOOK_INIT(inode_symlink, selinux_inode_symlink),
7168         LSM_HOOK_INIT(inode_mkdir, selinux_inode_mkdir),
7169         LSM_HOOK_INIT(inode_rmdir, selinux_inode_rmdir),
7170         LSM_HOOK_INIT(inode_mknod, selinux_inode_mknod),
7171         LSM_HOOK_INIT(inode_rename, selinux_inode_rename),
7172         LSM_HOOK_INIT(inode_readlink, selinux_inode_readlink),
7173         LSM_HOOK_INIT(inode_follow_link, selinux_inode_follow_link),
7174         LSM_HOOK_INIT(inode_permission, selinux_inode_permission),
7175         LSM_HOOK_INIT(inode_setattr, selinux_inode_setattr),
7176         LSM_HOOK_INIT(inode_getattr, selinux_inode_getattr),
7177         LSM_HOOK_INIT(inode_setxattr, selinux_inode_setxattr),
7178         LSM_HOOK_INIT(inode_post_setxattr, selinux_inode_post_setxattr),
7179         LSM_HOOK_INIT(inode_getxattr, selinux_inode_getxattr),
7180         LSM_HOOK_INIT(inode_listxattr, selinux_inode_listxattr),
7181         LSM_HOOK_INIT(inode_removexattr, selinux_inode_removexattr),
7182         LSM_HOOK_INIT(inode_getsecurity, selinux_inode_getsecurity),
7183         LSM_HOOK_INIT(inode_setsecurity, selinux_inode_setsecurity),
7184         LSM_HOOK_INIT(inode_listsecurity, selinux_inode_listsecurity),
7185         LSM_HOOK_INIT(inode_getsecid, selinux_inode_getsecid),
7186         LSM_HOOK_INIT(inode_copy_up, selinux_inode_copy_up),
7187         LSM_HOOK_INIT(inode_copy_up_xattr, selinux_inode_copy_up_xattr),
7188         LSM_HOOK_INIT(path_notify, selinux_path_notify),
7189
7190         LSM_HOOK_INIT(kernfs_init_security, selinux_kernfs_init_security),
7191
7192         LSM_HOOK_INIT(file_permission, selinux_file_permission),
7193         LSM_HOOK_INIT(file_alloc_security, selinux_file_alloc_security),
7194         LSM_HOOK_INIT(file_ioctl, selinux_file_ioctl),
7195         LSM_HOOK_INIT(mmap_file, selinux_mmap_file),
7196         LSM_HOOK_INIT(mmap_addr, selinux_mmap_addr),
7197         LSM_HOOK_INIT(file_mprotect, selinux_file_mprotect),
7198         LSM_HOOK_INIT(file_lock, selinux_file_lock),
7199         LSM_HOOK_INIT(file_fcntl, selinux_file_fcntl),
7200         LSM_HOOK_INIT(file_set_fowner, selinux_file_set_fowner),
7201         LSM_HOOK_INIT(file_send_sigiotask, selinux_file_send_sigiotask),
7202         LSM_HOOK_INIT(file_receive, selinux_file_receive),
7203
7204         LSM_HOOK_INIT(file_open, selinux_file_open),
7205
7206         LSM_HOOK_INIT(task_alloc, selinux_task_alloc),
7207         LSM_HOOK_INIT(cred_prepare, selinux_cred_prepare),
7208         LSM_HOOK_INIT(cred_transfer, selinux_cred_transfer),
7209         LSM_HOOK_INIT(cred_getsecid, selinux_cred_getsecid),
7210         LSM_HOOK_INIT(kernel_act_as, selinux_kernel_act_as),
7211         LSM_HOOK_INIT(kernel_create_files_as, selinux_kernel_create_files_as),
7212         LSM_HOOK_INIT(kernel_module_request, selinux_kernel_module_request),
7213         LSM_HOOK_INIT(kernel_load_data, selinux_kernel_load_data),
7214         LSM_HOOK_INIT(kernel_read_file, selinux_kernel_read_file),
7215         LSM_HOOK_INIT(task_setpgid, selinux_task_setpgid),
7216         LSM_HOOK_INIT(task_getpgid, selinux_task_getpgid),
7217         LSM_HOOK_INIT(task_getsid, selinux_task_getsid),
7218         LSM_HOOK_INIT(task_getsecid_subj, selinux_task_getsecid_subj),
7219         LSM_HOOK_INIT(task_getsecid_obj, selinux_task_getsecid_obj),
7220         LSM_HOOK_INIT(task_setnice, selinux_task_setnice),
7221         LSM_HOOK_INIT(task_setioprio, selinux_task_setioprio),
7222         LSM_HOOK_INIT(task_getioprio, selinux_task_getioprio),
7223         LSM_HOOK_INIT(task_prlimit, selinux_task_prlimit),
7224         LSM_HOOK_INIT(task_setrlimit, selinux_task_setrlimit),
7225         LSM_HOOK_INIT(task_setscheduler, selinux_task_setscheduler),
7226         LSM_HOOK_INIT(task_getscheduler, selinux_task_getscheduler),
7227         LSM_HOOK_INIT(task_movememory, selinux_task_movememory),
7228         LSM_HOOK_INIT(task_kill, selinux_task_kill),
7229         LSM_HOOK_INIT(task_to_inode, selinux_task_to_inode),
7230
7231         LSM_HOOK_INIT(ipc_permission, selinux_ipc_permission),
7232         LSM_HOOK_INIT(ipc_getsecid, selinux_ipc_getsecid),
7233
7234         LSM_HOOK_INIT(msg_queue_associate, selinux_msg_queue_associate),
7235         LSM_HOOK_INIT(msg_queue_msgctl, selinux_msg_queue_msgctl),
7236         LSM_HOOK_INIT(msg_queue_msgsnd, selinux_msg_queue_msgsnd),
7237         LSM_HOOK_INIT(msg_queue_msgrcv, selinux_msg_queue_msgrcv),
7238
7239         LSM_HOOK_INIT(shm_associate, selinux_shm_associate),
7240         LSM_HOOK_INIT(shm_shmctl, selinux_shm_shmctl),
7241         LSM_HOOK_INIT(shm_shmat, selinux_shm_shmat),
7242
7243         LSM_HOOK_INIT(sem_associate, selinux_sem_associate),
7244         LSM_HOOK_INIT(sem_semctl, selinux_sem_semctl),
7245         LSM_HOOK_INIT(sem_semop, selinux_sem_semop),
7246
7247         LSM_HOOK_INIT(d_instantiate, selinux_d_instantiate),
7248
7249         LSM_HOOK_INIT(getprocattr, selinux_getprocattr),
7250         LSM_HOOK_INIT(setprocattr, selinux_setprocattr),
7251
7252         LSM_HOOK_INIT(ismaclabel, selinux_ismaclabel),
7253         LSM_HOOK_INIT(secctx_to_secid, selinux_secctx_to_secid),
7254         LSM_HOOK_INIT(release_secctx, selinux_release_secctx),
7255         LSM_HOOK_INIT(inode_invalidate_secctx, selinux_inode_invalidate_secctx),
7256         LSM_HOOK_INIT(inode_notifysecctx, selinux_inode_notifysecctx),
7257         LSM_HOOK_INIT(inode_setsecctx, selinux_inode_setsecctx),
7258
7259         LSM_HOOK_INIT(unix_stream_connect, selinux_socket_unix_stream_connect),
7260         LSM_HOOK_INIT(unix_may_send, selinux_socket_unix_may_send),
7261
7262         LSM_HOOK_INIT(socket_create, selinux_socket_create),
7263         LSM_HOOK_INIT(socket_post_create, selinux_socket_post_create),
7264         LSM_HOOK_INIT(socket_socketpair, selinux_socket_socketpair),
7265         LSM_HOOK_INIT(socket_bind, selinux_socket_bind),
7266         LSM_HOOK_INIT(socket_connect, selinux_socket_connect),
7267         LSM_HOOK_INIT(socket_listen, selinux_socket_listen),
7268         LSM_HOOK_INIT(socket_accept, selinux_socket_accept),
7269         LSM_HOOK_INIT(socket_sendmsg, selinux_socket_sendmsg),
7270         LSM_HOOK_INIT(socket_recvmsg, selinux_socket_recvmsg),
7271         LSM_HOOK_INIT(socket_getsockname, selinux_socket_getsockname),
7272         LSM_HOOK_INIT(socket_getpeername, selinux_socket_getpeername),
7273         LSM_HOOK_INIT(socket_getsockopt, selinux_socket_getsockopt),
7274         LSM_HOOK_INIT(socket_setsockopt, selinux_socket_setsockopt),
7275         LSM_HOOK_INIT(socket_shutdown, selinux_socket_shutdown),
7276         LSM_HOOK_INIT(socket_sock_rcv_skb, selinux_socket_sock_rcv_skb),
7277         LSM_HOOK_INIT(socket_getpeersec_stream,
7278                         selinux_socket_getpeersec_stream),
7279         LSM_HOOK_INIT(socket_getpeersec_dgram, selinux_socket_getpeersec_dgram),
7280         LSM_HOOK_INIT(sk_free_security, selinux_sk_free_security),
7281         LSM_HOOK_INIT(sk_clone_security, selinux_sk_clone_security),
7282         LSM_HOOK_INIT(sk_getsecid, selinux_sk_getsecid),
7283         LSM_HOOK_INIT(sock_graft, selinux_sock_graft),
7284         LSM_HOOK_INIT(sctp_assoc_request, selinux_sctp_assoc_request),
7285         LSM_HOOK_INIT(sctp_sk_clone, selinux_sctp_sk_clone),
7286         LSM_HOOK_INIT(sctp_bind_connect, selinux_sctp_bind_connect),
7287         LSM_HOOK_INIT(inet_conn_request, selinux_inet_conn_request),
7288         LSM_HOOK_INIT(inet_csk_clone, selinux_inet_csk_clone),
7289         LSM_HOOK_INIT(inet_conn_established, selinux_inet_conn_established),
7290         LSM_HOOK_INIT(secmark_relabel_packet, selinux_secmark_relabel_packet),
7291         LSM_HOOK_INIT(secmark_refcount_inc, selinux_secmark_refcount_inc),
7292         LSM_HOOK_INIT(secmark_refcount_dec, selinux_secmark_refcount_dec),
7293         LSM_HOOK_INIT(req_classify_flow, selinux_req_classify_flow),
7294         LSM_HOOK_INIT(tun_dev_free_security, selinux_tun_dev_free_security),
7295         LSM_HOOK_INIT(tun_dev_create, selinux_tun_dev_create),
7296         LSM_HOOK_INIT(tun_dev_attach_queue, selinux_tun_dev_attach_queue),
7297         LSM_HOOK_INIT(tun_dev_attach, selinux_tun_dev_attach),
7298         LSM_HOOK_INIT(tun_dev_open, selinux_tun_dev_open),
7299 #ifdef CONFIG_SECURITY_INFINIBAND
7300         LSM_HOOK_INIT(ib_pkey_access, selinux_ib_pkey_access),
7301         LSM_HOOK_INIT(ib_endport_manage_subnet,
7302                       selinux_ib_endport_manage_subnet),
7303         LSM_HOOK_INIT(ib_free_security, selinux_ib_free_security),
7304 #endif
7305 #ifdef CONFIG_SECURITY_NETWORK_XFRM
7306         LSM_HOOK_INIT(xfrm_policy_free_security, selinux_xfrm_policy_free),
7307         LSM_HOOK_INIT(xfrm_policy_delete_security, selinux_xfrm_policy_delete),
7308         LSM_HOOK_INIT(xfrm_state_free_security, selinux_xfrm_state_free),
7309         LSM_HOOK_INIT(xfrm_state_delete_security, selinux_xfrm_state_delete),
7310         LSM_HOOK_INIT(xfrm_policy_lookup, selinux_xfrm_policy_lookup),
7311         LSM_HOOK_INIT(xfrm_state_pol_flow_match,
7312                         selinux_xfrm_state_pol_flow_match),
7313         LSM_HOOK_INIT(xfrm_decode_session, selinux_xfrm_decode_session),
7314 #endif
7315
7316 #ifdef CONFIG_KEYS
7317         LSM_HOOK_INIT(key_free, selinux_key_free),
7318         LSM_HOOK_INIT(key_permission, selinux_key_permission),
7319         LSM_HOOK_INIT(key_getsecurity, selinux_key_getsecurity),
7320 #ifdef CONFIG_KEY_NOTIFICATIONS
7321         LSM_HOOK_INIT(watch_key, selinux_watch_key),
7322 #endif
7323 #endif
7324
7325 #ifdef CONFIG_AUDIT
7326         LSM_HOOK_INIT(audit_rule_known, selinux_audit_rule_known),
7327         LSM_HOOK_INIT(audit_rule_match, selinux_audit_rule_match),
7328         LSM_HOOK_INIT(audit_rule_free, selinux_audit_rule_free),
7329 #endif
7330
7331 #ifdef CONFIG_BPF_SYSCALL
7332         LSM_HOOK_INIT(bpf, selinux_bpf),
7333         LSM_HOOK_INIT(bpf_map, selinux_bpf_map),
7334         LSM_HOOK_INIT(bpf_prog, selinux_bpf_prog),
7335         LSM_HOOK_INIT(bpf_map_free_security, selinux_bpf_map_free),
7336         LSM_HOOK_INIT(bpf_prog_free_security, selinux_bpf_prog_free),
7337 #endif
7338
7339 #ifdef CONFIG_PERF_EVENTS
7340         LSM_HOOK_INIT(perf_event_open, selinux_perf_event_open),
7341         LSM_HOOK_INIT(perf_event_free, selinux_perf_event_free),
7342         LSM_HOOK_INIT(perf_event_read, selinux_perf_event_read),
7343         LSM_HOOK_INIT(perf_event_write, selinux_perf_event_write),
7344 #endif
7345
7346         LSM_HOOK_INIT(locked_down, selinux_lockdown),
7347
7348         /*
7349          * PUT "CLONING" (ACCESSING + ALLOCATING) HOOKS HERE
7350          */
7351         LSM_HOOK_INIT(fs_context_dup, selinux_fs_context_dup),
7352         LSM_HOOK_INIT(fs_context_parse_param, selinux_fs_context_parse_param),
7353         LSM_HOOK_INIT(sb_eat_lsm_opts, selinux_sb_eat_lsm_opts),
7354         LSM_HOOK_INIT(sb_add_mnt_opt, selinux_add_mnt_opt),
7355 #ifdef CONFIG_SECURITY_NETWORK_XFRM
7356         LSM_HOOK_INIT(xfrm_policy_clone_security, selinux_xfrm_policy_clone),
7357 #endif
7358
7359         /*
7360          * PUT "ALLOCATING" HOOKS HERE
7361          */
7362         LSM_HOOK_INIT(msg_msg_alloc_security, selinux_msg_msg_alloc_security),
7363         LSM_HOOK_INIT(msg_queue_alloc_security,
7364                       selinux_msg_queue_alloc_security),
7365         LSM_HOOK_INIT(shm_alloc_security, selinux_shm_alloc_security),
7366         LSM_HOOK_INIT(sb_alloc_security, selinux_sb_alloc_security),
7367         LSM_HOOK_INIT(inode_alloc_security, selinux_inode_alloc_security),
7368         LSM_HOOK_INIT(sem_alloc_security, selinux_sem_alloc_security),
7369         LSM_HOOK_INIT(secid_to_secctx, selinux_secid_to_secctx),
7370         LSM_HOOK_INIT(inode_getsecctx, selinux_inode_getsecctx),
7371         LSM_HOOK_INIT(sk_alloc_security, selinux_sk_alloc_security),
7372         LSM_HOOK_INIT(tun_dev_alloc_security, selinux_tun_dev_alloc_security),
7373 #ifdef CONFIG_SECURITY_INFINIBAND
7374         LSM_HOOK_INIT(ib_alloc_security, selinux_ib_alloc_security),
7375 #endif
7376 #ifdef CONFIG_SECURITY_NETWORK_XFRM
7377         LSM_HOOK_INIT(xfrm_policy_alloc_security, selinux_xfrm_policy_alloc),
7378         LSM_HOOK_INIT(xfrm_state_alloc, selinux_xfrm_state_alloc),
7379         LSM_HOOK_INIT(xfrm_state_alloc_acquire,
7380                       selinux_xfrm_state_alloc_acquire),
7381 #endif
7382 #ifdef CONFIG_KEYS
7383         LSM_HOOK_INIT(key_alloc, selinux_key_alloc),
7384 #endif
7385 #ifdef CONFIG_AUDIT
7386         LSM_HOOK_INIT(audit_rule_init, selinux_audit_rule_init),
7387 #endif
7388 #ifdef CONFIG_BPF_SYSCALL
7389         LSM_HOOK_INIT(bpf_map_alloc_security, selinux_bpf_map_alloc),
7390         LSM_HOOK_INIT(bpf_prog_alloc_security, selinux_bpf_prog_alloc),
7391 #endif
7392 #ifdef CONFIG_PERF_EVENTS
7393         LSM_HOOK_INIT(perf_event_alloc, selinux_perf_event_alloc),
7394 #endif
7395 };
7396
7397 static __init int selinux_init(void)
7398 {
7399         pr_info("SELinux:  Initializing.\n");
7400
7401         memset(&selinux_state, 0, sizeof(selinux_state));
7402         enforcing_set(&selinux_state, selinux_enforcing_boot);
7403         checkreqprot_set(&selinux_state, selinux_checkreqprot_boot);
7404         selinux_avc_init(&selinux_state.avc);
7405         mutex_init(&selinux_state.status_lock);
7406         mutex_init(&selinux_state.policy_mutex);
7407
7408         /* Set the security state for the initial task. */
7409         cred_init_security();
7410
7411         default_noexec = !(VM_DATA_DEFAULT_FLAGS & VM_EXEC);
7412
7413         avc_init();
7414
7415         avtab_cache_init();
7416
7417         ebitmap_cache_init();
7418
7419         hashtab_cache_init();
7420
7421         security_add_hooks(selinux_hooks, ARRAY_SIZE(selinux_hooks), "selinux");
7422
7423         if (avc_add_callback(selinux_netcache_avc_callback, AVC_CALLBACK_RESET))
7424                 panic("SELinux: Unable to register AVC netcache callback\n");
7425
7426         if (avc_add_callback(selinux_lsm_notifier_avc_callback, AVC_CALLBACK_RESET))
7427                 panic("SELinux: Unable to register AVC LSM notifier callback\n");
7428
7429         if (selinux_enforcing_boot)
7430                 pr_debug("SELinux:  Starting in enforcing mode\n");
7431         else
7432                 pr_debug("SELinux:  Starting in permissive mode\n");
7433
7434         fs_validate_description("selinux", selinux_fs_parameters);
7435
7436         return 0;
7437 }
7438
7439 static void delayed_superblock_init(struct super_block *sb, void *unused)
7440 {
7441         selinux_set_mnt_opts(sb, NULL, 0, NULL);
7442 }
7443
7444 void selinux_complete_init(void)
7445 {
7446         pr_debug("SELinux:  Completing initialization.\n");
7447
7448         /* Set up any superblocks initialized prior to the policy load. */
7449         pr_debug("SELinux:  Setting up existing superblocks.\n");
7450         iterate_supers(delayed_superblock_init, NULL);
7451 }
7452
7453 /* SELinux requires early initialization in order to label
7454    all processes and objects when they are created. */
7455 DEFINE_LSM(selinux) = {
7456         .name = "selinux",
7457         .flags = LSM_FLAG_LEGACY_MAJOR | LSM_FLAG_EXCLUSIVE,
7458         .enabled = &selinux_enabled_boot,
7459         .blobs = &selinux_blob_sizes,
7460         .init = selinux_init,
7461 };
7462
7463 #if defined(CONFIG_NETFILTER)
7464
7465 static const struct nf_hook_ops selinux_nf_ops[] = {
7466         {
7467                 .hook =         selinux_ipv4_postroute,
7468                 .pf =           NFPROTO_IPV4,
7469                 .hooknum =      NF_INET_POST_ROUTING,
7470                 .priority =     NF_IP_PRI_SELINUX_LAST,
7471         },
7472         {
7473                 .hook =         selinux_ipv4_forward,
7474                 .pf =           NFPROTO_IPV4,
7475                 .hooknum =      NF_INET_FORWARD,
7476                 .priority =     NF_IP_PRI_SELINUX_FIRST,
7477         },
7478         {
7479                 .hook =         selinux_ipv4_output,
7480                 .pf =           NFPROTO_IPV4,
7481                 .hooknum =      NF_INET_LOCAL_OUT,
7482                 .priority =     NF_IP_PRI_SELINUX_FIRST,
7483         },
7484 #if IS_ENABLED(CONFIG_IPV6)
7485         {
7486                 .hook =         selinux_ipv6_postroute,
7487                 .pf =           NFPROTO_IPV6,
7488                 .hooknum =      NF_INET_POST_ROUTING,
7489                 .priority =     NF_IP6_PRI_SELINUX_LAST,
7490         },
7491         {
7492                 .hook =         selinux_ipv6_forward,
7493                 .pf =           NFPROTO_IPV6,
7494                 .hooknum =      NF_INET_FORWARD,
7495                 .priority =     NF_IP6_PRI_SELINUX_FIRST,
7496         },
7497         {
7498                 .hook =         selinux_ipv6_output,
7499                 .pf =           NFPROTO_IPV6,
7500                 .hooknum =      NF_INET_LOCAL_OUT,
7501                 .priority =     NF_IP6_PRI_SELINUX_FIRST,
7502         },
7503 #endif  /* IPV6 */
7504 };
7505
7506 static int __net_init selinux_nf_register(struct net *net)
7507 {
7508         return nf_register_net_hooks(net, selinux_nf_ops,
7509                                      ARRAY_SIZE(selinux_nf_ops));
7510 }
7511
7512 static void __net_exit selinux_nf_unregister(struct net *net)
7513 {
7514         nf_unregister_net_hooks(net, selinux_nf_ops,
7515                                 ARRAY_SIZE(selinux_nf_ops));
7516 }
7517
7518 static struct pernet_operations selinux_net_ops = {
7519         .init = selinux_nf_register,
7520         .exit = selinux_nf_unregister,
7521 };
7522
7523 static int __init selinux_nf_ip_init(void)
7524 {
7525         int err;
7526
7527         if (!selinux_enabled_boot)
7528                 return 0;
7529
7530         pr_debug("SELinux:  Registering netfilter hooks\n");
7531
7532         err = register_pernet_subsys(&selinux_net_ops);
7533         if (err)
7534                 panic("SELinux: register_pernet_subsys: error %d\n", err);
7535
7536         return 0;
7537 }
7538 __initcall(selinux_nf_ip_init);
7539
7540 #ifdef CONFIG_SECURITY_SELINUX_DISABLE
7541 static void selinux_nf_ip_exit(void)
7542 {
7543         pr_debug("SELinux:  Unregistering netfilter hooks\n");
7544
7545         unregister_pernet_subsys(&selinux_net_ops);
7546 }
7547 #endif
7548
7549 #else /* CONFIG_NETFILTER */
7550
7551 #ifdef CONFIG_SECURITY_SELINUX_DISABLE
7552 #define selinux_nf_ip_exit()
7553 #endif
7554
7555 #endif /* CONFIG_NETFILTER */
7556
7557 #ifdef CONFIG_SECURITY_SELINUX_DISABLE
7558 int selinux_disable(struct selinux_state *state)
7559 {
7560         if (selinux_initialized(state)) {
7561                 /* Not permitted after initial policy load. */
7562                 return -EINVAL;
7563         }
7564
7565         if (selinux_disabled(state)) {
7566                 /* Only do this once. */
7567                 return -EINVAL;
7568         }
7569
7570         selinux_mark_disabled(state);
7571
7572         pr_info("SELinux:  Disabled at runtime.\n");
7573
7574         /*
7575          * Unregister netfilter hooks.
7576          * Must be done before security_delete_hooks() to avoid breaking
7577          * runtime disable.
7578          */
7579         selinux_nf_ip_exit();
7580
7581         security_delete_hooks(selinux_hooks, ARRAY_SIZE(selinux_hooks));
7582
7583         /* Try to destroy the avc node cache */
7584         avc_disable();
7585
7586         /* Unregister selinuxfs. */
7587         exit_sel_fs();
7588
7589         return 0;
7590 }
7591 #endif