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