xref: /linux/security/selinux/hooks.c (revision 49a695ba723224875df50e327bd7b0b65dd9a56b)
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, const struct cred *cred)
4160 {
4161 	u32 secid;
4162 	u32 perm;
4163 
4164 	if (!sig)
4165 		perm = PROCESS__SIGNULL; /* null signal; existence test */
4166 	else
4167 		perm = signal_to_av(sig);
4168 	if (!cred)
4169 		secid = current_sid();
4170 	else
4171 		secid = cred_sid(cred);
4172 	return avc_has_perm(&selinux_state,
4173 			    secid, task_sid(p), SECCLASS_PROCESS, perm, NULL);
4174 }
4175 
4176 static void selinux_task_to_inode(struct task_struct *p,
4177 				  struct inode *inode)
4178 {
4179 	struct inode_security_struct *isec = inode->i_security;
4180 	u32 sid = task_sid(p);
4181 
4182 	spin_lock(&isec->lock);
4183 	isec->sclass = inode_mode_to_security_class(inode->i_mode);
4184 	isec->sid = sid;
4185 	isec->initialized = LABEL_INITIALIZED;
4186 	spin_unlock(&isec->lock);
4187 }
4188 
4189 /* Returns error only if unable to parse addresses */
4190 static int selinux_parse_skb_ipv4(struct sk_buff *skb,
4191 			struct common_audit_data *ad, u8 *proto)
4192 {
4193 	int offset, ihlen, ret = -EINVAL;
4194 	struct iphdr _iph, *ih;
4195 
4196 	offset = skb_network_offset(skb);
4197 	ih = skb_header_pointer(skb, offset, sizeof(_iph), &_iph);
4198 	if (ih == NULL)
4199 		goto out;
4200 
4201 	ihlen = ih->ihl * 4;
4202 	if (ihlen < sizeof(_iph))
4203 		goto out;
4204 
4205 	ad->u.net->v4info.saddr = ih->saddr;
4206 	ad->u.net->v4info.daddr = ih->daddr;
4207 	ret = 0;
4208 
4209 	if (proto)
4210 		*proto = ih->protocol;
4211 
4212 	switch (ih->protocol) {
4213 	case IPPROTO_TCP: {
4214 		struct tcphdr _tcph, *th;
4215 
4216 		if (ntohs(ih->frag_off) & IP_OFFSET)
4217 			break;
4218 
4219 		offset += ihlen;
4220 		th = skb_header_pointer(skb, offset, sizeof(_tcph), &_tcph);
4221 		if (th == NULL)
4222 			break;
4223 
4224 		ad->u.net->sport = th->source;
4225 		ad->u.net->dport = th->dest;
4226 		break;
4227 	}
4228 
4229 	case IPPROTO_UDP: {
4230 		struct udphdr _udph, *uh;
4231 
4232 		if (ntohs(ih->frag_off) & IP_OFFSET)
4233 			break;
4234 
4235 		offset += ihlen;
4236 		uh = skb_header_pointer(skb, offset, sizeof(_udph), &_udph);
4237 		if (uh == NULL)
4238 			break;
4239 
4240 		ad->u.net->sport = uh->source;
4241 		ad->u.net->dport = uh->dest;
4242 		break;
4243 	}
4244 
4245 	case IPPROTO_DCCP: {
4246 		struct dccp_hdr _dccph, *dh;
4247 
4248 		if (ntohs(ih->frag_off) & IP_OFFSET)
4249 			break;
4250 
4251 		offset += ihlen;
4252 		dh = skb_header_pointer(skb, offset, sizeof(_dccph), &_dccph);
4253 		if (dh == NULL)
4254 			break;
4255 
4256 		ad->u.net->sport = dh->dccph_sport;
4257 		ad->u.net->dport = dh->dccph_dport;
4258 		break;
4259 	}
4260 
4261 #if IS_ENABLED(CONFIG_IP_SCTP)
4262 	case IPPROTO_SCTP: {
4263 		struct sctphdr _sctph, *sh;
4264 
4265 		if (ntohs(ih->frag_off) & IP_OFFSET)
4266 			break;
4267 
4268 		offset += ihlen;
4269 		sh = skb_header_pointer(skb, offset, sizeof(_sctph), &_sctph);
4270 		if (sh == NULL)
4271 			break;
4272 
4273 		ad->u.net->sport = sh->source;
4274 		ad->u.net->dport = sh->dest;
4275 		break;
4276 	}
4277 #endif
4278 	default:
4279 		break;
4280 	}
4281 out:
4282 	return ret;
4283 }
4284 
4285 #if IS_ENABLED(CONFIG_IPV6)
4286 
4287 /* Returns error only if unable to parse addresses */
4288 static int selinux_parse_skb_ipv6(struct sk_buff *skb,
4289 			struct common_audit_data *ad, u8 *proto)
4290 {
4291 	u8 nexthdr;
4292 	int ret = -EINVAL, offset;
4293 	struct ipv6hdr _ipv6h, *ip6;
4294 	__be16 frag_off;
4295 
4296 	offset = skb_network_offset(skb);
4297 	ip6 = skb_header_pointer(skb, offset, sizeof(_ipv6h), &_ipv6h);
4298 	if (ip6 == NULL)
4299 		goto out;
4300 
4301 	ad->u.net->v6info.saddr = ip6->saddr;
4302 	ad->u.net->v6info.daddr = ip6->daddr;
4303 	ret = 0;
4304 
4305 	nexthdr = ip6->nexthdr;
4306 	offset += sizeof(_ipv6h);
4307 	offset = ipv6_skip_exthdr(skb, offset, &nexthdr, &frag_off);
4308 	if (offset < 0)
4309 		goto out;
4310 
4311 	if (proto)
4312 		*proto = nexthdr;
4313 
4314 	switch (nexthdr) {
4315 	case IPPROTO_TCP: {
4316 		struct tcphdr _tcph, *th;
4317 
4318 		th = skb_header_pointer(skb, offset, sizeof(_tcph), &_tcph);
4319 		if (th == NULL)
4320 			break;
4321 
4322 		ad->u.net->sport = th->source;
4323 		ad->u.net->dport = th->dest;
4324 		break;
4325 	}
4326 
4327 	case IPPROTO_UDP: {
4328 		struct udphdr _udph, *uh;
4329 
4330 		uh = skb_header_pointer(skb, offset, sizeof(_udph), &_udph);
4331 		if (uh == NULL)
4332 			break;
4333 
4334 		ad->u.net->sport = uh->source;
4335 		ad->u.net->dport = uh->dest;
4336 		break;
4337 	}
4338 
4339 	case IPPROTO_DCCP: {
4340 		struct dccp_hdr _dccph, *dh;
4341 
4342 		dh = skb_header_pointer(skb, offset, sizeof(_dccph), &_dccph);
4343 		if (dh == NULL)
4344 			break;
4345 
4346 		ad->u.net->sport = dh->dccph_sport;
4347 		ad->u.net->dport = dh->dccph_dport;
4348 		break;
4349 	}
4350 
4351 #if IS_ENABLED(CONFIG_IP_SCTP)
4352 	case IPPROTO_SCTP: {
4353 		struct sctphdr _sctph, *sh;
4354 
4355 		sh = skb_header_pointer(skb, offset, sizeof(_sctph), &_sctph);
4356 		if (sh == NULL)
4357 			break;
4358 
4359 		ad->u.net->sport = sh->source;
4360 		ad->u.net->dport = sh->dest;
4361 		break;
4362 	}
4363 #endif
4364 	/* includes fragments */
4365 	default:
4366 		break;
4367 	}
4368 out:
4369 	return ret;
4370 }
4371 
4372 #endif /* IPV6 */
4373 
4374 static int selinux_parse_skb(struct sk_buff *skb, struct common_audit_data *ad,
4375 			     char **_addrp, int src, u8 *proto)
4376 {
4377 	char *addrp;
4378 	int ret;
4379 
4380 	switch (ad->u.net->family) {
4381 	case PF_INET:
4382 		ret = selinux_parse_skb_ipv4(skb, ad, proto);
4383 		if (ret)
4384 			goto parse_error;
4385 		addrp = (char *)(src ? &ad->u.net->v4info.saddr :
4386 				       &ad->u.net->v4info.daddr);
4387 		goto okay;
4388 
4389 #if IS_ENABLED(CONFIG_IPV6)
4390 	case PF_INET6:
4391 		ret = selinux_parse_skb_ipv6(skb, ad, proto);
4392 		if (ret)
4393 			goto parse_error;
4394 		addrp = (char *)(src ? &ad->u.net->v6info.saddr :
4395 				       &ad->u.net->v6info.daddr);
4396 		goto okay;
4397 #endif	/* IPV6 */
4398 	default:
4399 		addrp = NULL;
4400 		goto okay;
4401 	}
4402 
4403 parse_error:
4404 	printk(KERN_WARNING
4405 	       "SELinux: failure in selinux_parse_skb(),"
4406 	       " unable to parse packet\n");
4407 	return ret;
4408 
4409 okay:
4410 	if (_addrp)
4411 		*_addrp = addrp;
4412 	return 0;
4413 }
4414 
4415 /**
4416  * selinux_skb_peerlbl_sid - Determine the peer label of a packet
4417  * @skb: the packet
4418  * @family: protocol family
4419  * @sid: the packet's peer label SID
4420  *
4421  * Description:
4422  * Check the various different forms of network peer labeling and determine
4423  * the peer label/SID for the packet; most of the magic actually occurs in
4424  * the security server function security_net_peersid_cmp().  The function
4425  * returns zero if the value in @sid is valid (although it may be SECSID_NULL)
4426  * or -EACCES if @sid is invalid due to inconsistencies with the different
4427  * peer labels.
4428  *
4429  */
4430 static int selinux_skb_peerlbl_sid(struct sk_buff *skb, u16 family, u32 *sid)
4431 {
4432 	int err;
4433 	u32 xfrm_sid;
4434 	u32 nlbl_sid;
4435 	u32 nlbl_type;
4436 
4437 	err = selinux_xfrm_skb_sid(skb, &xfrm_sid);
4438 	if (unlikely(err))
4439 		return -EACCES;
4440 	err = selinux_netlbl_skbuff_getsid(skb, family, &nlbl_type, &nlbl_sid);
4441 	if (unlikely(err))
4442 		return -EACCES;
4443 
4444 	err = security_net_peersid_resolve(&selinux_state, nlbl_sid,
4445 					   nlbl_type, xfrm_sid, sid);
4446 	if (unlikely(err)) {
4447 		printk(KERN_WARNING
4448 		       "SELinux: failure in selinux_skb_peerlbl_sid(),"
4449 		       " unable to determine packet's peer label\n");
4450 		return -EACCES;
4451 	}
4452 
4453 	return 0;
4454 }
4455 
4456 /**
4457  * selinux_conn_sid - Determine the child socket label for a connection
4458  * @sk_sid: the parent socket's SID
4459  * @skb_sid: the packet's SID
4460  * @conn_sid: the resulting connection SID
4461  *
4462  * If @skb_sid is valid then the user:role:type information from @sk_sid is
4463  * combined with the MLS information from @skb_sid in order to create
4464  * @conn_sid.  If @skb_sid is not valid then then @conn_sid is simply a copy
4465  * of @sk_sid.  Returns zero on success, negative values on failure.
4466  *
4467  */
4468 static int selinux_conn_sid(u32 sk_sid, u32 skb_sid, u32 *conn_sid)
4469 {
4470 	int err = 0;
4471 
4472 	if (skb_sid != SECSID_NULL)
4473 		err = security_sid_mls_copy(&selinux_state, sk_sid, skb_sid,
4474 					    conn_sid);
4475 	else
4476 		*conn_sid = sk_sid;
4477 
4478 	return err;
4479 }
4480 
4481 /* socket security operations */
4482 
4483 static int socket_sockcreate_sid(const struct task_security_struct *tsec,
4484 				 u16 secclass, u32 *socksid)
4485 {
4486 	if (tsec->sockcreate_sid > SECSID_NULL) {
4487 		*socksid = tsec->sockcreate_sid;
4488 		return 0;
4489 	}
4490 
4491 	return security_transition_sid(&selinux_state, tsec->sid, tsec->sid,
4492 				       secclass, NULL, socksid);
4493 }
4494 
4495 static int sock_has_perm(struct sock *sk, u32 perms)
4496 {
4497 	struct sk_security_struct *sksec = sk->sk_security;
4498 	struct common_audit_data ad;
4499 	struct lsm_network_audit net = {0,};
4500 
4501 	if (sksec->sid == SECINITSID_KERNEL)
4502 		return 0;
4503 
4504 	ad.type = LSM_AUDIT_DATA_NET;
4505 	ad.u.net = &net;
4506 	ad.u.net->sk = sk;
4507 
4508 	return avc_has_perm(&selinux_state,
4509 			    current_sid(), sksec->sid, sksec->sclass, perms,
4510 			    &ad);
4511 }
4512 
4513 static int selinux_socket_create(int family, int type,
4514 				 int protocol, int kern)
4515 {
4516 	const struct task_security_struct *tsec = current_security();
4517 	u32 newsid;
4518 	u16 secclass;
4519 	int rc;
4520 
4521 	if (kern)
4522 		return 0;
4523 
4524 	secclass = socket_type_to_security_class(family, type, protocol);
4525 	rc = socket_sockcreate_sid(tsec, secclass, &newsid);
4526 	if (rc)
4527 		return rc;
4528 
4529 	return avc_has_perm(&selinux_state,
4530 			    tsec->sid, newsid, secclass, SOCKET__CREATE, NULL);
4531 }
4532 
4533 static int selinux_socket_post_create(struct socket *sock, int family,
4534 				      int type, int protocol, int kern)
4535 {
4536 	const struct task_security_struct *tsec = current_security();
4537 	struct inode_security_struct *isec = inode_security_novalidate(SOCK_INODE(sock));
4538 	struct sk_security_struct *sksec;
4539 	u16 sclass = socket_type_to_security_class(family, type, protocol);
4540 	u32 sid = SECINITSID_KERNEL;
4541 	int err = 0;
4542 
4543 	if (!kern) {
4544 		err = socket_sockcreate_sid(tsec, sclass, &sid);
4545 		if (err)
4546 			return err;
4547 	}
4548 
4549 	isec->sclass = sclass;
4550 	isec->sid = sid;
4551 	isec->initialized = LABEL_INITIALIZED;
4552 
4553 	if (sock->sk) {
4554 		sksec = sock->sk->sk_security;
4555 		sksec->sclass = sclass;
4556 		sksec->sid = sid;
4557 		/* Allows detection of the first association on this socket */
4558 		if (sksec->sclass == SECCLASS_SCTP_SOCKET)
4559 			sksec->sctp_assoc_state = SCTP_ASSOC_UNSET;
4560 
4561 		err = selinux_netlbl_socket_post_create(sock->sk, family);
4562 	}
4563 
4564 	return err;
4565 }
4566 
4567 /* Range of port numbers used to automatically bind.
4568    Need to determine whether we should perform a name_bind
4569    permission check between the socket and the port number. */
4570 
4571 static int selinux_socket_bind(struct socket *sock, struct sockaddr *address, int addrlen)
4572 {
4573 	struct sock *sk = sock->sk;
4574 	u16 family;
4575 	int err;
4576 
4577 	err = sock_has_perm(sk, SOCKET__BIND);
4578 	if (err)
4579 		goto out;
4580 
4581 	/* If PF_INET or PF_INET6, check name_bind permission for the port. */
4582 	family = sk->sk_family;
4583 	if (family == PF_INET || family == PF_INET6) {
4584 		char *addrp;
4585 		struct sk_security_struct *sksec = sk->sk_security;
4586 		struct common_audit_data ad;
4587 		struct lsm_network_audit net = {0,};
4588 		struct sockaddr_in *addr4 = NULL;
4589 		struct sockaddr_in6 *addr6 = NULL;
4590 		unsigned short snum;
4591 		u32 sid, node_perm;
4592 
4593 		/*
4594 		 * sctp_bindx(3) calls via selinux_sctp_bind_connect()
4595 		 * that validates multiple binding addresses. Because of this
4596 		 * need to check address->sa_family as it is possible to have
4597 		 * sk->sk_family = PF_INET6 with addr->sa_family = AF_INET.
4598 		 */
4599 		switch (address->sa_family) {
4600 		case AF_INET:
4601 			if (addrlen < sizeof(struct sockaddr_in))
4602 				return -EINVAL;
4603 			addr4 = (struct sockaddr_in *)address;
4604 			snum = ntohs(addr4->sin_port);
4605 			addrp = (char *)&addr4->sin_addr.s_addr;
4606 			break;
4607 		case AF_INET6:
4608 			if (addrlen < SIN6_LEN_RFC2133)
4609 				return -EINVAL;
4610 			addr6 = (struct sockaddr_in6 *)address;
4611 			snum = ntohs(addr6->sin6_port);
4612 			addrp = (char *)&addr6->sin6_addr.s6_addr;
4613 			break;
4614 		default:
4615 			/* Note that SCTP services expect -EINVAL, whereas
4616 			 * others expect -EAFNOSUPPORT.
4617 			 */
4618 			if (sksec->sclass == SECCLASS_SCTP_SOCKET)
4619 				return -EINVAL;
4620 			else
4621 				return -EAFNOSUPPORT;
4622 		}
4623 
4624 		if (snum) {
4625 			int low, high;
4626 
4627 			inet_get_local_port_range(sock_net(sk), &low, &high);
4628 
4629 			if (snum < max(inet_prot_sock(sock_net(sk)), low) ||
4630 			    snum > high) {
4631 				err = sel_netport_sid(sk->sk_protocol,
4632 						      snum, &sid);
4633 				if (err)
4634 					goto out;
4635 				ad.type = LSM_AUDIT_DATA_NET;
4636 				ad.u.net = &net;
4637 				ad.u.net->sport = htons(snum);
4638 				ad.u.net->family = family;
4639 				err = avc_has_perm(&selinux_state,
4640 						   sksec->sid, sid,
4641 						   sksec->sclass,
4642 						   SOCKET__NAME_BIND, &ad);
4643 				if (err)
4644 					goto out;
4645 			}
4646 		}
4647 
4648 		switch (sksec->sclass) {
4649 		case SECCLASS_TCP_SOCKET:
4650 			node_perm = TCP_SOCKET__NODE_BIND;
4651 			break;
4652 
4653 		case SECCLASS_UDP_SOCKET:
4654 			node_perm = UDP_SOCKET__NODE_BIND;
4655 			break;
4656 
4657 		case SECCLASS_DCCP_SOCKET:
4658 			node_perm = DCCP_SOCKET__NODE_BIND;
4659 			break;
4660 
4661 		case SECCLASS_SCTP_SOCKET:
4662 			node_perm = SCTP_SOCKET__NODE_BIND;
4663 			break;
4664 
4665 		default:
4666 			node_perm = RAWIP_SOCKET__NODE_BIND;
4667 			break;
4668 		}
4669 
4670 		err = sel_netnode_sid(addrp, family, &sid);
4671 		if (err)
4672 			goto out;
4673 
4674 		ad.type = LSM_AUDIT_DATA_NET;
4675 		ad.u.net = &net;
4676 		ad.u.net->sport = htons(snum);
4677 		ad.u.net->family = family;
4678 
4679 		if (address->sa_family == AF_INET)
4680 			ad.u.net->v4info.saddr = addr4->sin_addr.s_addr;
4681 		else
4682 			ad.u.net->v6info.saddr = addr6->sin6_addr;
4683 
4684 		err = avc_has_perm(&selinux_state,
4685 				   sksec->sid, sid,
4686 				   sksec->sclass, node_perm, &ad);
4687 		if (err)
4688 			goto out;
4689 	}
4690 out:
4691 	return err;
4692 }
4693 
4694 /* This supports connect(2) and SCTP connect services such as sctp_connectx(3)
4695  * and sctp_sendmsg(3) as described in Documentation/security/LSM-sctp.txt
4696  */
4697 static int selinux_socket_connect_helper(struct socket *sock,
4698 					 struct sockaddr *address, int addrlen)
4699 {
4700 	struct sock *sk = sock->sk;
4701 	struct sk_security_struct *sksec = sk->sk_security;
4702 	int err;
4703 
4704 	err = sock_has_perm(sk, SOCKET__CONNECT);
4705 	if (err)
4706 		return err;
4707 
4708 	/*
4709 	 * If a TCP, DCCP or SCTP socket, check name_connect permission
4710 	 * for the port.
4711 	 */
4712 	if (sksec->sclass == SECCLASS_TCP_SOCKET ||
4713 	    sksec->sclass == SECCLASS_DCCP_SOCKET ||
4714 	    sksec->sclass == SECCLASS_SCTP_SOCKET) {
4715 		struct common_audit_data ad;
4716 		struct lsm_network_audit net = {0,};
4717 		struct sockaddr_in *addr4 = NULL;
4718 		struct sockaddr_in6 *addr6 = NULL;
4719 		unsigned short snum;
4720 		u32 sid, perm;
4721 
4722 		/* sctp_connectx(3) calls via selinux_sctp_bind_connect()
4723 		 * that validates multiple connect addresses. Because of this
4724 		 * need to check address->sa_family as it is possible to have
4725 		 * sk->sk_family = PF_INET6 with addr->sa_family = AF_INET.
4726 		 */
4727 		switch (address->sa_family) {
4728 		case AF_INET:
4729 			addr4 = (struct sockaddr_in *)address;
4730 			if (addrlen < sizeof(struct sockaddr_in))
4731 				return -EINVAL;
4732 			snum = ntohs(addr4->sin_port);
4733 			break;
4734 		case AF_INET6:
4735 			addr6 = (struct sockaddr_in6 *)address;
4736 			if (addrlen < SIN6_LEN_RFC2133)
4737 				return -EINVAL;
4738 			snum = ntohs(addr6->sin6_port);
4739 			break;
4740 		default:
4741 			/* Note that SCTP services expect -EINVAL, whereas
4742 			 * others expect -EAFNOSUPPORT.
4743 			 */
4744 			if (sksec->sclass == SECCLASS_SCTP_SOCKET)
4745 				return -EINVAL;
4746 			else
4747 				return -EAFNOSUPPORT;
4748 		}
4749 
4750 		err = sel_netport_sid(sk->sk_protocol, snum, &sid);
4751 		if (err)
4752 			return err;
4753 
4754 		switch (sksec->sclass) {
4755 		case SECCLASS_TCP_SOCKET:
4756 			perm = TCP_SOCKET__NAME_CONNECT;
4757 			break;
4758 		case SECCLASS_DCCP_SOCKET:
4759 			perm = DCCP_SOCKET__NAME_CONNECT;
4760 			break;
4761 		case SECCLASS_SCTP_SOCKET:
4762 			perm = SCTP_SOCKET__NAME_CONNECT;
4763 			break;
4764 		}
4765 
4766 		ad.type = LSM_AUDIT_DATA_NET;
4767 		ad.u.net = &net;
4768 		ad.u.net->dport = htons(snum);
4769 		ad.u.net->family = sk->sk_family;
4770 		err = avc_has_perm(&selinux_state,
4771 				   sksec->sid, sid, sksec->sclass, perm, &ad);
4772 		if (err)
4773 			return err;
4774 	}
4775 
4776 	return 0;
4777 }
4778 
4779 /* Supports connect(2), see comments in selinux_socket_connect_helper() */
4780 static int selinux_socket_connect(struct socket *sock,
4781 				  struct sockaddr *address, int addrlen)
4782 {
4783 	int err;
4784 	struct sock *sk = sock->sk;
4785 
4786 	err = selinux_socket_connect_helper(sock, address, addrlen);
4787 	if (err)
4788 		return err;
4789 
4790 	return selinux_netlbl_socket_connect(sk, address);
4791 }
4792 
4793 static int selinux_socket_listen(struct socket *sock, int backlog)
4794 {
4795 	return sock_has_perm(sock->sk, SOCKET__LISTEN);
4796 }
4797 
4798 static int selinux_socket_accept(struct socket *sock, struct socket *newsock)
4799 {
4800 	int err;
4801 	struct inode_security_struct *isec;
4802 	struct inode_security_struct *newisec;
4803 	u16 sclass;
4804 	u32 sid;
4805 
4806 	err = sock_has_perm(sock->sk, SOCKET__ACCEPT);
4807 	if (err)
4808 		return err;
4809 
4810 	isec = inode_security_novalidate(SOCK_INODE(sock));
4811 	spin_lock(&isec->lock);
4812 	sclass = isec->sclass;
4813 	sid = isec->sid;
4814 	spin_unlock(&isec->lock);
4815 
4816 	newisec = inode_security_novalidate(SOCK_INODE(newsock));
4817 	newisec->sclass = sclass;
4818 	newisec->sid = sid;
4819 	newisec->initialized = LABEL_INITIALIZED;
4820 
4821 	return 0;
4822 }
4823 
4824 static int selinux_socket_sendmsg(struct socket *sock, struct msghdr *msg,
4825 				  int size)
4826 {
4827 	return sock_has_perm(sock->sk, SOCKET__WRITE);
4828 }
4829 
4830 static int selinux_socket_recvmsg(struct socket *sock, struct msghdr *msg,
4831 				  int size, int flags)
4832 {
4833 	return sock_has_perm(sock->sk, SOCKET__READ);
4834 }
4835 
4836 static int selinux_socket_getsockname(struct socket *sock)
4837 {
4838 	return sock_has_perm(sock->sk, SOCKET__GETATTR);
4839 }
4840 
4841 static int selinux_socket_getpeername(struct socket *sock)
4842 {
4843 	return sock_has_perm(sock->sk, SOCKET__GETATTR);
4844 }
4845 
4846 static int selinux_socket_setsockopt(struct socket *sock, int level, int optname)
4847 {
4848 	int err;
4849 
4850 	err = sock_has_perm(sock->sk, SOCKET__SETOPT);
4851 	if (err)
4852 		return err;
4853 
4854 	return selinux_netlbl_socket_setsockopt(sock, level, optname);
4855 }
4856 
4857 static int selinux_socket_getsockopt(struct socket *sock, int level,
4858 				     int optname)
4859 {
4860 	return sock_has_perm(sock->sk, SOCKET__GETOPT);
4861 }
4862 
4863 static int selinux_socket_shutdown(struct socket *sock, int how)
4864 {
4865 	return sock_has_perm(sock->sk, SOCKET__SHUTDOWN);
4866 }
4867 
4868 static int selinux_socket_unix_stream_connect(struct sock *sock,
4869 					      struct sock *other,
4870 					      struct sock *newsk)
4871 {
4872 	struct sk_security_struct *sksec_sock = sock->sk_security;
4873 	struct sk_security_struct *sksec_other = other->sk_security;
4874 	struct sk_security_struct *sksec_new = newsk->sk_security;
4875 	struct common_audit_data ad;
4876 	struct lsm_network_audit net = {0,};
4877 	int err;
4878 
4879 	ad.type = LSM_AUDIT_DATA_NET;
4880 	ad.u.net = &net;
4881 	ad.u.net->sk = other;
4882 
4883 	err = avc_has_perm(&selinux_state,
4884 			   sksec_sock->sid, sksec_other->sid,
4885 			   sksec_other->sclass,
4886 			   UNIX_STREAM_SOCKET__CONNECTTO, &ad);
4887 	if (err)
4888 		return err;
4889 
4890 	/* server child socket */
4891 	sksec_new->peer_sid = sksec_sock->sid;
4892 	err = security_sid_mls_copy(&selinux_state, sksec_other->sid,
4893 				    sksec_sock->sid, &sksec_new->sid);
4894 	if (err)
4895 		return err;
4896 
4897 	/* connecting socket */
4898 	sksec_sock->peer_sid = sksec_new->sid;
4899 
4900 	return 0;
4901 }
4902 
4903 static int selinux_socket_unix_may_send(struct socket *sock,
4904 					struct socket *other)
4905 {
4906 	struct sk_security_struct *ssec = sock->sk->sk_security;
4907 	struct sk_security_struct *osec = other->sk->sk_security;
4908 	struct common_audit_data ad;
4909 	struct lsm_network_audit net = {0,};
4910 
4911 	ad.type = LSM_AUDIT_DATA_NET;
4912 	ad.u.net = &net;
4913 	ad.u.net->sk = other->sk;
4914 
4915 	return avc_has_perm(&selinux_state,
4916 			    ssec->sid, osec->sid, osec->sclass, SOCKET__SENDTO,
4917 			    &ad);
4918 }
4919 
4920 static int selinux_inet_sys_rcv_skb(struct net *ns, int ifindex,
4921 				    char *addrp, u16 family, u32 peer_sid,
4922 				    struct common_audit_data *ad)
4923 {
4924 	int err;
4925 	u32 if_sid;
4926 	u32 node_sid;
4927 
4928 	err = sel_netif_sid(ns, ifindex, &if_sid);
4929 	if (err)
4930 		return err;
4931 	err = avc_has_perm(&selinux_state,
4932 			   peer_sid, if_sid,
4933 			   SECCLASS_NETIF, NETIF__INGRESS, ad);
4934 	if (err)
4935 		return err;
4936 
4937 	err = sel_netnode_sid(addrp, family, &node_sid);
4938 	if (err)
4939 		return err;
4940 	return avc_has_perm(&selinux_state,
4941 			    peer_sid, node_sid,
4942 			    SECCLASS_NODE, NODE__RECVFROM, ad);
4943 }
4944 
4945 static int selinux_sock_rcv_skb_compat(struct sock *sk, struct sk_buff *skb,
4946 				       u16 family)
4947 {
4948 	int err = 0;
4949 	struct sk_security_struct *sksec = sk->sk_security;
4950 	u32 sk_sid = sksec->sid;
4951 	struct common_audit_data ad;
4952 	struct lsm_network_audit net = {0,};
4953 	char *addrp;
4954 
4955 	ad.type = LSM_AUDIT_DATA_NET;
4956 	ad.u.net = &net;
4957 	ad.u.net->netif = skb->skb_iif;
4958 	ad.u.net->family = family;
4959 	err = selinux_parse_skb(skb, &ad, &addrp, 1, NULL);
4960 	if (err)
4961 		return err;
4962 
4963 	if (selinux_secmark_enabled()) {
4964 		err = avc_has_perm(&selinux_state,
4965 				   sk_sid, skb->secmark, SECCLASS_PACKET,
4966 				   PACKET__RECV, &ad);
4967 		if (err)
4968 			return err;
4969 	}
4970 
4971 	err = selinux_netlbl_sock_rcv_skb(sksec, skb, family, &ad);
4972 	if (err)
4973 		return err;
4974 	err = selinux_xfrm_sock_rcv_skb(sksec->sid, skb, &ad);
4975 
4976 	return err;
4977 }
4978 
4979 static int selinux_socket_sock_rcv_skb(struct sock *sk, struct sk_buff *skb)
4980 {
4981 	int err;
4982 	struct sk_security_struct *sksec = sk->sk_security;
4983 	u16 family = sk->sk_family;
4984 	u32 sk_sid = sksec->sid;
4985 	struct common_audit_data ad;
4986 	struct lsm_network_audit net = {0,};
4987 	char *addrp;
4988 	u8 secmark_active;
4989 	u8 peerlbl_active;
4990 
4991 	if (family != PF_INET && family != PF_INET6)
4992 		return 0;
4993 
4994 	/* Handle mapped IPv4 packets arriving via IPv6 sockets */
4995 	if (family == PF_INET6 && skb->protocol == htons(ETH_P_IP))
4996 		family = PF_INET;
4997 
4998 	/* If any sort of compatibility mode is enabled then handoff processing
4999 	 * to the selinux_sock_rcv_skb_compat() function to deal with the
5000 	 * special handling.  We do this in an attempt to keep this function
5001 	 * as fast and as clean as possible. */
5002 	if (!selinux_policycap_netpeer())
5003 		return selinux_sock_rcv_skb_compat(sk, skb, family);
5004 
5005 	secmark_active = selinux_secmark_enabled();
5006 	peerlbl_active = selinux_peerlbl_enabled();
5007 	if (!secmark_active && !peerlbl_active)
5008 		return 0;
5009 
5010 	ad.type = LSM_AUDIT_DATA_NET;
5011 	ad.u.net = &net;
5012 	ad.u.net->netif = skb->skb_iif;
5013 	ad.u.net->family = family;
5014 	err = selinux_parse_skb(skb, &ad, &addrp, 1, NULL);
5015 	if (err)
5016 		return err;
5017 
5018 	if (peerlbl_active) {
5019 		u32 peer_sid;
5020 
5021 		err = selinux_skb_peerlbl_sid(skb, family, &peer_sid);
5022 		if (err)
5023 			return err;
5024 		err = selinux_inet_sys_rcv_skb(sock_net(sk), skb->skb_iif,
5025 					       addrp, family, peer_sid, &ad);
5026 		if (err) {
5027 			selinux_netlbl_err(skb, family, err, 0);
5028 			return err;
5029 		}
5030 		err = avc_has_perm(&selinux_state,
5031 				   sk_sid, peer_sid, SECCLASS_PEER,
5032 				   PEER__RECV, &ad);
5033 		if (err) {
5034 			selinux_netlbl_err(skb, family, err, 0);
5035 			return err;
5036 		}
5037 	}
5038 
5039 	if (secmark_active) {
5040 		err = avc_has_perm(&selinux_state,
5041 				   sk_sid, skb->secmark, SECCLASS_PACKET,
5042 				   PACKET__RECV, &ad);
5043 		if (err)
5044 			return err;
5045 	}
5046 
5047 	return err;
5048 }
5049 
5050 static int selinux_socket_getpeersec_stream(struct socket *sock, char __user *optval,
5051 					    int __user *optlen, unsigned len)
5052 {
5053 	int err = 0;
5054 	char *scontext;
5055 	u32 scontext_len;
5056 	struct sk_security_struct *sksec = sock->sk->sk_security;
5057 	u32 peer_sid = SECSID_NULL;
5058 
5059 	if (sksec->sclass == SECCLASS_UNIX_STREAM_SOCKET ||
5060 	    sksec->sclass == SECCLASS_TCP_SOCKET ||
5061 	    sksec->sclass == SECCLASS_SCTP_SOCKET)
5062 		peer_sid = sksec->peer_sid;
5063 	if (peer_sid == SECSID_NULL)
5064 		return -ENOPROTOOPT;
5065 
5066 	err = security_sid_to_context(&selinux_state, peer_sid, &scontext,
5067 				      &scontext_len);
5068 	if (err)
5069 		return err;
5070 
5071 	if (scontext_len > len) {
5072 		err = -ERANGE;
5073 		goto out_len;
5074 	}
5075 
5076 	if (copy_to_user(optval, scontext, scontext_len))
5077 		err = -EFAULT;
5078 
5079 out_len:
5080 	if (put_user(scontext_len, optlen))
5081 		err = -EFAULT;
5082 	kfree(scontext);
5083 	return err;
5084 }
5085 
5086 static int selinux_socket_getpeersec_dgram(struct socket *sock, struct sk_buff *skb, u32 *secid)
5087 {
5088 	u32 peer_secid = SECSID_NULL;
5089 	u16 family;
5090 	struct inode_security_struct *isec;
5091 
5092 	if (skb && skb->protocol == htons(ETH_P_IP))
5093 		family = PF_INET;
5094 	else if (skb && skb->protocol == htons(ETH_P_IPV6))
5095 		family = PF_INET6;
5096 	else if (sock)
5097 		family = sock->sk->sk_family;
5098 	else
5099 		goto out;
5100 
5101 	if (sock && family == PF_UNIX) {
5102 		isec = inode_security_novalidate(SOCK_INODE(sock));
5103 		peer_secid = isec->sid;
5104 	} else if (skb)
5105 		selinux_skb_peerlbl_sid(skb, family, &peer_secid);
5106 
5107 out:
5108 	*secid = peer_secid;
5109 	if (peer_secid == SECSID_NULL)
5110 		return -EINVAL;
5111 	return 0;
5112 }
5113 
5114 static int selinux_sk_alloc_security(struct sock *sk, int family, gfp_t priority)
5115 {
5116 	struct sk_security_struct *sksec;
5117 
5118 	sksec = kzalloc(sizeof(*sksec), priority);
5119 	if (!sksec)
5120 		return -ENOMEM;
5121 
5122 	sksec->peer_sid = SECINITSID_UNLABELED;
5123 	sksec->sid = SECINITSID_UNLABELED;
5124 	sksec->sclass = SECCLASS_SOCKET;
5125 	selinux_netlbl_sk_security_reset(sksec);
5126 	sk->sk_security = sksec;
5127 
5128 	return 0;
5129 }
5130 
5131 static void selinux_sk_free_security(struct sock *sk)
5132 {
5133 	struct sk_security_struct *sksec = sk->sk_security;
5134 
5135 	sk->sk_security = NULL;
5136 	selinux_netlbl_sk_security_free(sksec);
5137 	kfree(sksec);
5138 }
5139 
5140 static void selinux_sk_clone_security(const struct sock *sk, struct sock *newsk)
5141 {
5142 	struct sk_security_struct *sksec = sk->sk_security;
5143 	struct sk_security_struct *newsksec = newsk->sk_security;
5144 
5145 	newsksec->sid = sksec->sid;
5146 	newsksec->peer_sid = sksec->peer_sid;
5147 	newsksec->sclass = sksec->sclass;
5148 
5149 	selinux_netlbl_sk_security_reset(newsksec);
5150 }
5151 
5152 static void selinux_sk_getsecid(struct sock *sk, u32 *secid)
5153 {
5154 	if (!sk)
5155 		*secid = SECINITSID_ANY_SOCKET;
5156 	else {
5157 		struct sk_security_struct *sksec = sk->sk_security;
5158 
5159 		*secid = sksec->sid;
5160 	}
5161 }
5162 
5163 static void selinux_sock_graft(struct sock *sk, struct socket *parent)
5164 {
5165 	struct inode_security_struct *isec =
5166 		inode_security_novalidate(SOCK_INODE(parent));
5167 	struct sk_security_struct *sksec = sk->sk_security;
5168 
5169 	if (sk->sk_family == PF_INET || sk->sk_family == PF_INET6 ||
5170 	    sk->sk_family == PF_UNIX)
5171 		isec->sid = sksec->sid;
5172 	sksec->sclass = isec->sclass;
5173 }
5174 
5175 /* Called whenever SCTP receives an INIT chunk. This happens when an incoming
5176  * connect(2), sctp_connectx(3) or sctp_sendmsg(3) (with no association
5177  * already present).
5178  */
5179 static int selinux_sctp_assoc_request(struct sctp_endpoint *ep,
5180 				      struct sk_buff *skb)
5181 {
5182 	struct sk_security_struct *sksec = ep->base.sk->sk_security;
5183 	struct common_audit_data ad;
5184 	struct lsm_network_audit net = {0,};
5185 	u8 peerlbl_active;
5186 	u32 peer_sid = SECINITSID_UNLABELED;
5187 	u32 conn_sid;
5188 	int err = 0;
5189 
5190 	if (!selinux_policycap_extsockclass())
5191 		return 0;
5192 
5193 	peerlbl_active = selinux_peerlbl_enabled();
5194 
5195 	if (peerlbl_active) {
5196 		/* This will return peer_sid = SECSID_NULL if there are
5197 		 * no peer labels, see security_net_peersid_resolve().
5198 		 */
5199 		err = selinux_skb_peerlbl_sid(skb, ep->base.sk->sk_family,
5200 					      &peer_sid);
5201 		if (err)
5202 			return err;
5203 
5204 		if (peer_sid == SECSID_NULL)
5205 			peer_sid = SECINITSID_UNLABELED;
5206 	}
5207 
5208 	if (sksec->sctp_assoc_state == SCTP_ASSOC_UNSET) {
5209 		sksec->sctp_assoc_state = SCTP_ASSOC_SET;
5210 
5211 		/* Here as first association on socket. As the peer SID
5212 		 * was allowed by peer recv (and the netif/node checks),
5213 		 * then it is approved by policy and used as the primary
5214 		 * peer SID for getpeercon(3).
5215 		 */
5216 		sksec->peer_sid = peer_sid;
5217 	} else if  (sksec->peer_sid != peer_sid) {
5218 		/* Other association peer SIDs are checked to enforce
5219 		 * consistency among the peer SIDs.
5220 		 */
5221 		ad.type = LSM_AUDIT_DATA_NET;
5222 		ad.u.net = &net;
5223 		ad.u.net->sk = ep->base.sk;
5224 		err = avc_has_perm(&selinux_state,
5225 				   sksec->peer_sid, peer_sid, sksec->sclass,
5226 				   SCTP_SOCKET__ASSOCIATION, &ad);
5227 		if (err)
5228 			return err;
5229 	}
5230 
5231 	/* Compute the MLS component for the connection and store
5232 	 * the information in ep. This will be used by SCTP TCP type
5233 	 * sockets and peeled off connections as they cause a new
5234 	 * socket to be generated. selinux_sctp_sk_clone() will then
5235 	 * plug this into the new socket.
5236 	 */
5237 	err = selinux_conn_sid(sksec->sid, peer_sid, &conn_sid);
5238 	if (err)
5239 		return err;
5240 
5241 	ep->secid = conn_sid;
5242 	ep->peer_secid = peer_sid;
5243 
5244 	/* Set any NetLabel labels including CIPSO/CALIPSO options. */
5245 	return selinux_netlbl_sctp_assoc_request(ep, skb);
5246 }
5247 
5248 /* Check if sctp IPv4/IPv6 addresses are valid for binding or connecting
5249  * based on their @optname.
5250  */
5251 static int selinux_sctp_bind_connect(struct sock *sk, int optname,
5252 				     struct sockaddr *address,
5253 				     int addrlen)
5254 {
5255 	int len, err = 0, walk_size = 0;
5256 	void *addr_buf;
5257 	struct sockaddr *addr;
5258 	struct socket *sock;
5259 
5260 	if (!selinux_policycap_extsockclass())
5261 		return 0;
5262 
5263 	/* Process one or more addresses that may be IPv4 or IPv6 */
5264 	sock = sk->sk_socket;
5265 	addr_buf = address;
5266 
5267 	while (walk_size < addrlen) {
5268 		addr = addr_buf;
5269 		switch (addr->sa_family) {
5270 		case AF_INET:
5271 			len = sizeof(struct sockaddr_in);
5272 			break;
5273 		case AF_INET6:
5274 			len = sizeof(struct sockaddr_in6);
5275 			break;
5276 		default:
5277 			return -EAFNOSUPPORT;
5278 		}
5279 
5280 		err = -EINVAL;
5281 		switch (optname) {
5282 		/* Bind checks */
5283 		case SCTP_PRIMARY_ADDR:
5284 		case SCTP_SET_PEER_PRIMARY_ADDR:
5285 		case SCTP_SOCKOPT_BINDX_ADD:
5286 			err = selinux_socket_bind(sock, addr, len);
5287 			break;
5288 		/* Connect checks */
5289 		case SCTP_SOCKOPT_CONNECTX:
5290 		case SCTP_PARAM_SET_PRIMARY:
5291 		case SCTP_PARAM_ADD_IP:
5292 		case SCTP_SENDMSG_CONNECT:
5293 			err = selinux_socket_connect_helper(sock, addr, len);
5294 			if (err)
5295 				return err;
5296 
5297 			/* As selinux_sctp_bind_connect() is called by the
5298 			 * SCTP protocol layer, the socket is already locked,
5299 			 * therefore selinux_netlbl_socket_connect_locked() is
5300 			 * is called here. The situations handled are:
5301 			 * sctp_connectx(3), sctp_sendmsg(3), sendmsg(2),
5302 			 * whenever a new IP address is added or when a new
5303 			 * primary address is selected.
5304 			 * Note that an SCTP connect(2) call happens before
5305 			 * the SCTP protocol layer and is handled via
5306 			 * selinux_socket_connect().
5307 			 */
5308 			err = selinux_netlbl_socket_connect_locked(sk, addr);
5309 			break;
5310 		}
5311 
5312 		if (err)
5313 			return err;
5314 
5315 		addr_buf += len;
5316 		walk_size += len;
5317 	}
5318 
5319 	return 0;
5320 }
5321 
5322 /* Called whenever a new socket is created by accept(2) or sctp_peeloff(3). */
5323 static void selinux_sctp_sk_clone(struct sctp_endpoint *ep, struct sock *sk,
5324 				  struct sock *newsk)
5325 {
5326 	struct sk_security_struct *sksec = sk->sk_security;
5327 	struct sk_security_struct *newsksec = newsk->sk_security;
5328 
5329 	/* If policy does not support SECCLASS_SCTP_SOCKET then call
5330 	 * the non-sctp clone version.
5331 	 */
5332 	if (!selinux_policycap_extsockclass())
5333 		return selinux_sk_clone_security(sk, newsk);
5334 
5335 	newsksec->sid = ep->secid;
5336 	newsksec->peer_sid = ep->peer_secid;
5337 	newsksec->sclass = sksec->sclass;
5338 	selinux_netlbl_sctp_sk_clone(sk, newsk);
5339 }
5340 
5341 static int selinux_inet_conn_request(struct sock *sk, struct sk_buff *skb,
5342 				     struct request_sock *req)
5343 {
5344 	struct sk_security_struct *sksec = sk->sk_security;
5345 	int err;
5346 	u16 family = req->rsk_ops->family;
5347 	u32 connsid;
5348 	u32 peersid;
5349 
5350 	err = selinux_skb_peerlbl_sid(skb, family, &peersid);
5351 	if (err)
5352 		return err;
5353 	err = selinux_conn_sid(sksec->sid, peersid, &connsid);
5354 	if (err)
5355 		return err;
5356 	req->secid = connsid;
5357 	req->peer_secid = peersid;
5358 
5359 	return selinux_netlbl_inet_conn_request(req, family);
5360 }
5361 
5362 static void selinux_inet_csk_clone(struct sock *newsk,
5363 				   const struct request_sock *req)
5364 {
5365 	struct sk_security_struct *newsksec = newsk->sk_security;
5366 
5367 	newsksec->sid = req->secid;
5368 	newsksec->peer_sid = req->peer_secid;
5369 	/* NOTE: Ideally, we should also get the isec->sid for the
5370 	   new socket in sync, but we don't have the isec available yet.
5371 	   So we will wait until sock_graft to do it, by which
5372 	   time it will have been created and available. */
5373 
5374 	/* We don't need to take any sort of lock here as we are the only
5375 	 * thread with access to newsksec */
5376 	selinux_netlbl_inet_csk_clone(newsk, req->rsk_ops->family);
5377 }
5378 
5379 static void selinux_inet_conn_established(struct sock *sk, struct sk_buff *skb)
5380 {
5381 	u16 family = sk->sk_family;
5382 	struct sk_security_struct *sksec = sk->sk_security;
5383 
5384 	/* handle mapped IPv4 packets arriving via IPv6 sockets */
5385 	if (family == PF_INET6 && skb->protocol == htons(ETH_P_IP))
5386 		family = PF_INET;
5387 
5388 	selinux_skb_peerlbl_sid(skb, family, &sksec->peer_sid);
5389 }
5390 
5391 static int selinux_secmark_relabel_packet(u32 sid)
5392 {
5393 	const struct task_security_struct *__tsec;
5394 	u32 tsid;
5395 
5396 	__tsec = current_security();
5397 	tsid = __tsec->sid;
5398 
5399 	return avc_has_perm(&selinux_state,
5400 			    tsid, sid, SECCLASS_PACKET, PACKET__RELABELTO,
5401 			    NULL);
5402 }
5403 
5404 static void selinux_secmark_refcount_inc(void)
5405 {
5406 	atomic_inc(&selinux_secmark_refcount);
5407 }
5408 
5409 static void selinux_secmark_refcount_dec(void)
5410 {
5411 	atomic_dec(&selinux_secmark_refcount);
5412 }
5413 
5414 static void selinux_req_classify_flow(const struct request_sock *req,
5415 				      struct flowi *fl)
5416 {
5417 	fl->flowi_secid = req->secid;
5418 }
5419 
5420 static int selinux_tun_dev_alloc_security(void **security)
5421 {
5422 	struct tun_security_struct *tunsec;
5423 
5424 	tunsec = kzalloc(sizeof(*tunsec), GFP_KERNEL);
5425 	if (!tunsec)
5426 		return -ENOMEM;
5427 	tunsec->sid = current_sid();
5428 
5429 	*security = tunsec;
5430 	return 0;
5431 }
5432 
5433 static void selinux_tun_dev_free_security(void *security)
5434 {
5435 	kfree(security);
5436 }
5437 
5438 static int selinux_tun_dev_create(void)
5439 {
5440 	u32 sid = current_sid();
5441 
5442 	/* we aren't taking into account the "sockcreate" SID since the socket
5443 	 * that is being created here is not a socket in the traditional sense,
5444 	 * instead it is a private sock, accessible only to the kernel, and
5445 	 * representing a wide range of network traffic spanning multiple
5446 	 * connections unlike traditional sockets - check the TUN driver to
5447 	 * get a better understanding of why this socket is special */
5448 
5449 	return avc_has_perm(&selinux_state,
5450 			    sid, sid, SECCLASS_TUN_SOCKET, TUN_SOCKET__CREATE,
5451 			    NULL);
5452 }
5453 
5454 static int selinux_tun_dev_attach_queue(void *security)
5455 {
5456 	struct tun_security_struct *tunsec = security;
5457 
5458 	return avc_has_perm(&selinux_state,
5459 			    current_sid(), tunsec->sid, SECCLASS_TUN_SOCKET,
5460 			    TUN_SOCKET__ATTACH_QUEUE, NULL);
5461 }
5462 
5463 static int selinux_tun_dev_attach(struct sock *sk, void *security)
5464 {
5465 	struct tun_security_struct *tunsec = security;
5466 	struct sk_security_struct *sksec = sk->sk_security;
5467 
5468 	/* we don't currently perform any NetLabel based labeling here and it
5469 	 * isn't clear that we would want to do so anyway; while we could apply
5470 	 * labeling without the support of the TUN user the resulting labeled
5471 	 * traffic from the other end of the connection would almost certainly
5472 	 * cause confusion to the TUN user that had no idea network labeling
5473 	 * protocols were being used */
5474 
5475 	sksec->sid = tunsec->sid;
5476 	sksec->sclass = SECCLASS_TUN_SOCKET;
5477 
5478 	return 0;
5479 }
5480 
5481 static int selinux_tun_dev_open(void *security)
5482 {
5483 	struct tun_security_struct *tunsec = security;
5484 	u32 sid = current_sid();
5485 	int err;
5486 
5487 	err = avc_has_perm(&selinux_state,
5488 			   sid, tunsec->sid, SECCLASS_TUN_SOCKET,
5489 			   TUN_SOCKET__RELABELFROM, NULL);
5490 	if (err)
5491 		return err;
5492 	err = avc_has_perm(&selinux_state,
5493 			   sid, sid, SECCLASS_TUN_SOCKET,
5494 			   TUN_SOCKET__RELABELTO, NULL);
5495 	if (err)
5496 		return err;
5497 	tunsec->sid = sid;
5498 
5499 	return 0;
5500 }
5501 
5502 static int selinux_nlmsg_perm(struct sock *sk, struct sk_buff *skb)
5503 {
5504 	int err = 0;
5505 	u32 perm;
5506 	struct nlmsghdr *nlh;
5507 	struct sk_security_struct *sksec = sk->sk_security;
5508 
5509 	if (skb->len < NLMSG_HDRLEN) {
5510 		err = -EINVAL;
5511 		goto out;
5512 	}
5513 	nlh = nlmsg_hdr(skb);
5514 
5515 	err = selinux_nlmsg_lookup(sksec->sclass, nlh->nlmsg_type, &perm);
5516 	if (err) {
5517 		if (err == -EINVAL) {
5518 			pr_warn_ratelimited("SELinux: unrecognized netlink"
5519 			       " message: protocol=%hu nlmsg_type=%hu sclass=%s"
5520 			       " pig=%d comm=%s\n",
5521 			       sk->sk_protocol, nlh->nlmsg_type,
5522 			       secclass_map[sksec->sclass - 1].name,
5523 			       task_pid_nr(current), current->comm);
5524 			if (!enforcing_enabled(&selinux_state) ||
5525 			    security_get_allow_unknown(&selinux_state))
5526 				err = 0;
5527 		}
5528 
5529 		/* Ignore */
5530 		if (err == -ENOENT)
5531 			err = 0;
5532 		goto out;
5533 	}
5534 
5535 	err = sock_has_perm(sk, perm);
5536 out:
5537 	return err;
5538 }
5539 
5540 #ifdef CONFIG_NETFILTER
5541 
5542 static unsigned int selinux_ip_forward(struct sk_buff *skb,
5543 				       const struct net_device *indev,
5544 				       u16 family)
5545 {
5546 	int err;
5547 	char *addrp;
5548 	u32 peer_sid;
5549 	struct common_audit_data ad;
5550 	struct lsm_network_audit net = {0,};
5551 	u8 secmark_active;
5552 	u8 netlbl_active;
5553 	u8 peerlbl_active;
5554 
5555 	if (!selinux_policycap_netpeer())
5556 		return NF_ACCEPT;
5557 
5558 	secmark_active = selinux_secmark_enabled();
5559 	netlbl_active = netlbl_enabled();
5560 	peerlbl_active = selinux_peerlbl_enabled();
5561 	if (!secmark_active && !peerlbl_active)
5562 		return NF_ACCEPT;
5563 
5564 	if (selinux_skb_peerlbl_sid(skb, family, &peer_sid) != 0)
5565 		return NF_DROP;
5566 
5567 	ad.type = LSM_AUDIT_DATA_NET;
5568 	ad.u.net = &net;
5569 	ad.u.net->netif = indev->ifindex;
5570 	ad.u.net->family = family;
5571 	if (selinux_parse_skb(skb, &ad, &addrp, 1, NULL) != 0)
5572 		return NF_DROP;
5573 
5574 	if (peerlbl_active) {
5575 		err = selinux_inet_sys_rcv_skb(dev_net(indev), indev->ifindex,
5576 					       addrp, family, peer_sid, &ad);
5577 		if (err) {
5578 			selinux_netlbl_err(skb, family, err, 1);
5579 			return NF_DROP;
5580 		}
5581 	}
5582 
5583 	if (secmark_active)
5584 		if (avc_has_perm(&selinux_state,
5585 				 peer_sid, skb->secmark,
5586 				 SECCLASS_PACKET, PACKET__FORWARD_IN, &ad))
5587 			return NF_DROP;
5588 
5589 	if (netlbl_active)
5590 		/* we do this in the FORWARD path and not the POST_ROUTING
5591 		 * path because we want to make sure we apply the necessary
5592 		 * labeling before IPsec is applied so we can leverage AH
5593 		 * protection */
5594 		if (selinux_netlbl_skbuff_setsid(skb, family, peer_sid) != 0)
5595 			return NF_DROP;
5596 
5597 	return NF_ACCEPT;
5598 }
5599 
5600 static unsigned int selinux_ipv4_forward(void *priv,
5601 					 struct sk_buff *skb,
5602 					 const struct nf_hook_state *state)
5603 {
5604 	return selinux_ip_forward(skb, state->in, PF_INET);
5605 }
5606 
5607 #if IS_ENABLED(CONFIG_IPV6)
5608 static unsigned int selinux_ipv6_forward(void *priv,
5609 					 struct sk_buff *skb,
5610 					 const struct nf_hook_state *state)
5611 {
5612 	return selinux_ip_forward(skb, state->in, PF_INET6);
5613 }
5614 #endif	/* IPV6 */
5615 
5616 static unsigned int selinux_ip_output(struct sk_buff *skb,
5617 				      u16 family)
5618 {
5619 	struct sock *sk;
5620 	u32 sid;
5621 
5622 	if (!netlbl_enabled())
5623 		return NF_ACCEPT;
5624 
5625 	/* we do this in the LOCAL_OUT path and not the POST_ROUTING path
5626 	 * because we want to make sure we apply the necessary labeling
5627 	 * before IPsec is applied so we can leverage AH protection */
5628 	sk = skb->sk;
5629 	if (sk) {
5630 		struct sk_security_struct *sksec;
5631 
5632 		if (sk_listener(sk))
5633 			/* if the socket is the listening state then this
5634 			 * packet is a SYN-ACK packet which means it needs to
5635 			 * be labeled based on the connection/request_sock and
5636 			 * not the parent socket.  unfortunately, we can't
5637 			 * lookup the request_sock yet as it isn't queued on
5638 			 * the parent socket until after the SYN-ACK is sent.
5639 			 * the "solution" is to simply pass the packet as-is
5640 			 * as any IP option based labeling should be copied
5641 			 * from the initial connection request (in the IP
5642 			 * layer).  it is far from ideal, but until we get a
5643 			 * security label in the packet itself this is the
5644 			 * best we can do. */
5645 			return NF_ACCEPT;
5646 
5647 		/* standard practice, label using the parent socket */
5648 		sksec = sk->sk_security;
5649 		sid = sksec->sid;
5650 	} else
5651 		sid = SECINITSID_KERNEL;
5652 	if (selinux_netlbl_skbuff_setsid(skb, family, sid) != 0)
5653 		return NF_DROP;
5654 
5655 	return NF_ACCEPT;
5656 }
5657 
5658 static unsigned int selinux_ipv4_output(void *priv,
5659 					struct sk_buff *skb,
5660 					const struct nf_hook_state *state)
5661 {
5662 	return selinux_ip_output(skb, PF_INET);
5663 }
5664 
5665 #if IS_ENABLED(CONFIG_IPV6)
5666 static unsigned int selinux_ipv6_output(void *priv,
5667 					struct sk_buff *skb,
5668 					const struct nf_hook_state *state)
5669 {
5670 	return selinux_ip_output(skb, PF_INET6);
5671 }
5672 #endif	/* IPV6 */
5673 
5674 static unsigned int selinux_ip_postroute_compat(struct sk_buff *skb,
5675 						int ifindex,
5676 						u16 family)
5677 {
5678 	struct sock *sk = skb_to_full_sk(skb);
5679 	struct sk_security_struct *sksec;
5680 	struct common_audit_data ad;
5681 	struct lsm_network_audit net = {0,};
5682 	char *addrp;
5683 	u8 proto;
5684 
5685 	if (sk == NULL)
5686 		return NF_ACCEPT;
5687 	sksec = sk->sk_security;
5688 
5689 	ad.type = LSM_AUDIT_DATA_NET;
5690 	ad.u.net = &net;
5691 	ad.u.net->netif = ifindex;
5692 	ad.u.net->family = family;
5693 	if (selinux_parse_skb(skb, &ad, &addrp, 0, &proto))
5694 		return NF_DROP;
5695 
5696 	if (selinux_secmark_enabled())
5697 		if (avc_has_perm(&selinux_state,
5698 				 sksec->sid, skb->secmark,
5699 				 SECCLASS_PACKET, PACKET__SEND, &ad))
5700 			return NF_DROP_ERR(-ECONNREFUSED);
5701 
5702 	if (selinux_xfrm_postroute_last(sksec->sid, skb, &ad, proto))
5703 		return NF_DROP_ERR(-ECONNREFUSED);
5704 
5705 	return NF_ACCEPT;
5706 }
5707 
5708 static unsigned int selinux_ip_postroute(struct sk_buff *skb,
5709 					 const struct net_device *outdev,
5710 					 u16 family)
5711 {
5712 	u32 secmark_perm;
5713 	u32 peer_sid;
5714 	int ifindex = outdev->ifindex;
5715 	struct sock *sk;
5716 	struct common_audit_data ad;
5717 	struct lsm_network_audit net = {0,};
5718 	char *addrp;
5719 	u8 secmark_active;
5720 	u8 peerlbl_active;
5721 
5722 	/* If any sort of compatibility mode is enabled then handoff processing
5723 	 * to the selinux_ip_postroute_compat() function to deal with the
5724 	 * special handling.  We do this in an attempt to keep this function
5725 	 * as fast and as clean as possible. */
5726 	if (!selinux_policycap_netpeer())
5727 		return selinux_ip_postroute_compat(skb, ifindex, family);
5728 
5729 	secmark_active = selinux_secmark_enabled();
5730 	peerlbl_active = selinux_peerlbl_enabled();
5731 	if (!secmark_active && !peerlbl_active)
5732 		return NF_ACCEPT;
5733 
5734 	sk = skb_to_full_sk(skb);
5735 
5736 #ifdef CONFIG_XFRM
5737 	/* If skb->dst->xfrm is non-NULL then the packet is undergoing an IPsec
5738 	 * packet transformation so allow the packet to pass without any checks
5739 	 * since we'll have another chance to perform access control checks
5740 	 * when the packet is on it's final way out.
5741 	 * NOTE: there appear to be some IPv6 multicast cases where skb->dst
5742 	 *       is NULL, in this case go ahead and apply access control.
5743 	 * NOTE: if this is a local socket (skb->sk != NULL) that is in the
5744 	 *       TCP listening state we cannot wait until the XFRM processing
5745 	 *       is done as we will miss out on the SA label if we do;
5746 	 *       unfortunately, this means more work, but it is only once per
5747 	 *       connection. */
5748 	if (skb_dst(skb) != NULL && skb_dst(skb)->xfrm != NULL &&
5749 	    !(sk && sk_listener(sk)))
5750 		return NF_ACCEPT;
5751 #endif
5752 
5753 	if (sk == NULL) {
5754 		/* Without an associated socket the packet is either coming
5755 		 * from the kernel or it is being forwarded; check the packet
5756 		 * to determine which and if the packet is being forwarded
5757 		 * query the packet directly to determine the security label. */
5758 		if (skb->skb_iif) {
5759 			secmark_perm = PACKET__FORWARD_OUT;
5760 			if (selinux_skb_peerlbl_sid(skb, family, &peer_sid))
5761 				return NF_DROP;
5762 		} else {
5763 			secmark_perm = PACKET__SEND;
5764 			peer_sid = SECINITSID_KERNEL;
5765 		}
5766 	} else if (sk_listener(sk)) {
5767 		/* Locally generated packet but the associated socket is in the
5768 		 * listening state which means this is a SYN-ACK packet.  In
5769 		 * this particular case the correct security label is assigned
5770 		 * to the connection/request_sock but unfortunately we can't
5771 		 * query the request_sock as it isn't queued on the parent
5772 		 * socket until after the SYN-ACK packet is sent; the only
5773 		 * viable choice is to regenerate the label like we do in
5774 		 * selinux_inet_conn_request().  See also selinux_ip_output()
5775 		 * for similar problems. */
5776 		u32 skb_sid;
5777 		struct sk_security_struct *sksec;
5778 
5779 		sksec = sk->sk_security;
5780 		if (selinux_skb_peerlbl_sid(skb, family, &skb_sid))
5781 			return NF_DROP;
5782 		/* At this point, if the returned skb peerlbl is SECSID_NULL
5783 		 * and the packet has been through at least one XFRM
5784 		 * transformation then we must be dealing with the "final"
5785 		 * form of labeled IPsec packet; since we've already applied
5786 		 * all of our access controls on this packet we can safely
5787 		 * pass the packet. */
5788 		if (skb_sid == SECSID_NULL) {
5789 			switch (family) {
5790 			case PF_INET:
5791 				if (IPCB(skb)->flags & IPSKB_XFRM_TRANSFORMED)
5792 					return NF_ACCEPT;
5793 				break;
5794 			case PF_INET6:
5795 				if (IP6CB(skb)->flags & IP6SKB_XFRM_TRANSFORMED)
5796 					return NF_ACCEPT;
5797 				break;
5798 			default:
5799 				return NF_DROP_ERR(-ECONNREFUSED);
5800 			}
5801 		}
5802 		if (selinux_conn_sid(sksec->sid, skb_sid, &peer_sid))
5803 			return NF_DROP;
5804 		secmark_perm = PACKET__SEND;
5805 	} else {
5806 		/* Locally generated packet, fetch the security label from the
5807 		 * associated socket. */
5808 		struct sk_security_struct *sksec = sk->sk_security;
5809 		peer_sid = sksec->sid;
5810 		secmark_perm = PACKET__SEND;
5811 	}
5812 
5813 	ad.type = LSM_AUDIT_DATA_NET;
5814 	ad.u.net = &net;
5815 	ad.u.net->netif = ifindex;
5816 	ad.u.net->family = family;
5817 	if (selinux_parse_skb(skb, &ad, &addrp, 0, NULL))
5818 		return NF_DROP;
5819 
5820 	if (secmark_active)
5821 		if (avc_has_perm(&selinux_state,
5822 				 peer_sid, skb->secmark,
5823 				 SECCLASS_PACKET, secmark_perm, &ad))
5824 			return NF_DROP_ERR(-ECONNREFUSED);
5825 
5826 	if (peerlbl_active) {
5827 		u32 if_sid;
5828 		u32 node_sid;
5829 
5830 		if (sel_netif_sid(dev_net(outdev), ifindex, &if_sid))
5831 			return NF_DROP;
5832 		if (avc_has_perm(&selinux_state,
5833 				 peer_sid, if_sid,
5834 				 SECCLASS_NETIF, NETIF__EGRESS, &ad))
5835 			return NF_DROP_ERR(-ECONNREFUSED);
5836 
5837 		if (sel_netnode_sid(addrp, family, &node_sid))
5838 			return NF_DROP;
5839 		if (avc_has_perm(&selinux_state,
5840 				 peer_sid, node_sid,
5841 				 SECCLASS_NODE, NODE__SENDTO, &ad))
5842 			return NF_DROP_ERR(-ECONNREFUSED);
5843 	}
5844 
5845 	return NF_ACCEPT;
5846 }
5847 
5848 static unsigned int selinux_ipv4_postroute(void *priv,
5849 					   struct sk_buff *skb,
5850 					   const struct nf_hook_state *state)
5851 {
5852 	return selinux_ip_postroute(skb, state->out, PF_INET);
5853 }
5854 
5855 #if IS_ENABLED(CONFIG_IPV6)
5856 static unsigned int selinux_ipv6_postroute(void *priv,
5857 					   struct sk_buff *skb,
5858 					   const struct nf_hook_state *state)
5859 {
5860 	return selinux_ip_postroute(skb, state->out, PF_INET6);
5861 }
5862 #endif	/* IPV6 */
5863 
5864 #endif	/* CONFIG_NETFILTER */
5865 
5866 static int selinux_netlink_send(struct sock *sk, struct sk_buff *skb)
5867 {
5868 	return selinux_nlmsg_perm(sk, skb);
5869 }
5870 
5871 static int ipc_alloc_security(struct kern_ipc_perm *perm,
5872 			      u16 sclass)
5873 {
5874 	struct ipc_security_struct *isec;
5875 
5876 	isec = kzalloc(sizeof(struct ipc_security_struct), GFP_KERNEL);
5877 	if (!isec)
5878 		return -ENOMEM;
5879 
5880 	isec->sclass = sclass;
5881 	isec->sid = current_sid();
5882 	perm->security = isec;
5883 
5884 	return 0;
5885 }
5886 
5887 static void ipc_free_security(struct kern_ipc_perm *perm)
5888 {
5889 	struct ipc_security_struct *isec = perm->security;
5890 	perm->security = NULL;
5891 	kfree(isec);
5892 }
5893 
5894 static int msg_msg_alloc_security(struct msg_msg *msg)
5895 {
5896 	struct msg_security_struct *msec;
5897 
5898 	msec = kzalloc(sizeof(struct msg_security_struct), GFP_KERNEL);
5899 	if (!msec)
5900 		return -ENOMEM;
5901 
5902 	msec->sid = SECINITSID_UNLABELED;
5903 	msg->security = msec;
5904 
5905 	return 0;
5906 }
5907 
5908 static void msg_msg_free_security(struct msg_msg *msg)
5909 {
5910 	struct msg_security_struct *msec = msg->security;
5911 
5912 	msg->security = NULL;
5913 	kfree(msec);
5914 }
5915 
5916 static int ipc_has_perm(struct kern_ipc_perm *ipc_perms,
5917 			u32 perms)
5918 {
5919 	struct ipc_security_struct *isec;
5920 	struct common_audit_data ad;
5921 	u32 sid = current_sid();
5922 
5923 	isec = ipc_perms->security;
5924 
5925 	ad.type = LSM_AUDIT_DATA_IPC;
5926 	ad.u.ipc_id = ipc_perms->key;
5927 
5928 	return avc_has_perm(&selinux_state,
5929 			    sid, isec->sid, isec->sclass, perms, &ad);
5930 }
5931 
5932 static int selinux_msg_msg_alloc_security(struct msg_msg *msg)
5933 {
5934 	return msg_msg_alloc_security(msg);
5935 }
5936 
5937 static void selinux_msg_msg_free_security(struct msg_msg *msg)
5938 {
5939 	msg_msg_free_security(msg);
5940 }
5941 
5942 /* message queue security operations */
5943 static int selinux_msg_queue_alloc_security(struct kern_ipc_perm *msq)
5944 {
5945 	struct ipc_security_struct *isec;
5946 	struct common_audit_data ad;
5947 	u32 sid = current_sid();
5948 	int rc;
5949 
5950 	rc = ipc_alloc_security(msq, SECCLASS_MSGQ);
5951 	if (rc)
5952 		return rc;
5953 
5954 	isec = msq->security;
5955 
5956 	ad.type = LSM_AUDIT_DATA_IPC;
5957 	ad.u.ipc_id = msq->key;
5958 
5959 	rc = avc_has_perm(&selinux_state,
5960 			  sid, isec->sid, SECCLASS_MSGQ,
5961 			  MSGQ__CREATE, &ad);
5962 	if (rc) {
5963 		ipc_free_security(msq);
5964 		return rc;
5965 	}
5966 	return 0;
5967 }
5968 
5969 static void selinux_msg_queue_free_security(struct kern_ipc_perm *msq)
5970 {
5971 	ipc_free_security(msq);
5972 }
5973 
5974 static int selinux_msg_queue_associate(struct kern_ipc_perm *msq, int msqflg)
5975 {
5976 	struct ipc_security_struct *isec;
5977 	struct common_audit_data ad;
5978 	u32 sid = current_sid();
5979 
5980 	isec = msq->security;
5981 
5982 	ad.type = LSM_AUDIT_DATA_IPC;
5983 	ad.u.ipc_id = msq->key;
5984 
5985 	return avc_has_perm(&selinux_state,
5986 			    sid, isec->sid, SECCLASS_MSGQ,
5987 			    MSGQ__ASSOCIATE, &ad);
5988 }
5989 
5990 static int selinux_msg_queue_msgctl(struct kern_ipc_perm *msq, int cmd)
5991 {
5992 	int err;
5993 	int perms;
5994 
5995 	switch (cmd) {
5996 	case IPC_INFO:
5997 	case MSG_INFO:
5998 		/* No specific object, just general system-wide information. */
5999 		return avc_has_perm(&selinux_state,
6000 				    current_sid(), SECINITSID_KERNEL,
6001 				    SECCLASS_SYSTEM, SYSTEM__IPC_INFO, NULL);
6002 	case IPC_STAT:
6003 	case MSG_STAT:
6004 		perms = MSGQ__GETATTR | MSGQ__ASSOCIATE;
6005 		break;
6006 	case IPC_SET:
6007 		perms = MSGQ__SETATTR;
6008 		break;
6009 	case IPC_RMID:
6010 		perms = MSGQ__DESTROY;
6011 		break;
6012 	default:
6013 		return 0;
6014 	}
6015 
6016 	err = ipc_has_perm(msq, perms);
6017 	return err;
6018 }
6019 
6020 static int selinux_msg_queue_msgsnd(struct kern_ipc_perm *msq, struct msg_msg *msg, int msqflg)
6021 {
6022 	struct ipc_security_struct *isec;
6023 	struct msg_security_struct *msec;
6024 	struct common_audit_data ad;
6025 	u32 sid = current_sid();
6026 	int rc;
6027 
6028 	isec = msq->security;
6029 	msec = msg->security;
6030 
6031 	/*
6032 	 * First time through, need to assign label to the message
6033 	 */
6034 	if (msec->sid == SECINITSID_UNLABELED) {
6035 		/*
6036 		 * Compute new sid based on current process and
6037 		 * message queue this message will be stored in
6038 		 */
6039 		rc = security_transition_sid(&selinux_state, sid, isec->sid,
6040 					     SECCLASS_MSG, NULL, &msec->sid);
6041 		if (rc)
6042 			return rc;
6043 	}
6044 
6045 	ad.type = LSM_AUDIT_DATA_IPC;
6046 	ad.u.ipc_id = msq->key;
6047 
6048 	/* Can this process write to the queue? */
6049 	rc = avc_has_perm(&selinux_state,
6050 			  sid, isec->sid, SECCLASS_MSGQ,
6051 			  MSGQ__WRITE, &ad);
6052 	if (!rc)
6053 		/* Can this process send the message */
6054 		rc = avc_has_perm(&selinux_state,
6055 				  sid, msec->sid, SECCLASS_MSG,
6056 				  MSG__SEND, &ad);
6057 	if (!rc)
6058 		/* Can the message be put in the queue? */
6059 		rc = avc_has_perm(&selinux_state,
6060 				  msec->sid, isec->sid, SECCLASS_MSGQ,
6061 				  MSGQ__ENQUEUE, &ad);
6062 
6063 	return rc;
6064 }
6065 
6066 static int selinux_msg_queue_msgrcv(struct kern_ipc_perm *msq, struct msg_msg *msg,
6067 				    struct task_struct *target,
6068 				    long type, int mode)
6069 {
6070 	struct ipc_security_struct *isec;
6071 	struct msg_security_struct *msec;
6072 	struct common_audit_data ad;
6073 	u32 sid = task_sid(target);
6074 	int rc;
6075 
6076 	isec = msq->security;
6077 	msec = msg->security;
6078 
6079 	ad.type = LSM_AUDIT_DATA_IPC;
6080 	ad.u.ipc_id = msq->key;
6081 
6082 	rc = avc_has_perm(&selinux_state,
6083 			  sid, isec->sid,
6084 			  SECCLASS_MSGQ, MSGQ__READ, &ad);
6085 	if (!rc)
6086 		rc = avc_has_perm(&selinux_state,
6087 				  sid, msec->sid,
6088 				  SECCLASS_MSG, MSG__RECEIVE, &ad);
6089 	return rc;
6090 }
6091 
6092 /* Shared Memory security operations */
6093 static int selinux_shm_alloc_security(struct kern_ipc_perm *shp)
6094 {
6095 	struct ipc_security_struct *isec;
6096 	struct common_audit_data ad;
6097 	u32 sid = current_sid();
6098 	int rc;
6099 
6100 	rc = ipc_alloc_security(shp, SECCLASS_SHM);
6101 	if (rc)
6102 		return rc;
6103 
6104 	isec = shp->security;
6105 
6106 	ad.type = LSM_AUDIT_DATA_IPC;
6107 	ad.u.ipc_id = shp->key;
6108 
6109 	rc = avc_has_perm(&selinux_state,
6110 			  sid, isec->sid, SECCLASS_SHM,
6111 			  SHM__CREATE, &ad);
6112 	if (rc) {
6113 		ipc_free_security(shp);
6114 		return rc;
6115 	}
6116 	return 0;
6117 }
6118 
6119 static void selinux_shm_free_security(struct kern_ipc_perm *shp)
6120 {
6121 	ipc_free_security(shp);
6122 }
6123 
6124 static int selinux_shm_associate(struct kern_ipc_perm *shp, int shmflg)
6125 {
6126 	struct ipc_security_struct *isec;
6127 	struct common_audit_data ad;
6128 	u32 sid = current_sid();
6129 
6130 	isec = shp->security;
6131 
6132 	ad.type = LSM_AUDIT_DATA_IPC;
6133 	ad.u.ipc_id = shp->key;
6134 
6135 	return avc_has_perm(&selinux_state,
6136 			    sid, isec->sid, SECCLASS_SHM,
6137 			    SHM__ASSOCIATE, &ad);
6138 }
6139 
6140 /* Note, at this point, shp is locked down */
6141 static int selinux_shm_shmctl(struct kern_ipc_perm *shp, int cmd)
6142 {
6143 	int perms;
6144 	int err;
6145 
6146 	switch (cmd) {
6147 	case IPC_INFO:
6148 	case SHM_INFO:
6149 		/* No specific object, just general system-wide information. */
6150 		return avc_has_perm(&selinux_state,
6151 				    current_sid(), SECINITSID_KERNEL,
6152 				    SECCLASS_SYSTEM, SYSTEM__IPC_INFO, NULL);
6153 	case IPC_STAT:
6154 	case SHM_STAT:
6155 		perms = SHM__GETATTR | SHM__ASSOCIATE;
6156 		break;
6157 	case IPC_SET:
6158 		perms = SHM__SETATTR;
6159 		break;
6160 	case SHM_LOCK:
6161 	case SHM_UNLOCK:
6162 		perms = SHM__LOCK;
6163 		break;
6164 	case IPC_RMID:
6165 		perms = SHM__DESTROY;
6166 		break;
6167 	default:
6168 		return 0;
6169 	}
6170 
6171 	err = ipc_has_perm(shp, perms);
6172 	return err;
6173 }
6174 
6175 static int selinux_shm_shmat(struct kern_ipc_perm *shp,
6176 			     char __user *shmaddr, int shmflg)
6177 {
6178 	u32 perms;
6179 
6180 	if (shmflg & SHM_RDONLY)
6181 		perms = SHM__READ;
6182 	else
6183 		perms = SHM__READ | SHM__WRITE;
6184 
6185 	return ipc_has_perm(shp, perms);
6186 }
6187 
6188 /* Semaphore security operations */
6189 static int selinux_sem_alloc_security(struct kern_ipc_perm *sma)
6190 {
6191 	struct ipc_security_struct *isec;
6192 	struct common_audit_data ad;
6193 	u32 sid = current_sid();
6194 	int rc;
6195 
6196 	rc = ipc_alloc_security(sma, SECCLASS_SEM);
6197 	if (rc)
6198 		return rc;
6199 
6200 	isec = sma->security;
6201 
6202 	ad.type = LSM_AUDIT_DATA_IPC;
6203 	ad.u.ipc_id = sma->key;
6204 
6205 	rc = avc_has_perm(&selinux_state,
6206 			  sid, isec->sid, SECCLASS_SEM,
6207 			  SEM__CREATE, &ad);
6208 	if (rc) {
6209 		ipc_free_security(sma);
6210 		return rc;
6211 	}
6212 	return 0;
6213 }
6214 
6215 static void selinux_sem_free_security(struct kern_ipc_perm *sma)
6216 {
6217 	ipc_free_security(sma);
6218 }
6219 
6220 static int selinux_sem_associate(struct kern_ipc_perm *sma, int semflg)
6221 {
6222 	struct ipc_security_struct *isec;
6223 	struct common_audit_data ad;
6224 	u32 sid = current_sid();
6225 
6226 	isec = sma->security;
6227 
6228 	ad.type = LSM_AUDIT_DATA_IPC;
6229 	ad.u.ipc_id = sma->key;
6230 
6231 	return avc_has_perm(&selinux_state,
6232 			    sid, isec->sid, SECCLASS_SEM,
6233 			    SEM__ASSOCIATE, &ad);
6234 }
6235 
6236 /* Note, at this point, sma is locked down */
6237 static int selinux_sem_semctl(struct kern_ipc_perm *sma, int cmd)
6238 {
6239 	int err;
6240 	u32 perms;
6241 
6242 	switch (cmd) {
6243 	case IPC_INFO:
6244 	case SEM_INFO:
6245 		/* No specific object, just general system-wide information. */
6246 		return avc_has_perm(&selinux_state,
6247 				    current_sid(), SECINITSID_KERNEL,
6248 				    SECCLASS_SYSTEM, SYSTEM__IPC_INFO, NULL);
6249 	case GETPID:
6250 	case GETNCNT:
6251 	case GETZCNT:
6252 		perms = SEM__GETATTR;
6253 		break;
6254 	case GETVAL:
6255 	case GETALL:
6256 		perms = SEM__READ;
6257 		break;
6258 	case SETVAL:
6259 	case SETALL:
6260 		perms = SEM__WRITE;
6261 		break;
6262 	case IPC_RMID:
6263 		perms = SEM__DESTROY;
6264 		break;
6265 	case IPC_SET:
6266 		perms = SEM__SETATTR;
6267 		break;
6268 	case IPC_STAT:
6269 	case SEM_STAT:
6270 		perms = SEM__GETATTR | SEM__ASSOCIATE;
6271 		break;
6272 	default:
6273 		return 0;
6274 	}
6275 
6276 	err = ipc_has_perm(sma, perms);
6277 	return err;
6278 }
6279 
6280 static int selinux_sem_semop(struct kern_ipc_perm *sma,
6281 			     struct sembuf *sops, unsigned nsops, int alter)
6282 {
6283 	u32 perms;
6284 
6285 	if (alter)
6286 		perms = SEM__READ | SEM__WRITE;
6287 	else
6288 		perms = SEM__READ;
6289 
6290 	return ipc_has_perm(sma, perms);
6291 }
6292 
6293 static int selinux_ipc_permission(struct kern_ipc_perm *ipcp, short flag)
6294 {
6295 	u32 av = 0;
6296 
6297 	av = 0;
6298 	if (flag & S_IRUGO)
6299 		av |= IPC__UNIX_READ;
6300 	if (flag & S_IWUGO)
6301 		av |= IPC__UNIX_WRITE;
6302 
6303 	if (av == 0)
6304 		return 0;
6305 
6306 	return ipc_has_perm(ipcp, av);
6307 }
6308 
6309 static void selinux_ipc_getsecid(struct kern_ipc_perm *ipcp, u32 *secid)
6310 {
6311 	struct ipc_security_struct *isec = ipcp->security;
6312 	*secid = isec->sid;
6313 }
6314 
6315 static void selinux_d_instantiate(struct dentry *dentry, struct inode *inode)
6316 {
6317 	if (inode)
6318 		inode_doinit_with_dentry(inode, dentry);
6319 }
6320 
6321 static int selinux_getprocattr(struct task_struct *p,
6322 			       char *name, char **value)
6323 {
6324 	const struct task_security_struct *__tsec;
6325 	u32 sid;
6326 	int error;
6327 	unsigned len;
6328 
6329 	rcu_read_lock();
6330 	__tsec = __task_cred(p)->security;
6331 
6332 	if (current != p) {
6333 		error = avc_has_perm(&selinux_state,
6334 				     current_sid(), __tsec->sid,
6335 				     SECCLASS_PROCESS, PROCESS__GETATTR, NULL);
6336 		if (error)
6337 			goto bad;
6338 	}
6339 
6340 	if (!strcmp(name, "current"))
6341 		sid = __tsec->sid;
6342 	else if (!strcmp(name, "prev"))
6343 		sid = __tsec->osid;
6344 	else if (!strcmp(name, "exec"))
6345 		sid = __tsec->exec_sid;
6346 	else if (!strcmp(name, "fscreate"))
6347 		sid = __tsec->create_sid;
6348 	else if (!strcmp(name, "keycreate"))
6349 		sid = __tsec->keycreate_sid;
6350 	else if (!strcmp(name, "sockcreate"))
6351 		sid = __tsec->sockcreate_sid;
6352 	else {
6353 		error = -EINVAL;
6354 		goto bad;
6355 	}
6356 	rcu_read_unlock();
6357 
6358 	if (!sid)
6359 		return 0;
6360 
6361 	error = security_sid_to_context(&selinux_state, sid, value, &len);
6362 	if (error)
6363 		return error;
6364 	return len;
6365 
6366 bad:
6367 	rcu_read_unlock();
6368 	return error;
6369 }
6370 
6371 static int selinux_setprocattr(const char *name, void *value, size_t size)
6372 {
6373 	struct task_security_struct *tsec;
6374 	struct cred *new;
6375 	u32 mysid = current_sid(), sid = 0, ptsid;
6376 	int error;
6377 	char *str = value;
6378 
6379 	/*
6380 	 * Basic control over ability to set these attributes at all.
6381 	 */
6382 	if (!strcmp(name, "exec"))
6383 		error = avc_has_perm(&selinux_state,
6384 				     mysid, mysid, SECCLASS_PROCESS,
6385 				     PROCESS__SETEXEC, NULL);
6386 	else if (!strcmp(name, "fscreate"))
6387 		error = avc_has_perm(&selinux_state,
6388 				     mysid, mysid, SECCLASS_PROCESS,
6389 				     PROCESS__SETFSCREATE, NULL);
6390 	else if (!strcmp(name, "keycreate"))
6391 		error = avc_has_perm(&selinux_state,
6392 				     mysid, mysid, SECCLASS_PROCESS,
6393 				     PROCESS__SETKEYCREATE, NULL);
6394 	else if (!strcmp(name, "sockcreate"))
6395 		error = avc_has_perm(&selinux_state,
6396 				     mysid, mysid, SECCLASS_PROCESS,
6397 				     PROCESS__SETSOCKCREATE, NULL);
6398 	else if (!strcmp(name, "current"))
6399 		error = avc_has_perm(&selinux_state,
6400 				     mysid, mysid, SECCLASS_PROCESS,
6401 				     PROCESS__SETCURRENT, NULL);
6402 	else
6403 		error = -EINVAL;
6404 	if (error)
6405 		return error;
6406 
6407 	/* Obtain a SID for the context, if one was specified. */
6408 	if (size && str[0] && str[0] != '\n') {
6409 		if (str[size-1] == '\n') {
6410 			str[size-1] = 0;
6411 			size--;
6412 		}
6413 		error = security_context_to_sid(&selinux_state, value, size,
6414 						&sid, GFP_KERNEL);
6415 		if (error == -EINVAL && !strcmp(name, "fscreate")) {
6416 			if (!has_cap_mac_admin(true)) {
6417 				struct audit_buffer *ab;
6418 				size_t audit_size;
6419 
6420 				/* We strip a nul only if it is at the end, otherwise the
6421 				 * context contains a nul and we should audit that */
6422 				if (str[size - 1] == '\0')
6423 					audit_size = size - 1;
6424 				else
6425 					audit_size = size;
6426 				ab = audit_log_start(current->audit_context, GFP_ATOMIC, AUDIT_SELINUX_ERR);
6427 				audit_log_format(ab, "op=fscreate invalid_context=");
6428 				audit_log_n_untrustedstring(ab, value, audit_size);
6429 				audit_log_end(ab);
6430 
6431 				return error;
6432 			}
6433 			error = security_context_to_sid_force(
6434 						      &selinux_state,
6435 						      value, size, &sid);
6436 		}
6437 		if (error)
6438 			return error;
6439 	}
6440 
6441 	new = prepare_creds();
6442 	if (!new)
6443 		return -ENOMEM;
6444 
6445 	/* Permission checking based on the specified context is
6446 	   performed during the actual operation (execve,
6447 	   open/mkdir/...), when we know the full context of the
6448 	   operation.  See selinux_bprm_set_creds for the execve
6449 	   checks and may_create for the file creation checks. The
6450 	   operation will then fail if the context is not permitted. */
6451 	tsec = new->security;
6452 	if (!strcmp(name, "exec")) {
6453 		tsec->exec_sid = sid;
6454 	} else if (!strcmp(name, "fscreate")) {
6455 		tsec->create_sid = sid;
6456 	} else if (!strcmp(name, "keycreate")) {
6457 		error = avc_has_perm(&selinux_state,
6458 				     mysid, sid, SECCLASS_KEY, KEY__CREATE,
6459 				     NULL);
6460 		if (error)
6461 			goto abort_change;
6462 		tsec->keycreate_sid = sid;
6463 	} else if (!strcmp(name, "sockcreate")) {
6464 		tsec->sockcreate_sid = sid;
6465 	} else if (!strcmp(name, "current")) {
6466 		error = -EINVAL;
6467 		if (sid == 0)
6468 			goto abort_change;
6469 
6470 		/* Only allow single threaded processes to change context */
6471 		error = -EPERM;
6472 		if (!current_is_single_threaded()) {
6473 			error = security_bounded_transition(&selinux_state,
6474 							    tsec->sid, sid);
6475 			if (error)
6476 				goto abort_change;
6477 		}
6478 
6479 		/* Check permissions for the transition. */
6480 		error = avc_has_perm(&selinux_state,
6481 				     tsec->sid, sid, SECCLASS_PROCESS,
6482 				     PROCESS__DYNTRANSITION, NULL);
6483 		if (error)
6484 			goto abort_change;
6485 
6486 		/* Check for ptracing, and update the task SID if ok.
6487 		   Otherwise, leave SID unchanged and fail. */
6488 		ptsid = ptrace_parent_sid();
6489 		if (ptsid != 0) {
6490 			error = avc_has_perm(&selinux_state,
6491 					     ptsid, sid, SECCLASS_PROCESS,
6492 					     PROCESS__PTRACE, NULL);
6493 			if (error)
6494 				goto abort_change;
6495 		}
6496 
6497 		tsec->sid = sid;
6498 	} else {
6499 		error = -EINVAL;
6500 		goto abort_change;
6501 	}
6502 
6503 	commit_creds(new);
6504 	return size;
6505 
6506 abort_change:
6507 	abort_creds(new);
6508 	return error;
6509 }
6510 
6511 static int selinux_ismaclabel(const char *name)
6512 {
6513 	return (strcmp(name, XATTR_SELINUX_SUFFIX) == 0);
6514 }
6515 
6516 static int selinux_secid_to_secctx(u32 secid, char **secdata, u32 *seclen)
6517 {
6518 	return security_sid_to_context(&selinux_state, secid,
6519 				       secdata, seclen);
6520 }
6521 
6522 static int selinux_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid)
6523 {
6524 	return security_context_to_sid(&selinux_state, secdata, seclen,
6525 				       secid, GFP_KERNEL);
6526 }
6527 
6528 static void selinux_release_secctx(char *secdata, u32 seclen)
6529 {
6530 	kfree(secdata);
6531 }
6532 
6533 static void selinux_inode_invalidate_secctx(struct inode *inode)
6534 {
6535 	struct inode_security_struct *isec = inode->i_security;
6536 
6537 	spin_lock(&isec->lock);
6538 	isec->initialized = LABEL_INVALID;
6539 	spin_unlock(&isec->lock);
6540 }
6541 
6542 /*
6543  *	called with inode->i_mutex locked
6544  */
6545 static int selinux_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen)
6546 {
6547 	return selinux_inode_setsecurity(inode, XATTR_SELINUX_SUFFIX, ctx, ctxlen, 0);
6548 }
6549 
6550 /*
6551  *	called with inode->i_mutex locked
6552  */
6553 static int selinux_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen)
6554 {
6555 	return __vfs_setxattr_noperm(dentry, XATTR_NAME_SELINUX, ctx, ctxlen, 0);
6556 }
6557 
6558 static int selinux_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen)
6559 {
6560 	int len = 0;
6561 	len = selinux_inode_getsecurity(inode, XATTR_SELINUX_SUFFIX,
6562 						ctx, true);
6563 	if (len < 0)
6564 		return len;
6565 	*ctxlen = len;
6566 	return 0;
6567 }
6568 #ifdef CONFIG_KEYS
6569 
6570 static int selinux_key_alloc(struct key *k, const struct cred *cred,
6571 			     unsigned long flags)
6572 {
6573 	const struct task_security_struct *tsec;
6574 	struct key_security_struct *ksec;
6575 
6576 	ksec = kzalloc(sizeof(struct key_security_struct), GFP_KERNEL);
6577 	if (!ksec)
6578 		return -ENOMEM;
6579 
6580 	tsec = cred->security;
6581 	if (tsec->keycreate_sid)
6582 		ksec->sid = tsec->keycreate_sid;
6583 	else
6584 		ksec->sid = tsec->sid;
6585 
6586 	k->security = ksec;
6587 	return 0;
6588 }
6589 
6590 static void selinux_key_free(struct key *k)
6591 {
6592 	struct key_security_struct *ksec = k->security;
6593 
6594 	k->security = NULL;
6595 	kfree(ksec);
6596 }
6597 
6598 static int selinux_key_permission(key_ref_t key_ref,
6599 				  const struct cred *cred,
6600 				  unsigned perm)
6601 {
6602 	struct key *key;
6603 	struct key_security_struct *ksec;
6604 	u32 sid;
6605 
6606 	/* if no specific permissions are requested, we skip the
6607 	   permission check. No serious, additional covert channels
6608 	   appear to be created. */
6609 	if (perm == 0)
6610 		return 0;
6611 
6612 	sid = cred_sid(cred);
6613 
6614 	key = key_ref_to_ptr(key_ref);
6615 	ksec = key->security;
6616 
6617 	return avc_has_perm(&selinux_state,
6618 			    sid, ksec->sid, SECCLASS_KEY, perm, NULL);
6619 }
6620 
6621 static int selinux_key_getsecurity(struct key *key, char **_buffer)
6622 {
6623 	struct key_security_struct *ksec = key->security;
6624 	char *context = NULL;
6625 	unsigned len;
6626 	int rc;
6627 
6628 	rc = security_sid_to_context(&selinux_state, ksec->sid,
6629 				     &context, &len);
6630 	if (!rc)
6631 		rc = len;
6632 	*_buffer = context;
6633 	return rc;
6634 }
6635 #endif
6636 
6637 #ifdef CONFIG_SECURITY_INFINIBAND
6638 static int selinux_ib_pkey_access(void *ib_sec, u64 subnet_prefix, u16 pkey_val)
6639 {
6640 	struct common_audit_data ad;
6641 	int err;
6642 	u32 sid = 0;
6643 	struct ib_security_struct *sec = ib_sec;
6644 	struct lsm_ibpkey_audit ibpkey;
6645 
6646 	err = sel_ib_pkey_sid(subnet_prefix, pkey_val, &sid);
6647 	if (err)
6648 		return err;
6649 
6650 	ad.type = LSM_AUDIT_DATA_IBPKEY;
6651 	ibpkey.subnet_prefix = subnet_prefix;
6652 	ibpkey.pkey = pkey_val;
6653 	ad.u.ibpkey = &ibpkey;
6654 	return avc_has_perm(&selinux_state,
6655 			    sec->sid, sid,
6656 			    SECCLASS_INFINIBAND_PKEY,
6657 			    INFINIBAND_PKEY__ACCESS, &ad);
6658 }
6659 
6660 static int selinux_ib_endport_manage_subnet(void *ib_sec, const char *dev_name,
6661 					    u8 port_num)
6662 {
6663 	struct common_audit_data ad;
6664 	int err;
6665 	u32 sid = 0;
6666 	struct ib_security_struct *sec = ib_sec;
6667 	struct lsm_ibendport_audit ibendport;
6668 
6669 	err = security_ib_endport_sid(&selinux_state, dev_name, port_num,
6670 				      &sid);
6671 
6672 	if (err)
6673 		return err;
6674 
6675 	ad.type = LSM_AUDIT_DATA_IBENDPORT;
6676 	strncpy(ibendport.dev_name, dev_name, sizeof(ibendport.dev_name));
6677 	ibendport.port = port_num;
6678 	ad.u.ibendport = &ibendport;
6679 	return avc_has_perm(&selinux_state,
6680 			    sec->sid, sid,
6681 			    SECCLASS_INFINIBAND_ENDPORT,
6682 			    INFINIBAND_ENDPORT__MANAGE_SUBNET, &ad);
6683 }
6684 
6685 static int selinux_ib_alloc_security(void **ib_sec)
6686 {
6687 	struct ib_security_struct *sec;
6688 
6689 	sec = kzalloc(sizeof(*sec), GFP_KERNEL);
6690 	if (!sec)
6691 		return -ENOMEM;
6692 	sec->sid = current_sid();
6693 
6694 	*ib_sec = sec;
6695 	return 0;
6696 }
6697 
6698 static void selinux_ib_free_security(void *ib_sec)
6699 {
6700 	kfree(ib_sec);
6701 }
6702 #endif
6703 
6704 #ifdef CONFIG_BPF_SYSCALL
6705 static int selinux_bpf(int cmd, union bpf_attr *attr,
6706 				     unsigned int size)
6707 {
6708 	u32 sid = current_sid();
6709 	int ret;
6710 
6711 	switch (cmd) {
6712 	case BPF_MAP_CREATE:
6713 		ret = avc_has_perm(&selinux_state,
6714 				   sid, sid, SECCLASS_BPF, BPF__MAP_CREATE,
6715 				   NULL);
6716 		break;
6717 	case BPF_PROG_LOAD:
6718 		ret = avc_has_perm(&selinux_state,
6719 				   sid, sid, SECCLASS_BPF, BPF__PROG_LOAD,
6720 				   NULL);
6721 		break;
6722 	default:
6723 		ret = 0;
6724 		break;
6725 	}
6726 
6727 	return ret;
6728 }
6729 
6730 static u32 bpf_map_fmode_to_av(fmode_t fmode)
6731 {
6732 	u32 av = 0;
6733 
6734 	if (fmode & FMODE_READ)
6735 		av |= BPF__MAP_READ;
6736 	if (fmode & FMODE_WRITE)
6737 		av |= BPF__MAP_WRITE;
6738 	return av;
6739 }
6740 
6741 /* This function will check the file pass through unix socket or binder to see
6742  * if it is a bpf related object. And apply correspinding checks on the bpf
6743  * object based on the type. The bpf maps and programs, not like other files and
6744  * socket, are using a shared anonymous inode inside the kernel as their inode.
6745  * So checking that inode cannot identify if the process have privilege to
6746  * access the bpf object and that's why we have to add this additional check in
6747  * selinux_file_receive and selinux_binder_transfer_files.
6748  */
6749 static int bpf_fd_pass(struct file *file, u32 sid)
6750 {
6751 	struct bpf_security_struct *bpfsec;
6752 	struct bpf_prog *prog;
6753 	struct bpf_map *map;
6754 	int ret;
6755 
6756 	if (file->f_op == &bpf_map_fops) {
6757 		map = file->private_data;
6758 		bpfsec = map->security;
6759 		ret = avc_has_perm(&selinux_state,
6760 				   sid, bpfsec->sid, SECCLASS_BPF,
6761 				   bpf_map_fmode_to_av(file->f_mode), NULL);
6762 		if (ret)
6763 			return ret;
6764 	} else if (file->f_op == &bpf_prog_fops) {
6765 		prog = file->private_data;
6766 		bpfsec = prog->aux->security;
6767 		ret = avc_has_perm(&selinux_state,
6768 				   sid, bpfsec->sid, SECCLASS_BPF,
6769 				   BPF__PROG_RUN, NULL);
6770 		if (ret)
6771 			return ret;
6772 	}
6773 	return 0;
6774 }
6775 
6776 static int selinux_bpf_map(struct bpf_map *map, fmode_t fmode)
6777 {
6778 	u32 sid = current_sid();
6779 	struct bpf_security_struct *bpfsec;
6780 
6781 	bpfsec = map->security;
6782 	return avc_has_perm(&selinux_state,
6783 			    sid, bpfsec->sid, SECCLASS_BPF,
6784 			    bpf_map_fmode_to_av(fmode), NULL);
6785 }
6786 
6787 static int selinux_bpf_prog(struct bpf_prog *prog)
6788 {
6789 	u32 sid = current_sid();
6790 	struct bpf_security_struct *bpfsec;
6791 
6792 	bpfsec = prog->aux->security;
6793 	return avc_has_perm(&selinux_state,
6794 			    sid, bpfsec->sid, SECCLASS_BPF,
6795 			    BPF__PROG_RUN, NULL);
6796 }
6797 
6798 static int selinux_bpf_map_alloc(struct bpf_map *map)
6799 {
6800 	struct bpf_security_struct *bpfsec;
6801 
6802 	bpfsec = kzalloc(sizeof(*bpfsec), GFP_KERNEL);
6803 	if (!bpfsec)
6804 		return -ENOMEM;
6805 
6806 	bpfsec->sid = current_sid();
6807 	map->security = bpfsec;
6808 
6809 	return 0;
6810 }
6811 
6812 static void selinux_bpf_map_free(struct bpf_map *map)
6813 {
6814 	struct bpf_security_struct *bpfsec = map->security;
6815 
6816 	map->security = NULL;
6817 	kfree(bpfsec);
6818 }
6819 
6820 static int selinux_bpf_prog_alloc(struct bpf_prog_aux *aux)
6821 {
6822 	struct bpf_security_struct *bpfsec;
6823 
6824 	bpfsec = kzalloc(sizeof(*bpfsec), GFP_KERNEL);
6825 	if (!bpfsec)
6826 		return -ENOMEM;
6827 
6828 	bpfsec->sid = current_sid();
6829 	aux->security = bpfsec;
6830 
6831 	return 0;
6832 }
6833 
6834 static void selinux_bpf_prog_free(struct bpf_prog_aux *aux)
6835 {
6836 	struct bpf_security_struct *bpfsec = aux->security;
6837 
6838 	aux->security = NULL;
6839 	kfree(bpfsec);
6840 }
6841 #endif
6842 
6843 static struct security_hook_list selinux_hooks[] __lsm_ro_after_init = {
6844 	LSM_HOOK_INIT(binder_set_context_mgr, selinux_binder_set_context_mgr),
6845 	LSM_HOOK_INIT(binder_transaction, selinux_binder_transaction),
6846 	LSM_HOOK_INIT(binder_transfer_binder, selinux_binder_transfer_binder),
6847 	LSM_HOOK_INIT(binder_transfer_file, selinux_binder_transfer_file),
6848 
6849 	LSM_HOOK_INIT(ptrace_access_check, selinux_ptrace_access_check),
6850 	LSM_HOOK_INIT(ptrace_traceme, selinux_ptrace_traceme),
6851 	LSM_HOOK_INIT(capget, selinux_capget),
6852 	LSM_HOOK_INIT(capset, selinux_capset),
6853 	LSM_HOOK_INIT(capable, selinux_capable),
6854 	LSM_HOOK_INIT(quotactl, selinux_quotactl),
6855 	LSM_HOOK_INIT(quota_on, selinux_quota_on),
6856 	LSM_HOOK_INIT(syslog, selinux_syslog),
6857 	LSM_HOOK_INIT(vm_enough_memory, selinux_vm_enough_memory),
6858 
6859 	LSM_HOOK_INIT(netlink_send, selinux_netlink_send),
6860 
6861 	LSM_HOOK_INIT(bprm_set_creds, selinux_bprm_set_creds),
6862 	LSM_HOOK_INIT(bprm_committing_creds, selinux_bprm_committing_creds),
6863 	LSM_HOOK_INIT(bprm_committed_creds, selinux_bprm_committed_creds),
6864 
6865 	LSM_HOOK_INIT(sb_alloc_security, selinux_sb_alloc_security),
6866 	LSM_HOOK_INIT(sb_free_security, selinux_sb_free_security),
6867 	LSM_HOOK_INIT(sb_copy_data, selinux_sb_copy_data),
6868 	LSM_HOOK_INIT(sb_remount, selinux_sb_remount),
6869 	LSM_HOOK_INIT(sb_kern_mount, selinux_sb_kern_mount),
6870 	LSM_HOOK_INIT(sb_show_options, selinux_sb_show_options),
6871 	LSM_HOOK_INIT(sb_statfs, selinux_sb_statfs),
6872 	LSM_HOOK_INIT(sb_mount, selinux_mount),
6873 	LSM_HOOK_INIT(sb_umount, selinux_umount),
6874 	LSM_HOOK_INIT(sb_set_mnt_opts, selinux_set_mnt_opts),
6875 	LSM_HOOK_INIT(sb_clone_mnt_opts, selinux_sb_clone_mnt_opts),
6876 	LSM_HOOK_INIT(sb_parse_opts_str, selinux_parse_opts_str),
6877 
6878 	LSM_HOOK_INIT(dentry_init_security, selinux_dentry_init_security),
6879 	LSM_HOOK_INIT(dentry_create_files_as, selinux_dentry_create_files_as),
6880 
6881 	LSM_HOOK_INIT(inode_alloc_security, selinux_inode_alloc_security),
6882 	LSM_HOOK_INIT(inode_free_security, selinux_inode_free_security),
6883 	LSM_HOOK_INIT(inode_init_security, selinux_inode_init_security),
6884 	LSM_HOOK_INIT(inode_create, selinux_inode_create),
6885 	LSM_HOOK_INIT(inode_link, selinux_inode_link),
6886 	LSM_HOOK_INIT(inode_unlink, selinux_inode_unlink),
6887 	LSM_HOOK_INIT(inode_symlink, selinux_inode_symlink),
6888 	LSM_HOOK_INIT(inode_mkdir, selinux_inode_mkdir),
6889 	LSM_HOOK_INIT(inode_rmdir, selinux_inode_rmdir),
6890 	LSM_HOOK_INIT(inode_mknod, selinux_inode_mknod),
6891 	LSM_HOOK_INIT(inode_rename, selinux_inode_rename),
6892 	LSM_HOOK_INIT(inode_readlink, selinux_inode_readlink),
6893 	LSM_HOOK_INIT(inode_follow_link, selinux_inode_follow_link),
6894 	LSM_HOOK_INIT(inode_permission, selinux_inode_permission),
6895 	LSM_HOOK_INIT(inode_setattr, selinux_inode_setattr),
6896 	LSM_HOOK_INIT(inode_getattr, selinux_inode_getattr),
6897 	LSM_HOOK_INIT(inode_setxattr, selinux_inode_setxattr),
6898 	LSM_HOOK_INIT(inode_post_setxattr, selinux_inode_post_setxattr),
6899 	LSM_HOOK_INIT(inode_getxattr, selinux_inode_getxattr),
6900 	LSM_HOOK_INIT(inode_listxattr, selinux_inode_listxattr),
6901 	LSM_HOOK_INIT(inode_removexattr, selinux_inode_removexattr),
6902 	LSM_HOOK_INIT(inode_getsecurity, selinux_inode_getsecurity),
6903 	LSM_HOOK_INIT(inode_setsecurity, selinux_inode_setsecurity),
6904 	LSM_HOOK_INIT(inode_listsecurity, selinux_inode_listsecurity),
6905 	LSM_HOOK_INIT(inode_getsecid, selinux_inode_getsecid),
6906 	LSM_HOOK_INIT(inode_copy_up, selinux_inode_copy_up),
6907 	LSM_HOOK_INIT(inode_copy_up_xattr, selinux_inode_copy_up_xattr),
6908 
6909 	LSM_HOOK_INIT(file_permission, selinux_file_permission),
6910 	LSM_HOOK_INIT(file_alloc_security, selinux_file_alloc_security),
6911 	LSM_HOOK_INIT(file_free_security, selinux_file_free_security),
6912 	LSM_HOOK_INIT(file_ioctl, selinux_file_ioctl),
6913 	LSM_HOOK_INIT(mmap_file, selinux_mmap_file),
6914 	LSM_HOOK_INIT(mmap_addr, selinux_mmap_addr),
6915 	LSM_HOOK_INIT(file_mprotect, selinux_file_mprotect),
6916 	LSM_HOOK_INIT(file_lock, selinux_file_lock),
6917 	LSM_HOOK_INIT(file_fcntl, selinux_file_fcntl),
6918 	LSM_HOOK_INIT(file_set_fowner, selinux_file_set_fowner),
6919 	LSM_HOOK_INIT(file_send_sigiotask, selinux_file_send_sigiotask),
6920 	LSM_HOOK_INIT(file_receive, selinux_file_receive),
6921 
6922 	LSM_HOOK_INIT(file_open, selinux_file_open),
6923 
6924 	LSM_HOOK_INIT(task_alloc, selinux_task_alloc),
6925 	LSM_HOOK_INIT(cred_alloc_blank, selinux_cred_alloc_blank),
6926 	LSM_HOOK_INIT(cred_free, selinux_cred_free),
6927 	LSM_HOOK_INIT(cred_prepare, selinux_cred_prepare),
6928 	LSM_HOOK_INIT(cred_transfer, selinux_cred_transfer),
6929 	LSM_HOOK_INIT(kernel_act_as, selinux_kernel_act_as),
6930 	LSM_HOOK_INIT(kernel_create_files_as, selinux_kernel_create_files_as),
6931 	LSM_HOOK_INIT(kernel_module_request, selinux_kernel_module_request),
6932 	LSM_HOOK_INIT(kernel_read_file, selinux_kernel_read_file),
6933 	LSM_HOOK_INIT(task_setpgid, selinux_task_setpgid),
6934 	LSM_HOOK_INIT(task_getpgid, selinux_task_getpgid),
6935 	LSM_HOOK_INIT(task_getsid, selinux_task_getsid),
6936 	LSM_HOOK_INIT(task_getsecid, selinux_task_getsecid),
6937 	LSM_HOOK_INIT(task_setnice, selinux_task_setnice),
6938 	LSM_HOOK_INIT(task_setioprio, selinux_task_setioprio),
6939 	LSM_HOOK_INIT(task_getioprio, selinux_task_getioprio),
6940 	LSM_HOOK_INIT(task_prlimit, selinux_task_prlimit),
6941 	LSM_HOOK_INIT(task_setrlimit, selinux_task_setrlimit),
6942 	LSM_HOOK_INIT(task_setscheduler, selinux_task_setscheduler),
6943 	LSM_HOOK_INIT(task_getscheduler, selinux_task_getscheduler),
6944 	LSM_HOOK_INIT(task_movememory, selinux_task_movememory),
6945 	LSM_HOOK_INIT(task_kill, selinux_task_kill),
6946 	LSM_HOOK_INIT(task_to_inode, selinux_task_to_inode),
6947 
6948 	LSM_HOOK_INIT(ipc_permission, selinux_ipc_permission),
6949 	LSM_HOOK_INIT(ipc_getsecid, selinux_ipc_getsecid),
6950 
6951 	LSM_HOOK_INIT(msg_msg_alloc_security, selinux_msg_msg_alloc_security),
6952 	LSM_HOOK_INIT(msg_msg_free_security, selinux_msg_msg_free_security),
6953 
6954 	LSM_HOOK_INIT(msg_queue_alloc_security,
6955 			selinux_msg_queue_alloc_security),
6956 	LSM_HOOK_INIT(msg_queue_free_security, selinux_msg_queue_free_security),
6957 	LSM_HOOK_INIT(msg_queue_associate, selinux_msg_queue_associate),
6958 	LSM_HOOK_INIT(msg_queue_msgctl, selinux_msg_queue_msgctl),
6959 	LSM_HOOK_INIT(msg_queue_msgsnd, selinux_msg_queue_msgsnd),
6960 	LSM_HOOK_INIT(msg_queue_msgrcv, selinux_msg_queue_msgrcv),
6961 
6962 	LSM_HOOK_INIT(shm_alloc_security, selinux_shm_alloc_security),
6963 	LSM_HOOK_INIT(shm_free_security, selinux_shm_free_security),
6964 	LSM_HOOK_INIT(shm_associate, selinux_shm_associate),
6965 	LSM_HOOK_INIT(shm_shmctl, selinux_shm_shmctl),
6966 	LSM_HOOK_INIT(shm_shmat, selinux_shm_shmat),
6967 
6968 	LSM_HOOK_INIT(sem_alloc_security, selinux_sem_alloc_security),
6969 	LSM_HOOK_INIT(sem_free_security, selinux_sem_free_security),
6970 	LSM_HOOK_INIT(sem_associate, selinux_sem_associate),
6971 	LSM_HOOK_INIT(sem_semctl, selinux_sem_semctl),
6972 	LSM_HOOK_INIT(sem_semop, selinux_sem_semop),
6973 
6974 	LSM_HOOK_INIT(d_instantiate, selinux_d_instantiate),
6975 
6976 	LSM_HOOK_INIT(getprocattr, selinux_getprocattr),
6977 	LSM_HOOK_INIT(setprocattr, selinux_setprocattr),
6978 
6979 	LSM_HOOK_INIT(ismaclabel, selinux_ismaclabel),
6980 	LSM_HOOK_INIT(secid_to_secctx, selinux_secid_to_secctx),
6981 	LSM_HOOK_INIT(secctx_to_secid, selinux_secctx_to_secid),
6982 	LSM_HOOK_INIT(release_secctx, selinux_release_secctx),
6983 	LSM_HOOK_INIT(inode_invalidate_secctx, selinux_inode_invalidate_secctx),
6984 	LSM_HOOK_INIT(inode_notifysecctx, selinux_inode_notifysecctx),
6985 	LSM_HOOK_INIT(inode_setsecctx, selinux_inode_setsecctx),
6986 	LSM_HOOK_INIT(inode_getsecctx, selinux_inode_getsecctx),
6987 
6988 	LSM_HOOK_INIT(unix_stream_connect, selinux_socket_unix_stream_connect),
6989 	LSM_HOOK_INIT(unix_may_send, selinux_socket_unix_may_send),
6990 
6991 	LSM_HOOK_INIT(socket_create, selinux_socket_create),
6992 	LSM_HOOK_INIT(socket_post_create, selinux_socket_post_create),
6993 	LSM_HOOK_INIT(socket_bind, selinux_socket_bind),
6994 	LSM_HOOK_INIT(socket_connect, selinux_socket_connect),
6995 	LSM_HOOK_INIT(socket_listen, selinux_socket_listen),
6996 	LSM_HOOK_INIT(socket_accept, selinux_socket_accept),
6997 	LSM_HOOK_INIT(socket_sendmsg, selinux_socket_sendmsg),
6998 	LSM_HOOK_INIT(socket_recvmsg, selinux_socket_recvmsg),
6999 	LSM_HOOK_INIT(socket_getsockname, selinux_socket_getsockname),
7000 	LSM_HOOK_INIT(socket_getpeername, selinux_socket_getpeername),
7001 	LSM_HOOK_INIT(socket_getsockopt, selinux_socket_getsockopt),
7002 	LSM_HOOK_INIT(socket_setsockopt, selinux_socket_setsockopt),
7003 	LSM_HOOK_INIT(socket_shutdown, selinux_socket_shutdown),
7004 	LSM_HOOK_INIT(socket_sock_rcv_skb, selinux_socket_sock_rcv_skb),
7005 	LSM_HOOK_INIT(socket_getpeersec_stream,
7006 			selinux_socket_getpeersec_stream),
7007 	LSM_HOOK_INIT(socket_getpeersec_dgram, selinux_socket_getpeersec_dgram),
7008 	LSM_HOOK_INIT(sk_alloc_security, selinux_sk_alloc_security),
7009 	LSM_HOOK_INIT(sk_free_security, selinux_sk_free_security),
7010 	LSM_HOOK_INIT(sk_clone_security, selinux_sk_clone_security),
7011 	LSM_HOOK_INIT(sk_getsecid, selinux_sk_getsecid),
7012 	LSM_HOOK_INIT(sock_graft, selinux_sock_graft),
7013 	LSM_HOOK_INIT(sctp_assoc_request, selinux_sctp_assoc_request),
7014 	LSM_HOOK_INIT(sctp_sk_clone, selinux_sctp_sk_clone),
7015 	LSM_HOOK_INIT(sctp_bind_connect, selinux_sctp_bind_connect),
7016 	LSM_HOOK_INIT(inet_conn_request, selinux_inet_conn_request),
7017 	LSM_HOOK_INIT(inet_csk_clone, selinux_inet_csk_clone),
7018 	LSM_HOOK_INIT(inet_conn_established, selinux_inet_conn_established),
7019 	LSM_HOOK_INIT(secmark_relabel_packet, selinux_secmark_relabel_packet),
7020 	LSM_HOOK_INIT(secmark_refcount_inc, selinux_secmark_refcount_inc),
7021 	LSM_HOOK_INIT(secmark_refcount_dec, selinux_secmark_refcount_dec),
7022 	LSM_HOOK_INIT(req_classify_flow, selinux_req_classify_flow),
7023 	LSM_HOOK_INIT(tun_dev_alloc_security, selinux_tun_dev_alloc_security),
7024 	LSM_HOOK_INIT(tun_dev_free_security, selinux_tun_dev_free_security),
7025 	LSM_HOOK_INIT(tun_dev_create, selinux_tun_dev_create),
7026 	LSM_HOOK_INIT(tun_dev_attach_queue, selinux_tun_dev_attach_queue),
7027 	LSM_HOOK_INIT(tun_dev_attach, selinux_tun_dev_attach),
7028 	LSM_HOOK_INIT(tun_dev_open, selinux_tun_dev_open),
7029 #ifdef CONFIG_SECURITY_INFINIBAND
7030 	LSM_HOOK_INIT(ib_pkey_access, selinux_ib_pkey_access),
7031 	LSM_HOOK_INIT(ib_endport_manage_subnet,
7032 		      selinux_ib_endport_manage_subnet),
7033 	LSM_HOOK_INIT(ib_alloc_security, selinux_ib_alloc_security),
7034 	LSM_HOOK_INIT(ib_free_security, selinux_ib_free_security),
7035 #endif
7036 #ifdef CONFIG_SECURITY_NETWORK_XFRM
7037 	LSM_HOOK_INIT(xfrm_policy_alloc_security, selinux_xfrm_policy_alloc),
7038 	LSM_HOOK_INIT(xfrm_policy_clone_security, selinux_xfrm_policy_clone),
7039 	LSM_HOOK_INIT(xfrm_policy_free_security, selinux_xfrm_policy_free),
7040 	LSM_HOOK_INIT(xfrm_policy_delete_security, selinux_xfrm_policy_delete),
7041 	LSM_HOOK_INIT(xfrm_state_alloc, selinux_xfrm_state_alloc),
7042 	LSM_HOOK_INIT(xfrm_state_alloc_acquire,
7043 			selinux_xfrm_state_alloc_acquire),
7044 	LSM_HOOK_INIT(xfrm_state_free_security, selinux_xfrm_state_free),
7045 	LSM_HOOK_INIT(xfrm_state_delete_security, selinux_xfrm_state_delete),
7046 	LSM_HOOK_INIT(xfrm_policy_lookup, selinux_xfrm_policy_lookup),
7047 	LSM_HOOK_INIT(xfrm_state_pol_flow_match,
7048 			selinux_xfrm_state_pol_flow_match),
7049 	LSM_HOOK_INIT(xfrm_decode_session, selinux_xfrm_decode_session),
7050 #endif
7051 
7052 #ifdef CONFIG_KEYS
7053 	LSM_HOOK_INIT(key_alloc, selinux_key_alloc),
7054 	LSM_HOOK_INIT(key_free, selinux_key_free),
7055 	LSM_HOOK_INIT(key_permission, selinux_key_permission),
7056 	LSM_HOOK_INIT(key_getsecurity, selinux_key_getsecurity),
7057 #endif
7058 
7059 #ifdef CONFIG_AUDIT
7060 	LSM_HOOK_INIT(audit_rule_init, selinux_audit_rule_init),
7061 	LSM_HOOK_INIT(audit_rule_known, selinux_audit_rule_known),
7062 	LSM_HOOK_INIT(audit_rule_match, selinux_audit_rule_match),
7063 	LSM_HOOK_INIT(audit_rule_free, selinux_audit_rule_free),
7064 #endif
7065 
7066 #ifdef CONFIG_BPF_SYSCALL
7067 	LSM_HOOK_INIT(bpf, selinux_bpf),
7068 	LSM_HOOK_INIT(bpf_map, selinux_bpf_map),
7069 	LSM_HOOK_INIT(bpf_prog, selinux_bpf_prog),
7070 	LSM_HOOK_INIT(bpf_map_alloc_security, selinux_bpf_map_alloc),
7071 	LSM_HOOK_INIT(bpf_prog_alloc_security, selinux_bpf_prog_alloc),
7072 	LSM_HOOK_INIT(bpf_map_free_security, selinux_bpf_map_free),
7073 	LSM_HOOK_INIT(bpf_prog_free_security, selinux_bpf_prog_free),
7074 #endif
7075 };
7076 
7077 static __init int selinux_init(void)
7078 {
7079 	if (!security_module_enable("selinux")) {
7080 		selinux_enabled = 0;
7081 		return 0;
7082 	}
7083 
7084 	if (!selinux_enabled) {
7085 		printk(KERN_INFO "SELinux:  Disabled at boot.\n");
7086 		return 0;
7087 	}
7088 
7089 	printk(KERN_INFO "SELinux:  Initializing.\n");
7090 
7091 	memset(&selinux_state, 0, sizeof(selinux_state));
7092 	enforcing_set(&selinux_state, selinux_enforcing_boot);
7093 	selinux_state.checkreqprot = selinux_checkreqprot_boot;
7094 	selinux_ss_init(&selinux_state.ss);
7095 	selinux_avc_init(&selinux_state.avc);
7096 
7097 	/* Set the security state for the initial task. */
7098 	cred_init_security();
7099 
7100 	default_noexec = !(VM_DATA_DEFAULT_FLAGS & VM_EXEC);
7101 
7102 	sel_inode_cache = kmem_cache_create("selinux_inode_security",
7103 					    sizeof(struct inode_security_struct),
7104 					    0, SLAB_PANIC, NULL);
7105 	file_security_cache = kmem_cache_create("selinux_file_security",
7106 					    sizeof(struct file_security_struct),
7107 					    0, SLAB_PANIC, NULL);
7108 	avc_init();
7109 
7110 	avtab_cache_init();
7111 
7112 	ebitmap_cache_init();
7113 
7114 	hashtab_cache_init();
7115 
7116 	security_add_hooks(selinux_hooks, ARRAY_SIZE(selinux_hooks), "selinux");
7117 
7118 	if (avc_add_callback(selinux_netcache_avc_callback, AVC_CALLBACK_RESET))
7119 		panic("SELinux: Unable to register AVC netcache callback\n");
7120 
7121 	if (avc_add_callback(selinux_lsm_notifier_avc_callback, AVC_CALLBACK_RESET))
7122 		panic("SELinux: Unable to register AVC LSM notifier callback\n");
7123 
7124 	if (selinux_enforcing_boot)
7125 		printk(KERN_DEBUG "SELinux:  Starting in enforcing mode\n");
7126 	else
7127 		printk(KERN_DEBUG "SELinux:  Starting in permissive mode\n");
7128 
7129 	return 0;
7130 }
7131 
7132 static void delayed_superblock_init(struct super_block *sb, void *unused)
7133 {
7134 	superblock_doinit(sb, NULL);
7135 }
7136 
7137 void selinux_complete_init(void)
7138 {
7139 	printk(KERN_DEBUG "SELinux:  Completing initialization.\n");
7140 
7141 	/* Set up any superblocks initialized prior to the policy load. */
7142 	printk(KERN_DEBUG "SELinux:  Setting up existing superblocks.\n");
7143 	iterate_supers(delayed_superblock_init, NULL);
7144 }
7145 
7146 /* SELinux requires early initialization in order to label
7147    all processes and objects when they are created. */
7148 security_initcall(selinux_init);
7149 
7150 #if defined(CONFIG_NETFILTER)
7151 
7152 static const struct nf_hook_ops selinux_nf_ops[] = {
7153 	{
7154 		.hook =		selinux_ipv4_postroute,
7155 		.pf =		NFPROTO_IPV4,
7156 		.hooknum =	NF_INET_POST_ROUTING,
7157 		.priority =	NF_IP_PRI_SELINUX_LAST,
7158 	},
7159 	{
7160 		.hook =		selinux_ipv4_forward,
7161 		.pf =		NFPROTO_IPV4,
7162 		.hooknum =	NF_INET_FORWARD,
7163 		.priority =	NF_IP_PRI_SELINUX_FIRST,
7164 	},
7165 	{
7166 		.hook =		selinux_ipv4_output,
7167 		.pf =		NFPROTO_IPV4,
7168 		.hooknum =	NF_INET_LOCAL_OUT,
7169 		.priority =	NF_IP_PRI_SELINUX_FIRST,
7170 	},
7171 #if IS_ENABLED(CONFIG_IPV6)
7172 	{
7173 		.hook =		selinux_ipv6_postroute,
7174 		.pf =		NFPROTO_IPV6,
7175 		.hooknum =	NF_INET_POST_ROUTING,
7176 		.priority =	NF_IP6_PRI_SELINUX_LAST,
7177 	},
7178 	{
7179 		.hook =		selinux_ipv6_forward,
7180 		.pf =		NFPROTO_IPV6,
7181 		.hooknum =	NF_INET_FORWARD,
7182 		.priority =	NF_IP6_PRI_SELINUX_FIRST,
7183 	},
7184 	{
7185 		.hook =		selinux_ipv6_output,
7186 		.pf =		NFPROTO_IPV6,
7187 		.hooknum =	NF_INET_LOCAL_OUT,
7188 		.priority =	NF_IP6_PRI_SELINUX_FIRST,
7189 	},
7190 #endif	/* IPV6 */
7191 };
7192 
7193 static int __net_init selinux_nf_register(struct net *net)
7194 {
7195 	return nf_register_net_hooks(net, selinux_nf_ops,
7196 				     ARRAY_SIZE(selinux_nf_ops));
7197 }
7198 
7199 static void __net_exit selinux_nf_unregister(struct net *net)
7200 {
7201 	nf_unregister_net_hooks(net, selinux_nf_ops,
7202 				ARRAY_SIZE(selinux_nf_ops));
7203 }
7204 
7205 static struct pernet_operations selinux_net_ops = {
7206 	.init = selinux_nf_register,
7207 	.exit = selinux_nf_unregister,
7208 };
7209 
7210 static int __init selinux_nf_ip_init(void)
7211 {
7212 	int err;
7213 
7214 	if (!selinux_enabled)
7215 		return 0;
7216 
7217 	printk(KERN_DEBUG "SELinux:  Registering netfilter hooks\n");
7218 
7219 	err = register_pernet_subsys(&selinux_net_ops);
7220 	if (err)
7221 		panic("SELinux: register_pernet_subsys: error %d\n", err);
7222 
7223 	return 0;
7224 }
7225 __initcall(selinux_nf_ip_init);
7226 
7227 #ifdef CONFIG_SECURITY_SELINUX_DISABLE
7228 static void selinux_nf_ip_exit(void)
7229 {
7230 	printk(KERN_DEBUG "SELinux:  Unregistering netfilter hooks\n");
7231 
7232 	unregister_pernet_subsys(&selinux_net_ops);
7233 }
7234 #endif
7235 
7236 #else /* CONFIG_NETFILTER */
7237 
7238 #ifdef CONFIG_SECURITY_SELINUX_DISABLE
7239 #define selinux_nf_ip_exit()
7240 #endif
7241 
7242 #endif /* CONFIG_NETFILTER */
7243 
7244 #ifdef CONFIG_SECURITY_SELINUX_DISABLE
7245 int selinux_disable(struct selinux_state *state)
7246 {
7247 	if (state->initialized) {
7248 		/* Not permitted after initial policy load. */
7249 		return -EINVAL;
7250 	}
7251 
7252 	if (state->disabled) {
7253 		/* Only do this once. */
7254 		return -EINVAL;
7255 	}
7256 
7257 	state->disabled = 1;
7258 
7259 	printk(KERN_INFO "SELinux:  Disabled at runtime.\n");
7260 
7261 	selinux_enabled = 0;
7262 
7263 	security_delete_hooks(selinux_hooks, ARRAY_SIZE(selinux_hooks));
7264 
7265 	/* Try to destroy the avc node cache */
7266 	avc_disable();
7267 
7268 	/* Unregister netfilter hooks. */
7269 	selinux_nf_ip_exit();
7270 
7271 	/* Unregister selinuxfs. */
7272 	exit_sel_fs();
7273 
7274 	return 0;
7275 }
7276 #endif
7277