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