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