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