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