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