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