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