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