diff options
Diffstat (limited to 'security/selinux/hooks.c')
| -rw-r--r-- | security/selinux/hooks.c | 612 | 
1 files changed, 207 insertions, 405 deletions
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 9a5bdfc21314..79b4890e9936 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -136,17 +136,13 @@ static int __init selinux_enabled_setup(char *str)  __setup("selinux=", selinux_enabled_setup);  #endif -static unsigned int selinux_checkreqprot_boot = -	CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE; -  static int __init checkreqprot_setup(char *str)  {  	unsigned long checkreqprot;  	if (!kstrtoul(str, 0, &checkreqprot)) { -		selinux_checkreqprot_boot = checkreqprot ? 1 : 0;  		if (checkreqprot) -			pr_err("SELinux: checkreqprot set to 1 via kernel parameter.  This is deprecated and will be rejected in a future kernel release.\n"); +			pr_err("SELinux: checkreqprot set to 1 via kernel parameter.  This is no longer supported.\n");  	}  	return 1;  } @@ -257,7 +253,7 @@ static int __inode_security_revalidate(struct inode *inode,  	might_sleep_if(may_sleep); -	if (selinux_initialized(&selinux_state) && +	if (selinux_initialized() &&  	    isec->initialized != LABEL_INITIALIZED) {  		if (!may_sleep)  			return -ECHILD; @@ -403,14 +399,12 @@ static int may_context_mount_sb_relabel(u32 sid,  	const struct task_security_struct *tsec = selinux_cred(cred);  	int rc; -	rc = avc_has_perm(&selinux_state, -			  tsec->sid, sbsec->sid, SECCLASS_FILESYSTEM, +	rc = avc_has_perm(tsec->sid, sbsec->sid, SECCLASS_FILESYSTEM,  			  FILESYSTEM__RELABELFROM, NULL);  	if (rc)  		return rc; -	rc = avc_has_perm(&selinux_state, -			  tsec->sid, sid, SECCLASS_FILESYSTEM, +	rc = avc_has_perm(tsec->sid, sid, SECCLASS_FILESYSTEM,  			  FILESYSTEM__RELABELTO, NULL);  	return rc;  } @@ -421,14 +415,12 @@ static int may_context_mount_inode_relabel(u32 sid,  {  	const struct task_security_struct *tsec = selinux_cred(cred);  	int rc; -	rc = avc_has_perm(&selinux_state, -			  tsec->sid, sbsec->sid, SECCLASS_FILESYSTEM, +	rc = avc_has_perm(tsec->sid, sbsec->sid, SECCLASS_FILESYSTEM,  			  FILESYSTEM__RELABELFROM, NULL);  	if (rc)  		return rc; -	rc = avc_has_perm(&selinux_state, -			  sid, sbsec->sid, SECCLASS_FILESYSTEM, +	rc = avc_has_perm(sid, sbsec->sid, SECCLASS_FILESYSTEM,  			  FILESYSTEM__ASSOCIATE, NULL);  	return rc;  } @@ -511,7 +503,7 @@ static int sb_check_xattr_support(struct super_block *sb)  fallback:  	/* No xattr support - try to fallback to genfs if possible. */ -	rc = security_genfs_sid(&selinux_state, sb->s_type->name, "/", +	rc = security_genfs_sid(sb->s_type->name, "/",  				SECCLASS_DIR, &sid);  	if (rc)  		return -EOPNOTSUPP; @@ -615,7 +607,7 @@ static int selinux_set_mnt_opts(struct super_block *sb,  	mutex_lock(&sbsec->lock); -	if (!selinux_initialized(&selinux_state)) { +	if (!selinux_initialized()) {  		if (!opts) {  			/* Defer initialization until selinux_complete_init,  			   after the initial policy is loaded and the security @@ -716,7 +708,7 @@ static int selinux_set_mnt_opts(struct super_block *sb,  		 * Determine the labeling behavior to use for this  		 * filesystem type.  		 */ -		rc = security_fs_use(&selinux_state, sb); +		rc = security_fs_use(sb);  		if (rc) {  			pr_warn("%s: security_fs_use(%s) returned %d\n",  					__func__, sb->s_type->name, rc); @@ -741,8 +733,7 @@ static int selinux_set_mnt_opts(struct super_block *sb,  		}  		if (sbsec->behavior == SECURITY_FS_USE_XATTR) {  			sbsec->behavior = SECURITY_FS_USE_MNTPOINT; -			rc = security_transition_sid(&selinux_state, -						     current_sid(), +			rc = security_transition_sid(current_sid(),  						     current_sid(),  						     SECCLASS_FILE, NULL,  						     &sbsec->mntpoint_sid); @@ -881,7 +872,7 @@ static int selinux_sb_clone_mnt_opts(const struct super_block *oldsb,  	 * if the parent was able to be mounted it clearly had no special lsm  	 * mount options.  thus we can safely deal with this superblock later  	 */ -	if (!selinux_initialized(&selinux_state)) +	if (!selinux_initialized())  		return 0;  	/* @@ -911,7 +902,7 @@ static int selinux_sb_clone_mnt_opts(const struct super_block *oldsb,  	if (newsbsec->behavior == SECURITY_FS_USE_NATIVE &&  		!(kern_flags & SECURITY_LSM_NATIVE_LABELS) && !set_context) { -		rc = security_fs_use(&selinux_state, newsb); +		rc = security_fs_use(newsb);  		if (rc)  			goto out;  	} @@ -960,7 +951,7 @@ static int selinux_add_opt(int token, const char *s, void **mnt_opts)  	if (!s)  		return -EINVAL; -	if (!selinux_initialized(&selinux_state)) { +	if (!selinux_initialized()) {  		pr_warn("SELinux: Unable to set superblock options before the security server is initialized\n");  		return -EINVAL;  	} @@ -997,7 +988,7 @@ static int selinux_add_opt(int token, const char *s, void **mnt_opts)  		WARN_ON(1);  		return -EINVAL;  	} -	rc = security_context_str_to_sid(&selinux_state, s, dst_sid, GFP_KERNEL); +	rc = security_context_str_to_sid(s, dst_sid, GFP_KERNEL);  	if (rc)  		pr_warn("SELinux: security_context_str_to_sid (%s) failed with errno=%d\n",  			s, rc); @@ -1014,8 +1005,7 @@ static int show_sid(struct seq_file *m, u32 sid)  	u32 len;  	int rc; -	rc = security_sid_to_context(&selinux_state, sid, -					     &context, &len); +	rc = security_sid_to_context(sid, &context, &len);  	if (!rc) {  		bool has_comma = strchr(context, ','); @@ -1038,7 +1028,7 @@ static int selinux_sb_show_options(struct seq_file *m, struct super_block *sb)  	if (!(sbsec->flags & SE_SBINITIALIZED))  		return 0; -	if (!selinux_initialized(&selinux_state)) +	if (!selinux_initialized())  		return 0;  	if (sbsec->flags & FSCONTEXT_MNT) { @@ -1292,7 +1282,7 @@ static int selinux_genfs_get_sid(struct dentry *dentry,  				path++;  			}  		} -		rc = security_genfs_sid(&selinux_state, sb->s_type->name, +		rc = security_genfs_sid(sb->s_type->name,  					path, tclass, sid);  		if (rc == -ENOENT) {  			/* No match in policy, mark as unlabeled. */ @@ -1347,7 +1337,7 @@ static int inode_doinit_use_xattr(struct inode *inode, struct dentry *dentry,  		return 0;  	} -	rc = security_context_to_sid_default(&selinux_state, context, rc, sid, +	rc = security_context_to_sid_default(context, rc, sid,  					     def_sid, GFP_NOFS);  	if (rc) {  		char *dev = inode->i_sb->s_id; @@ -1454,7 +1444,7 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent  		sid = sbsec->sid;  		/* Try to obtain a transition SID. */ -		rc = security_transition_sid(&selinux_state, task_sid, sid, +		rc = security_transition_sid(task_sid, sid,  					     sclass, NULL, &sid);  		if (rc)  			goto out; @@ -1599,11 +1589,9 @@ static int cred_has_capability(const struct cred *cred,  		return -EINVAL;  	} -	rc = avc_has_perm_noaudit(&selinux_state, -				  sid, sid, sclass, av, 0, &avd); +	rc = avc_has_perm_noaudit(sid, sid, sclass, av, 0, &avd);  	if (!(opts & CAP_OPT_NOAUDIT)) { -		int rc2 = avc_audit(&selinux_state, -				    sid, sid, sclass, av, &avd, rc, &ad); +		int rc2 = avc_audit(sid, sid, sclass, av, &avd, rc, &ad);  		if (rc2)  			return rc2;  	} @@ -1629,8 +1617,7 @@ static int inode_has_perm(const struct cred *cred,  	sid = cred_sid(cred);  	isec = selinux_inode(inode); -	return avc_has_perm(&selinux_state, -			    sid, isec->sid, isec->sclass, perms, adp); +	return avc_has_perm(sid, isec->sid, isec->sclass, perms, adp);  }  /* Same as inode_has_perm, but pass explicit audit data containing @@ -1703,8 +1690,7 @@ static int file_has_perm(const struct cred *cred,  	ad.u.file = file;  	if (sid != fsec->sid) { -		rc = avc_has_perm(&selinux_state, -				  sid, fsec->sid, +		rc = avc_has_perm(sid, fsec->sid,  				  SECCLASS_FD,  				  FD__USE,  				  &ad); @@ -1747,7 +1733,7 @@ selinux_determine_inode_label(const struct task_security_struct *tsec,  		*_new_isid = tsec->create_sid;  	} else {  		const struct inode_security_struct *dsec = inode_security(dir); -		return security_transition_sid(&selinux_state, tsec->sid, +		return security_transition_sid(tsec->sid,  					       dsec->sid, tclass,  					       name, _new_isid);  	} @@ -1775,8 +1761,7 @@ static int may_create(struct inode *dir,  	ad.type = LSM_AUDIT_DATA_DENTRY;  	ad.u.dentry = dentry; -	rc = avc_has_perm(&selinux_state, -			  sid, dsec->sid, SECCLASS_DIR, +	rc = avc_has_perm(sid, dsec->sid, SECCLASS_DIR,  			  DIR__ADD_NAME | DIR__SEARCH,  			  &ad);  	if (rc) @@ -1787,13 +1772,11 @@ static int may_create(struct inode *dir,  	if (rc)  		return rc; -	rc = avc_has_perm(&selinux_state, -			  sid, newsid, tclass, FILE__CREATE, &ad); +	rc = avc_has_perm(sid, newsid, tclass, FILE__CREATE, &ad);  	if (rc)  		return rc; -	return avc_has_perm(&selinux_state, -			    newsid, sbsec->sid, +	return avc_has_perm(newsid, sbsec->sid,  			    SECCLASS_FILESYSTEM,  			    FILESYSTEM__ASSOCIATE, &ad);  } @@ -1822,8 +1805,7 @@ static int may_link(struct inode *dir,  	av = DIR__SEARCH;  	av |= (kind ? DIR__REMOVE_NAME : DIR__ADD_NAME); -	rc = avc_has_perm(&selinux_state, -			  sid, dsec->sid, SECCLASS_DIR, av, &ad); +	rc = avc_has_perm(sid, dsec->sid, SECCLASS_DIR, av, &ad);  	if (rc)  		return rc; @@ -1843,8 +1825,7 @@ static int may_link(struct inode *dir,  		return 0;  	} -	rc = avc_has_perm(&selinux_state, -			  sid, isec->sid, isec->sclass, av, &ad); +	rc = avc_has_perm(sid, isec->sid, isec->sclass, av, &ad);  	return rc;  } @@ -1868,19 +1849,16 @@ static inline int may_rename(struct inode *old_dir,  	ad.type = LSM_AUDIT_DATA_DENTRY;  	ad.u.dentry = old_dentry; -	rc = avc_has_perm(&selinux_state, -			  sid, old_dsec->sid, SECCLASS_DIR, +	rc = avc_has_perm(sid, old_dsec->sid, SECCLASS_DIR,  			  DIR__REMOVE_NAME | DIR__SEARCH, &ad);  	if (rc)  		return rc; -	rc = avc_has_perm(&selinux_state, -			  sid, old_isec->sid, +	rc = avc_has_perm(sid, old_isec->sid,  			  old_isec->sclass, FILE__RENAME, &ad);  	if (rc)  		return rc;  	if (old_is_dir && new_dir != old_dir) { -		rc = avc_has_perm(&selinux_state, -				  sid, old_isec->sid, +		rc = avc_has_perm(sid, old_isec->sid,  				  old_isec->sclass, DIR__REPARENT, &ad);  		if (rc)  			return rc; @@ -1890,15 +1868,13 @@ static inline int may_rename(struct inode *old_dir,  	av = DIR__ADD_NAME | DIR__SEARCH;  	if (d_is_positive(new_dentry))  		av |= DIR__REMOVE_NAME; -	rc = avc_has_perm(&selinux_state, -			  sid, new_dsec->sid, SECCLASS_DIR, av, &ad); +	rc = avc_has_perm(sid, new_dsec->sid, SECCLASS_DIR, av, &ad);  	if (rc)  		return rc;  	if (d_is_positive(new_dentry)) {  		new_isec = backing_inode_security(new_dentry);  		new_is_dir = d_is_dir(new_dentry); -		rc = avc_has_perm(&selinux_state, -				  sid, new_isec->sid, +		rc = avc_has_perm(sid, new_isec->sid,  				  new_isec->sclass,  				  (new_is_dir ? DIR__RMDIR : FILE__UNLINK), &ad);  		if (rc) @@ -1918,8 +1894,7 @@ static int superblock_has_perm(const struct cred *cred,  	u32 sid = cred_sid(cred);  	sbsec = selinux_superblock(sb); -	return avc_has_perm(&selinux_state, -			    sid, sbsec->sid, SECCLASS_FILESYSTEM, perms, ad); +	return avc_has_perm(sid, sbsec->sid, SECCLASS_FILESYSTEM, perms, ad);  }  /* Convert a Linux mode and permission mask to an access vector. */ @@ -1993,8 +1968,7 @@ static inline u32 open_file_to_av(struct file *file)  static int selinux_binder_set_context_mgr(const struct cred *mgr)  { -	return avc_has_perm(&selinux_state, -			    current_sid(), cred_sid(mgr), SECCLASS_BINDER, +	return avc_has_perm(current_sid(), cred_sid(mgr), SECCLASS_BINDER,  			    BINDER__SET_CONTEXT_MGR, NULL);  } @@ -2007,22 +1981,20 @@ static int selinux_binder_transaction(const struct cred *from,  	int rc;  	if (mysid != fromsid) { -		rc = avc_has_perm(&selinux_state, -				  mysid, fromsid, SECCLASS_BINDER, +		rc = avc_has_perm(mysid, fromsid, SECCLASS_BINDER,  				  BINDER__IMPERSONATE, NULL);  		if (rc)  			return rc;  	} -	return avc_has_perm(&selinux_state, fromsid, tosid, +	return avc_has_perm(fromsid, tosid,  			    SECCLASS_BINDER, BINDER__CALL, NULL);  }  static int selinux_binder_transfer_binder(const struct cred *from,  					  const struct cred *to)  { -	return avc_has_perm(&selinux_state, -			    cred_sid(from), cred_sid(to), +	return avc_has_perm(cred_sid(from), cred_sid(to),  			    SECCLASS_BINDER, BINDER__TRANSFER,  			    NULL);  } @@ -2042,8 +2014,7 @@ static int selinux_binder_transfer_file(const struct cred *from,  	ad.u.path = file->f_path;  	if (sid != fsec->sid) { -		rc = avc_has_perm(&selinux_state, -				  sid, fsec->sid, +		rc = avc_has_perm(sid, fsec->sid,  				  SECCLASS_FD,  				  FD__USE,  				  &ad); @@ -2061,8 +2032,7 @@ static int selinux_binder_transfer_file(const struct cred *from,  		return 0;  	isec = backing_inode_security(dentry); -	return avc_has_perm(&selinux_state, -			    sid, isec->sid, isec->sclass, file_to_av(file), +	return avc_has_perm(sid, isec->sid, isec->sclass, file_to_av(file),  			    &ad);  } @@ -2073,26 +2043,24 @@ static int selinux_ptrace_access_check(struct task_struct *child,  	u32 csid = task_sid_obj(child);  	if (mode & PTRACE_MODE_READ) -		return avc_has_perm(&selinux_state, -				    sid, csid, SECCLASS_FILE, FILE__READ, NULL); +		return avc_has_perm(sid, csid, SECCLASS_FILE, FILE__READ, +				NULL); -	return avc_has_perm(&selinux_state, -			    sid, csid, SECCLASS_PROCESS, PROCESS__PTRACE, NULL); +	return avc_has_perm(sid, csid, SECCLASS_PROCESS, PROCESS__PTRACE, +			NULL);  }  static int selinux_ptrace_traceme(struct task_struct *parent)  { -	return avc_has_perm(&selinux_state, -			    task_sid_obj(parent), task_sid_obj(current), +	return avc_has_perm(task_sid_obj(parent), task_sid_obj(current),  			    SECCLASS_PROCESS, PROCESS__PTRACE, NULL);  }  static int selinux_capget(struct task_struct *target, kernel_cap_t *effective,  			  kernel_cap_t *inheritable, kernel_cap_t *permitted)  { -	return avc_has_perm(&selinux_state, -			    current_sid(), task_sid_obj(target), SECCLASS_PROCESS, -			    PROCESS__GETCAP, NULL); +	return avc_has_perm(current_sid(), task_sid_obj(target), +			SECCLASS_PROCESS, PROCESS__GETCAP, NULL);  }  static int selinux_capset(struct cred *new, const struct cred *old, @@ -2100,8 +2068,7 @@ static int selinux_capset(struct cred *new, const struct cred *old,  			  const kernel_cap_t *inheritable,  			  const kernel_cap_t *permitted)  { -	return avc_has_perm(&selinux_state, -			    cred_sid(old), cred_sid(new), SECCLASS_PROCESS, +	return avc_has_perm(cred_sid(old), cred_sid(new), SECCLASS_PROCESS,  			    PROCESS__SETCAP, NULL);  } @@ -2168,21 +2135,18 @@ static int selinux_syslog(int type)  	switch (type) {  	case SYSLOG_ACTION_READ_ALL:	/* Read last kernel messages */  	case SYSLOG_ACTION_SIZE_BUFFER:	/* Return size of the log buffer */ -		return avc_has_perm(&selinux_state, -				    current_sid(), SECINITSID_KERNEL, +		return avc_has_perm(current_sid(), SECINITSID_KERNEL,  				    SECCLASS_SYSTEM, SYSTEM__SYSLOG_READ, NULL);  	case SYSLOG_ACTION_CONSOLE_OFF:	/* Disable logging to console */  	case SYSLOG_ACTION_CONSOLE_ON:	/* Enable logging to console */  	/* Set level of messages printed to console */  	case SYSLOG_ACTION_CONSOLE_LEVEL: -		return avc_has_perm(&selinux_state, -				    current_sid(), SECINITSID_KERNEL, +		return avc_has_perm(current_sid(), SECINITSID_KERNEL,  				    SECCLASS_SYSTEM, SYSTEM__SYSLOG_CONSOLE,  				    NULL);  	}  	/* All other syslog types */ -	return avc_has_perm(&selinux_state, -			    current_sid(), SECINITSID_KERNEL, +	return avc_has_perm(current_sid(), SECINITSID_KERNEL,  			    SECCLASS_SYSTEM, SYSTEM__SYSLOG_MOD, NULL);  } @@ -2249,8 +2213,7 @@ static int check_nnp_nosuid(const struct linux_binprm *bprm,  			av |= PROCESS2__NNP_TRANSITION;  		if (nosuid)  			av |= PROCESS2__NOSUID_TRANSITION; -		rc = avc_has_perm(&selinux_state, -				  old_tsec->sid, new_tsec->sid, +		rc = avc_has_perm(old_tsec->sid, new_tsec->sid,  				  SECCLASS_PROCESS2, av, NULL);  		if (!rc)  			return 0; @@ -2261,7 +2224,7 @@ static int check_nnp_nosuid(const struct linux_binprm *bprm,  	 * i.e. SIDs that are guaranteed to only be allowed a subset  	 * of the permissions of the current SID.  	 */ -	rc = security_bounded_transition(&selinux_state, old_tsec->sid, +	rc = security_bounded_transition(old_tsec->sid,  					 new_tsec->sid);  	if (!rc)  		return 0; @@ -2312,7 +2275,7 @@ static int selinux_bprm_creds_for_exec(struct linux_binprm *bprm)  			return rc;  	} else {  		/* Check for a default transition on this program. */ -		rc = security_transition_sid(&selinux_state, old_tsec->sid, +		rc = security_transition_sid(old_tsec->sid,  					     isec->sid, SECCLASS_PROCESS, NULL,  					     &new_tsec->sid);  		if (rc) @@ -2331,29 +2294,25 @@ static int selinux_bprm_creds_for_exec(struct linux_binprm *bprm)  	ad.u.file = bprm->file;  	if (new_tsec->sid == old_tsec->sid) { -		rc = avc_has_perm(&selinux_state, -				  old_tsec->sid, isec->sid, +		rc = avc_has_perm(old_tsec->sid, isec->sid,  				  SECCLASS_FILE, FILE__EXECUTE_NO_TRANS, &ad);  		if (rc)  			return rc;  	} else {  		/* Check permissions for the transition. */ -		rc = avc_has_perm(&selinux_state, -				  old_tsec->sid, new_tsec->sid, +		rc = avc_has_perm(old_tsec->sid, new_tsec->sid,  				  SECCLASS_PROCESS, PROCESS__TRANSITION, &ad);  		if (rc)  			return rc; -		rc = avc_has_perm(&selinux_state, -				  new_tsec->sid, isec->sid, +		rc = avc_has_perm(new_tsec->sid, isec->sid,  				  SECCLASS_FILE, FILE__ENTRYPOINT, &ad);  		if (rc)  			return rc;  		/* Check for shared state */  		if (bprm->unsafe & LSM_UNSAFE_SHARE) { -			rc = avc_has_perm(&selinux_state, -					  old_tsec->sid, new_tsec->sid, +			rc = avc_has_perm(old_tsec->sid, new_tsec->sid,  					  SECCLASS_PROCESS, PROCESS__SHARE,  					  NULL);  			if (rc) @@ -2365,8 +2324,7 @@ static int selinux_bprm_creds_for_exec(struct linux_binprm *bprm)  		if (bprm->unsafe & LSM_UNSAFE_PTRACE) {  			u32 ptsid = ptrace_parent_sid();  			if (ptsid != 0) { -				rc = avc_has_perm(&selinux_state, -						  ptsid, new_tsec->sid, +				rc = avc_has_perm(ptsid, new_tsec->sid,  						  SECCLASS_PROCESS,  						  PROCESS__PTRACE, NULL);  				if (rc) @@ -2380,8 +2338,7 @@ static int selinux_bprm_creds_for_exec(struct linux_binprm *bprm)  		/* Enable secure mode for SIDs transitions unless  		   the noatsecure permission is granted between  		   the two SIDs, i.e. ahp returns 0. */ -		rc = avc_has_perm(&selinux_state, -				  old_tsec->sid, new_tsec->sid, +		rc = avc_has_perm(old_tsec->sid, new_tsec->sid,  				  SECCLASS_PROCESS, PROCESS__NOATSECURE,  				  NULL);  		bprm->secureexec |= !!rc; @@ -2473,8 +2430,7 @@ static void selinux_bprm_committing_creds(struct linux_binprm *bprm)  	 * higher than the default soft limit for cases where the default is  	 * lower than the hard limit, e.g. RLIMIT_CORE or RLIMIT_STACK.  	 */ -	rc = avc_has_perm(&selinux_state, -			  new_tsec->osid, new_tsec->sid, SECCLASS_PROCESS, +	rc = avc_has_perm(new_tsec->osid, new_tsec->sid, SECCLASS_PROCESS,  			  PROCESS__RLIMITINH, NULL);  	if (rc) {  		/* protect against do_prlimit() */ @@ -2513,8 +2469,7 @@ static void selinux_bprm_committed_creds(struct linux_binprm *bprm)  	 * This must occur _after_ the task SID has been updated so that any  	 * kill done after the flush will be checked against the new SID.  	 */ -	rc = avc_has_perm(&selinux_state, -			  osid, sid, SECCLASS_PROCESS, PROCESS__SIGINH, NULL); +	rc = avc_has_perm(osid, sid, SECCLASS_PROCESS, PROCESS__SIGINH, NULL);  	if (rc) {  		clear_itimer(); @@ -2841,7 +2796,7 @@ static int selinux_dentry_init_security(struct dentry *dentry, int mode,  	if (xattr_name)  		*xattr_name = XATTR_NAME_SELINUX; -	return security_sid_to_context(&selinux_state, newsid, (char **)ctx, +	return security_sid_to_context(newsid, (char **)ctx,  				       ctxlen);  } @@ -2895,7 +2850,7 @@ static int selinux_inode_init_security(struct inode *inode, struct inode *dir,  		isec->initialized = LABEL_INITIALIZED;  	} -	if (!selinux_initialized(&selinux_state) || +	if (!selinux_initialized() ||  	    !(sbsec->flags & SBLABEL_MNT))  		return -EOPNOTSUPP; @@ -2903,7 +2858,7 @@ static int selinux_inode_init_security(struct inode *inode, struct inode *dir,  		*name = XATTR_SELINUX_SUFFIX;  	if (value && len) { -		rc = security_sid_to_context_force(&selinux_state, newsid, +		rc = security_sid_to_context_force(newsid,  						   &context, &clen);  		if (rc)  			return rc; @@ -2923,7 +2878,7 @@ static int selinux_inode_init_security_anon(struct inode *inode,  	struct inode_security_struct *isec;  	int rc; -	if (unlikely(!selinux_initialized(&selinux_state))) +	if (unlikely(!selinux_initialized()))  		return 0;  	isec = selinux_inode(inode); @@ -2947,7 +2902,7 @@ static int selinux_inode_init_security_anon(struct inode *inode,  	} else {  		isec->sclass = SECCLASS_ANON_INODE;  		rc = security_transition_sid( -			&selinux_state, tsec->sid, tsec->sid, +			tsec->sid, tsec->sid,  			isec->sclass, name, &isec->sid);  		if (rc)  			return rc; @@ -2962,8 +2917,7 @@ static int selinux_inode_init_security_anon(struct inode *inode,  	ad.type = LSM_AUDIT_DATA_ANONINODE;  	ad.u.anonclass = name ? (const char *)name->name : "?"; -	return avc_has_perm(&selinux_state, -			    tsec->sid, +	return avc_has_perm(tsec->sid,  			    isec->sid,  			    isec->sclass,  			    FILE__CREATE, @@ -3035,8 +2989,7 @@ static int selinux_inode_follow_link(struct dentry *dentry, struct inode *inode,  	if (IS_ERR(isec))  		return PTR_ERR(isec); -	return avc_has_perm(&selinux_state, -				  sid, isec->sid, isec->sclass, FILE__READ, &ad); +	return avc_has_perm(sid, isec->sid, isec->sclass, FILE__READ, &ad);  }  static noinline int audit_inode_permission(struct inode *inode, @@ -3049,8 +3002,7 @@ static noinline int audit_inode_permission(struct inode *inode,  	ad.type = LSM_AUDIT_DATA_INODE;  	ad.u.inode = inode; -	return slow_avc_audit(&selinux_state, -			    current_sid(), isec->sid, isec->sclass, perms, +	return slow_avc_audit(current_sid(), isec->sid, isec->sclass, perms,  			    audited, denied, result, &ad);  } @@ -3085,8 +3037,7 @@ static int selinux_inode_permission(struct inode *inode, int mask)  	if (IS_ERR(isec))  		return PTR_ERR(isec); -	rc = avc_has_perm_noaudit(&selinux_state, -				  sid, isec->sid, isec->sclass, perms, 0, +	rc = avc_has_perm_noaudit(sid, isec->sid, isec->sclass, perms, 0,  				  &avd);  	audited = avc_audit_required(perms, &avd, rc,  				     from_access ? FILE__AUDIT_ACCESS : 0, @@ -3166,7 +3117,7 @@ static int selinux_inode_setxattr(struct mnt_idmap *idmap,  		return dentry_has_perm(current_cred(), dentry, FILE__SETATTR);  	} -	if (!selinux_initialized(&selinux_state)) +	if (!selinux_initialized())  		return (inode_owner_or_capable(idmap, inode) ? 0 : -EPERM);  	sbsec = selinux_superblock(inode->i_sb); @@ -3180,13 +3131,12 @@ static int selinux_inode_setxattr(struct mnt_idmap *idmap,  	ad.u.dentry = dentry;  	isec = backing_inode_security(dentry); -	rc = avc_has_perm(&selinux_state, -			  sid, isec->sid, isec->sclass, +	rc = avc_has_perm(sid, isec->sid, isec->sclass,  			  FILE__RELABELFROM, &ad);  	if (rc)  		return rc; -	rc = security_context_to_sid(&selinux_state, value, size, &newsid, +	rc = security_context_to_sid(value, size, &newsid,  				     GFP_KERNEL);  	if (rc == -EINVAL) {  		if (!has_cap_mac_admin(true)) { @@ -3215,25 +3165,23 @@ static int selinux_inode_setxattr(struct mnt_idmap *idmap,  			return rc;  		} -		rc = security_context_to_sid_force(&selinux_state, value, +		rc = security_context_to_sid_force(value,  						   size, &newsid);  	}  	if (rc)  		return rc; -	rc = avc_has_perm(&selinux_state, -			  sid, newsid, isec->sclass, +	rc = avc_has_perm(sid, newsid, isec->sclass,  			  FILE__RELABELTO, &ad);  	if (rc)  		return rc; -	rc = security_validate_transition(&selinux_state, isec->sid, newsid, +	rc = security_validate_transition(isec->sid, newsid,  					  sid, isec->sclass);  	if (rc)  		return rc; -	return avc_has_perm(&selinux_state, -			    newsid, +	return avc_has_perm(newsid,  			    sbsec->sid,  			    SECCLASS_FILESYSTEM,  			    FILESYSTEM__ASSOCIATE, @@ -3273,7 +3221,7 @@ static void selinux_inode_post_setxattr(struct dentry *dentry, const char *name,  		return;  	} -	if (!selinux_initialized(&selinux_state)) { +	if (!selinux_initialized()) {  		/* If we haven't even been initialized, then we can't validate  		 * against a policy, so leave the label as invalid. It may  		 * resolve to a valid label on the next revalidation try if @@ -3282,7 +3230,7 @@ static void selinux_inode_post_setxattr(struct dentry *dentry, const char *name,  		return;  	} -	rc = security_context_to_sid_force(&selinux_state, value, size, +	rc = security_context_to_sid_force(value, size,  					   &newsid);  	if (rc) {  		pr_err("SELinux:  unable to map context to SID" @@ -3326,7 +3274,7 @@ static int selinux_inode_removexattr(struct mnt_idmap *idmap,  		return dentry_has_perm(current_cred(), dentry, FILE__SETATTR);  	} -	if (!selinux_initialized(&selinux_state)) +	if (!selinux_initialized())  		return 0;  	/* No one is allowed to remove a SELinux security label. @@ -3396,7 +3344,7 @@ static int selinux_inode_getsecurity(struct mnt_idmap *idmap,  	 * If we're not initialized yet, then we can't validate contexts, so  	 * just let vfs_getxattr fall back to using the on-disk xattr.  	 */ -	if (!selinux_initialized(&selinux_state) || +	if (!selinux_initialized() ||  	    strcmp(name, XATTR_SELINUX_SUFFIX))  		return -EOPNOTSUPP; @@ -3411,11 +3359,10 @@ static int selinux_inode_getsecurity(struct mnt_idmap *idmap,  	 */  	isec = inode_security(inode);  	if (has_cap_mac_admin(false)) -		error = security_sid_to_context_force(&selinux_state, -						      isec->sid, &context, +		error = security_sid_to_context_force(isec->sid, &context,  						      &size);  	else -		error = security_sid_to_context(&selinux_state, isec->sid, +		error = security_sid_to_context(isec->sid,  						&context, &size);  	if (error)  		return error; @@ -3447,7 +3394,7 @@ static int selinux_inode_setsecurity(struct inode *inode, const char *name,  	if (!value || !size)  		return -EACCES; -	rc = security_context_to_sid(&selinux_state, value, size, &newsid, +	rc = security_context_to_sid(value, size, &newsid,  				     GFP_KERNEL);  	if (rc)  		return rc; @@ -3464,7 +3411,7 @@ static int selinux_inode_listsecurity(struct inode *inode, char *buffer, size_t  {  	const int len = sizeof(XATTR_NAME_SELINUX); -	if (!selinux_initialized(&selinux_state)) +	if (!selinux_initialized())  		return 0;  	if (buffer && len <= buffer_size) @@ -3540,7 +3487,7 @@ static int selinux_kernfs_init_security(struct kernfs_node *kn_dir,  		return rc;  	} -	rc = security_context_to_sid(&selinux_state, context, clen, &parent_sid, +	rc = security_context_to_sid(context, clen, &parent_sid,  				     GFP_KERNEL);  	kfree(context);  	if (rc) @@ -3555,14 +3502,14 @@ static int selinux_kernfs_init_security(struct kernfs_node *kn_dir,  		q.name = kn->name;  		q.hash_len = hashlen_string(kn_dir, kn->name); -		rc = security_transition_sid(&selinux_state, tsec->sid, +		rc = security_transition_sid(tsec->sid,  					     parent_sid, secclass, &q,  					     &newsid);  		if (rc)  			return rc;  	} -	rc = security_sid_to_context_force(&selinux_state, newsid, +	rc = security_sid_to_context_force(newsid,  					   &context, &clen);  	if (rc)  		return rc; @@ -3602,7 +3549,7 @@ static int selinux_file_permission(struct file *file, int mask)  	isec = inode_security(inode);  	if (sid == fsec->sid && fsec->isid == isec->sid && -	    fsec->pseqno == avc_policy_seqno(&selinux_state)) +	    fsec->pseqno == avc_policy_seqno())  		/* No change since file_open check. */  		return 0; @@ -3643,8 +3590,7 @@ static int ioctl_has_perm(const struct cred *cred, struct file *file,  	ad.u.op->path = file->f_path;  	if (ssid != fsec->sid) { -		rc = avc_has_perm(&selinux_state, -				  ssid, fsec->sid, +		rc = avc_has_perm(ssid, fsec->sid,  				SECCLASS_FD,  				FD__USE,  				&ad); @@ -3656,8 +3602,7 @@ static int ioctl_has_perm(const struct cred *cred, struct file *file,  		return 0;  	isec = inode_security(inode); -	rc = avc_has_extended_perms(&selinux_state, -				    ssid, isec->sid, isec->sclass, +	rc = avc_has_extended_perms(ssid, isec->sid, isec->sclass,  				    requested, driver, xperm, &ad);  out:  	return rc; @@ -3726,8 +3671,7 @@ static int file_map_prot_check(struct file *file, unsigned long prot, int shared  		 * private file mapping that will also be writable.  		 * This has an additional check.  		 */ -		rc = avc_has_perm(&selinux_state, -				  sid, sid, SECCLASS_PROCESS, +		rc = avc_has_perm(sid, sid, SECCLASS_PROCESS,  				  PROCESS__EXECMEM, NULL);  		if (rc)  			goto error; @@ -3757,15 +3701,15 @@ static int selinux_mmap_addr(unsigned long addr)  	if (addr < CONFIG_LSM_MMAP_MIN_ADDR) {  		u32 sid = current_sid(); -		rc = avc_has_perm(&selinux_state, -				  sid, sid, SECCLASS_MEMPROTECT, +		rc = avc_has_perm(sid, sid, SECCLASS_MEMPROTECT,  				  MEMPROTECT__MMAP_ZERO, NULL);  	}  	return rc;  } -static int selinux_mmap_file(struct file *file, unsigned long reqprot, +static int selinux_mmap_file(struct file *file, +			     unsigned long reqprot __always_unused,  			     unsigned long prot, unsigned long flags)  {  	struct common_audit_data ad; @@ -3780,37 +3724,29 @@ static int selinux_mmap_file(struct file *file, unsigned long reqprot,  			return rc;  	} -	if (checkreqprot_get(&selinux_state)) -		prot = reqprot; -  	return file_map_prot_check(file, prot,  				   (flags & MAP_TYPE) == MAP_SHARED);  }  static int selinux_file_mprotect(struct vm_area_struct *vma, -				 unsigned long reqprot, +				 unsigned long reqprot __always_unused,  				 unsigned long prot)  {  	const struct cred *cred = current_cred();  	u32 sid = cred_sid(cred); -	if (checkreqprot_get(&selinux_state)) -		prot = reqprot; -  	if (default_noexec &&  	    (prot & PROT_EXEC) && !(vma->vm_flags & VM_EXEC)) {  		int rc = 0;  		if (vma->vm_start >= vma->vm_mm->start_brk &&  		    vma->vm_end <= vma->vm_mm->brk) { -			rc = avc_has_perm(&selinux_state, -					  sid, sid, SECCLASS_PROCESS, +			rc = avc_has_perm(sid, sid, SECCLASS_PROCESS,  					  PROCESS__EXECHEAP, NULL);  		} else if (!vma->vm_file &&  			   ((vma->vm_start <= vma->vm_mm->start_stack &&  			     vma->vm_end >= vma->vm_mm->start_stack) ||  			    vma_is_stack_for_current(vma))) { -			rc = avc_has_perm(&selinux_state, -					  sid, sid, SECCLASS_PROCESS, +			rc = avc_has_perm(sid, sid, SECCLASS_PROCESS,  					  PROCESS__EXECSTACK, NULL);  		} else if (vma->vm_file && vma->anon_vma) {  			/* @@ -3902,8 +3838,7 @@ static int selinux_file_send_sigiotask(struct task_struct *tsk,  	else  		perm = signal_to_av(signum); -	return avc_has_perm(&selinux_state, -			    fsec->fown_sid, sid, +	return avc_has_perm(fsec->fown_sid, sid,  			    SECCLASS_PROCESS, perm, NULL);  } @@ -3929,7 +3864,7 @@ static int selinux_file_open(struct file *file)  	 * struct as its SID.  	 */  	fsec->isid = isec->sid; -	fsec->pseqno = avc_policy_seqno(&selinux_state); +	fsec->pseqno = avc_policy_seqno();  	/*  	 * Since the inode label or policy seqno may have changed  	 * between the selinux_inode_permission check and the saving @@ -3948,8 +3883,7 @@ static int selinux_task_alloc(struct task_struct *task,  {  	u32 sid = current_sid(); -	return avc_has_perm(&selinux_state, -			    sid, sid, SECCLASS_PROCESS, PROCESS__FORK, NULL); +	return avc_has_perm(sid, sid, SECCLASS_PROCESS, PROCESS__FORK, NULL);  }  /* @@ -3991,8 +3925,7 @@ static int selinux_kernel_act_as(struct cred *new, u32 secid)  	u32 sid = current_sid();  	int ret; -	ret = avc_has_perm(&selinux_state, -			   sid, secid, +	ret = avc_has_perm(sid, secid,  			   SECCLASS_KERNEL_SERVICE,  			   KERNEL_SERVICE__USE_AS_OVERRIDE,  			   NULL); @@ -4016,8 +3949,7 @@ static int selinux_kernel_create_files_as(struct cred *new, struct inode *inode)  	u32 sid = current_sid();  	int ret; -	ret = avc_has_perm(&selinux_state, -			   sid, isec->sid, +	ret = avc_has_perm(sid, isec->sid,  			   SECCLASS_KERNEL_SERVICE,  			   KERNEL_SERVICE__CREATE_FILES_AS,  			   NULL); @@ -4034,8 +3966,7 @@ static int selinux_kernel_module_request(char *kmod_name)  	ad.type = LSM_AUDIT_DATA_KMOD;  	ad.u.kmod_name = kmod_name; -	return avc_has_perm(&selinux_state, -			    current_sid(), SECINITSID_KERNEL, SECCLASS_SYSTEM, +	return avc_has_perm(current_sid(), SECINITSID_KERNEL, SECCLASS_SYSTEM,  			    SYSTEM__MODULE_REQUEST, &ad);  } @@ -4049,8 +3980,7 @@ static int selinux_kernel_module_from_file(struct file *file)  	/* init_module */  	if (file == NULL) -		return avc_has_perm(&selinux_state, -				    sid, sid, SECCLASS_SYSTEM, +		return avc_has_perm(sid, sid, SECCLASS_SYSTEM,  					SYSTEM__MODULE_LOAD, NULL);  	/* finit_module */ @@ -4060,15 +3990,13 @@ static int selinux_kernel_module_from_file(struct file *file)  	fsec = selinux_file(file);  	if (sid != fsec->sid) { -		rc = avc_has_perm(&selinux_state, -				  sid, fsec->sid, SECCLASS_FD, FD__USE, &ad); +		rc = avc_has_perm(sid, fsec->sid, SECCLASS_FD, FD__USE, &ad);  		if (rc)  			return rc;  	}  	isec = inode_security(file_inode(file)); -	return avc_has_perm(&selinux_state, -			    sid, isec->sid, SECCLASS_SYSTEM, +	return avc_has_perm(sid, isec->sid, SECCLASS_SYSTEM,  				SYSTEM__MODULE_LOAD, &ad);  } @@ -4106,22 +4034,19 @@ static int selinux_kernel_load_data(enum kernel_load_data_id id, bool contents)  static int selinux_task_setpgid(struct task_struct *p, pid_t pgid)  { -	return avc_has_perm(&selinux_state, -			    current_sid(), task_sid_obj(p), SECCLASS_PROCESS, +	return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS,  			    PROCESS__SETPGID, NULL);  }  static int selinux_task_getpgid(struct task_struct *p)  { -	return avc_has_perm(&selinux_state, -			    current_sid(), task_sid_obj(p), SECCLASS_PROCESS, +	return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS,  			    PROCESS__GETPGID, NULL);  }  static int selinux_task_getsid(struct task_struct *p)  { -	return avc_has_perm(&selinux_state, -			    current_sid(), task_sid_obj(p), SECCLASS_PROCESS, +	return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS,  			    PROCESS__GETSESSION, NULL);  } @@ -4137,22 +4062,19 @@ static void selinux_task_getsecid_obj(struct task_struct *p, u32 *secid)  static int selinux_task_setnice(struct task_struct *p, int nice)  { -	return avc_has_perm(&selinux_state, -			    current_sid(), task_sid_obj(p), SECCLASS_PROCESS, +	return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS,  			    PROCESS__SETSCHED, NULL);  }  static int selinux_task_setioprio(struct task_struct *p, int ioprio)  { -	return avc_has_perm(&selinux_state, -			    current_sid(), task_sid_obj(p), SECCLASS_PROCESS, +	return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS,  			    PROCESS__SETSCHED, NULL);  }  static int selinux_task_getioprio(struct task_struct *p)  { -	return avc_has_perm(&selinux_state, -			    current_sid(), task_sid_obj(p), SECCLASS_PROCESS, +	return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS,  			    PROCESS__GETSCHED, NULL);  } @@ -4167,8 +4089,7 @@ static int selinux_task_prlimit(const struct cred *cred, const struct cred *tcre  		av |= PROCESS__SETRLIMIT;  	if (flags & LSM_PRLIMIT_READ)  		av |= PROCESS__GETRLIMIT; -	return avc_has_perm(&selinux_state, -			    cred_sid(cred), cred_sid(tcred), +	return avc_has_perm(cred_sid(cred), cred_sid(tcred),  			    SECCLASS_PROCESS, av, NULL);  } @@ -4182,8 +4103,7 @@ static int selinux_task_setrlimit(struct task_struct *p, unsigned int resource,  	   later be used as a safe reset point for the soft limit  	   upon context transitions.  See selinux_bprm_committing_creds. */  	if (old_rlim->rlim_max != new_rlim->rlim_max) -		return avc_has_perm(&selinux_state, -				    current_sid(), task_sid_obj(p), +		return avc_has_perm(current_sid(), task_sid_obj(p),  				    SECCLASS_PROCESS, PROCESS__SETRLIMIT, NULL);  	return 0; @@ -4191,22 +4111,19 @@ static int selinux_task_setrlimit(struct task_struct *p, unsigned int resource,  static int selinux_task_setscheduler(struct task_struct *p)  { -	return avc_has_perm(&selinux_state, -			    current_sid(), task_sid_obj(p), SECCLASS_PROCESS, +	return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS,  			    PROCESS__SETSCHED, NULL);  }  static int selinux_task_getscheduler(struct task_struct *p)  { -	return avc_has_perm(&selinux_state, -			    current_sid(), task_sid_obj(p), SECCLASS_PROCESS, +	return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS,  			    PROCESS__GETSCHED, NULL);  }  static int selinux_task_movememory(struct task_struct *p)  { -	return avc_has_perm(&selinux_state, -			    current_sid(), task_sid_obj(p), SECCLASS_PROCESS, +	return avc_has_perm(current_sid(), task_sid_obj(p), SECCLASS_PROCESS,  			    PROCESS__SETSCHED, NULL);  } @@ -4224,8 +4141,7 @@ static int selinux_task_kill(struct task_struct *p, struct kernel_siginfo *info,  		secid = current_sid();  	else  		secid = cred_sid(cred); -	return avc_has_perm(&selinux_state, -			    secid, task_sid_obj(p), SECCLASS_PROCESS, perm, NULL); +	return avc_has_perm(secid, task_sid_obj(p), SECCLASS_PROCESS, perm, NULL);  }  static void selinux_task_to_inode(struct task_struct *p, @@ -4245,8 +4161,8 @@ static int selinux_userns_create(const struct cred *cred)  {  	u32 sid = current_sid(); -	return avc_has_perm(&selinux_state, sid, sid, SECCLASS_USER_NAMESPACE, -						USER_NAMESPACE__CREATE, NULL); +	return avc_has_perm(sid, sid, SECCLASS_USER_NAMESPACE, +			USER_NAMESPACE__CREATE, NULL);  }  /* Returns error only if unable to parse addresses */ @@ -4504,7 +4420,7 @@ static int selinux_skb_peerlbl_sid(struct sk_buff *skb, u16 family, u32 *sid)  	if (unlikely(err))  		return -EACCES; -	err = security_net_peersid_resolve(&selinux_state, nlbl_sid, +	err = security_net_peersid_resolve(nlbl_sid,  					   nlbl_type, xfrm_sid, sid);  	if (unlikely(err)) {  		pr_warn( @@ -4533,7 +4449,7 @@ static int selinux_conn_sid(u32 sk_sid, u32 skb_sid, u32 *conn_sid)  	int err = 0;  	if (skb_sid != SECSID_NULL) -		err = security_sid_mls_copy(&selinux_state, sk_sid, skb_sid, +		err = security_sid_mls_copy(sk_sid, skb_sid,  					    conn_sid);  	else  		*conn_sid = sk_sid; @@ -4551,7 +4467,7 @@ static int socket_sockcreate_sid(const struct task_security_struct *tsec,  		return 0;  	} -	return security_transition_sid(&selinux_state, tsec->sid, tsec->sid, +	return security_transition_sid(tsec->sid, tsec->sid,  				       secclass, NULL, socksid);  } @@ -4568,8 +4484,7 @@ static int sock_has_perm(struct sock *sk, u32 perms)  	ad.u.net = &net;  	ad.u.net->sk = sk; -	return avc_has_perm(&selinux_state, -			    current_sid(), sksec->sid, sksec->sclass, perms, +	return avc_has_perm(current_sid(), sksec->sid, sksec->sclass, perms,  			    &ad);  } @@ -4589,8 +4504,7 @@ static int selinux_socket_create(int family, int type,  	if (rc)  		return rc; -	return avc_has_perm(&selinux_state, -			    tsec->sid, newsid, secclass, SOCKET__CREATE, NULL); +	return avc_has_perm(tsec->sid, newsid, secclass, SOCKET__CREATE, NULL);  }  static int selinux_socket_post_create(struct socket *sock, int family, @@ -4719,8 +4633,7 @@ static int selinux_socket_bind(struct socket *sock, struct sockaddr *address, in  						      snum, &sid);  				if (err)  					goto out; -				err = avc_has_perm(&selinux_state, -						   sksec->sid, sid, +				err = avc_has_perm(sksec->sid, sid,  						   sksec->sclass,  						   SOCKET__NAME_BIND, &ad);  				if (err) @@ -4759,8 +4672,7 @@ static int selinux_socket_bind(struct socket *sock, struct sockaddr *address, in  		else  			ad.u.net->v6info.saddr = addr6->sin6_addr; -		err = avc_has_perm(&selinux_state, -				   sksec->sid, sid, +		err = avc_has_perm(sksec->sid, sid,  				   sksec->sclass, node_perm, &ad);  		if (err)  			goto out; @@ -4858,8 +4770,7 @@ static int selinux_socket_connect_helper(struct socket *sock,  		ad.u.net = &net;  		ad.u.net->dport = htons(snum);  		ad.u.net->family = address->sa_family; -		err = avc_has_perm(&selinux_state, -				   sksec->sid, sid, sksec->sclass, perm, &ad); +		err = avc_has_perm(sksec->sid, sid, sksec->sclass, perm, &ad);  		if (err)  			return err;  	} @@ -4971,8 +4882,7 @@ static int selinux_socket_unix_stream_connect(struct sock *sock,  	ad.u.net = &net;  	ad.u.net->sk = other; -	err = avc_has_perm(&selinux_state, -			   sksec_sock->sid, sksec_other->sid, +	err = avc_has_perm(sksec_sock->sid, sksec_other->sid,  			   sksec_other->sclass,  			   UNIX_STREAM_SOCKET__CONNECTTO, &ad);  	if (err) @@ -4980,7 +4890,7 @@ static int selinux_socket_unix_stream_connect(struct sock *sock,  	/* server child socket */  	sksec_new->peer_sid = sksec_sock->sid; -	err = security_sid_mls_copy(&selinux_state, sksec_other->sid, +	err = security_sid_mls_copy(sksec_other->sid,  				    sksec_sock->sid, &sksec_new->sid);  	if (err)  		return err; @@ -5003,8 +4913,7 @@ static int selinux_socket_unix_may_send(struct socket *sock,  	ad.u.net = &net;  	ad.u.net->sk = other->sk; -	return avc_has_perm(&selinux_state, -			    ssec->sid, osec->sid, osec->sclass, SOCKET__SENDTO, +	return avc_has_perm(ssec->sid, osec->sid, osec->sclass, SOCKET__SENDTO,  			    &ad);  } @@ -5019,8 +4928,7 @@ static int selinux_inet_sys_rcv_skb(struct net *ns, int ifindex,  	err = sel_netif_sid(ns, ifindex, &if_sid);  	if (err)  		return err; -	err = avc_has_perm(&selinux_state, -			   peer_sid, if_sid, +	err = avc_has_perm(peer_sid, if_sid,  			   SECCLASS_NETIF, NETIF__INGRESS, ad);  	if (err)  		return err; @@ -5028,8 +4936,7 @@ static int selinux_inet_sys_rcv_skb(struct net *ns, int ifindex,  	err = sel_netnode_sid(addrp, family, &node_sid);  	if (err)  		return err; -	return avc_has_perm(&selinux_state, -			    peer_sid, node_sid, +	return avc_has_perm(peer_sid, node_sid,  			    SECCLASS_NODE, NODE__RECVFROM, ad);  } @@ -5052,8 +4959,7 @@ static int selinux_sock_rcv_skb_compat(struct sock *sk, struct sk_buff *skb,  		return err;  	if (selinux_secmark_enabled()) { -		err = avc_has_perm(&selinux_state, -				   sk_sid, skb->secmark, SECCLASS_PACKET, +		err = avc_has_perm(sk_sid, skb->secmark, SECCLASS_PACKET,  				   PACKET__RECV, &ad);  		if (err)  			return err; @@ -5118,8 +5024,7 @@ static int selinux_socket_sock_rcv_skb(struct sock *sk, struct sk_buff *skb)  			selinux_netlbl_err(skb, family, err, 0);  			return err;  		} -		err = avc_has_perm(&selinux_state, -				   sk_sid, peer_sid, SECCLASS_PEER, +		err = avc_has_perm(sk_sid, peer_sid, SECCLASS_PEER,  				   PEER__RECV, &ad);  		if (err) {  			selinux_netlbl_err(skb, family, err, 0); @@ -5128,8 +5033,7 @@ static int selinux_socket_sock_rcv_skb(struct sock *sk, struct sk_buff *skb)  	}  	if (secmark_active) { -		err = avc_has_perm(&selinux_state, -				   sk_sid, skb->secmark, SECCLASS_PACKET, +		err = avc_has_perm(sk_sid, skb->secmark, SECCLASS_PACKET,  				   PACKET__RECV, &ad);  		if (err)  			return err; @@ -5155,7 +5059,7 @@ static int selinux_socket_getpeersec_stream(struct socket *sock,  	if (peer_sid == SECSID_NULL)  		return -ENOPROTOOPT; -	err = security_sid_to_context(&selinux_state, peer_sid, &scontext, +	err = security_sid_to_context(peer_sid, &scontext,  				      &scontext_len);  	if (err)  		return err; @@ -5312,8 +5216,7 @@ static int selinux_sctp_process_new_assoc(struct sctp_association *asoc,  		ad.type = LSM_AUDIT_DATA_NET;  		ad.u.net = &net;  		ad.u.net->sk = asoc->base.sk; -		err = avc_has_perm(&selinux_state, -				   sksec->peer_sid, asoc->peer_secid, +		err = avc_has_perm(sksec->peer_sid, asoc->peer_secid,  				   sksec->sclass, SCTP_SOCKET__ASSOCIATION,  				   &ad);  		if (err) @@ -5534,8 +5437,7 @@ static int selinux_secmark_relabel_packet(u32 sid)  	__tsec = selinux_cred(current_cred());  	tsid = __tsec->sid; -	return avc_has_perm(&selinux_state, -			    tsid, sid, SECCLASS_PACKET, PACKET__RELABELTO, +	return avc_has_perm(tsid, sid, SECCLASS_PACKET, PACKET__RELABELTO,  			    NULL);  } @@ -5584,8 +5486,7 @@ static int selinux_tun_dev_create(void)  	 * connections unlike traditional sockets - check the TUN driver to  	 * get a better understanding of why this socket is special */ -	return avc_has_perm(&selinux_state, -			    sid, sid, SECCLASS_TUN_SOCKET, TUN_SOCKET__CREATE, +	return avc_has_perm(sid, sid, SECCLASS_TUN_SOCKET, TUN_SOCKET__CREATE,  			    NULL);  } @@ -5593,8 +5494,7 @@ static int selinux_tun_dev_attach_queue(void *security)  {  	struct tun_security_struct *tunsec = security; -	return avc_has_perm(&selinux_state, -			    current_sid(), tunsec->sid, SECCLASS_TUN_SOCKET, +	return avc_has_perm(current_sid(), tunsec->sid, SECCLASS_TUN_SOCKET,  			    TUN_SOCKET__ATTACH_QUEUE, NULL);  } @@ -5622,13 +5522,11 @@ static int selinux_tun_dev_open(void *security)  	u32 sid = current_sid();  	int err; -	err = avc_has_perm(&selinux_state, -			   sid, tunsec->sid, SECCLASS_TUN_SOCKET, +	err = avc_has_perm(sid, tunsec->sid, SECCLASS_TUN_SOCKET,  			   TUN_SOCKET__RELABELFROM, NULL);  	if (err)  		return err; -	err = avc_has_perm(&selinux_state, -			   sid, sid, SECCLASS_TUN_SOCKET, +	err = avc_has_perm(sid, sid, SECCLASS_TUN_SOCKET,  			   TUN_SOCKET__RELABELTO, NULL);  	if (err)  		return err; @@ -5682,8 +5580,7 @@ static unsigned int selinux_ip_forward(void *priv, struct sk_buff *skb,  	}  	if (secmark_active) -		if (avc_has_perm(&selinux_state, -				 peer_sid, skb->secmark, +		if (avc_has_perm(peer_sid, skb->secmark,  				 SECCLASS_PACKET, PACKET__FORWARD_IN, &ad))  			return NF_DROP; @@ -5763,8 +5660,7 @@ static unsigned int selinux_ip_postroute_compat(struct sk_buff *skb,  		return NF_DROP;  	if (selinux_secmark_enabled()) -		if (avc_has_perm(&selinux_state, -				 sksec->sid, skb->secmark, +		if (avc_has_perm(sksec->sid, skb->secmark,  				 SECCLASS_PACKET, PACKET__SEND, &ad))  			return NF_DROP_ERR(-ECONNREFUSED); @@ -5889,8 +5785,7 @@ static unsigned int selinux_ip_postroute(void *priv,  		return NF_DROP;  	if (secmark_active) -		if (avc_has_perm(&selinux_state, -				 peer_sid, skb->secmark, +		if (avc_has_perm(peer_sid, skb->secmark,  				 SECCLASS_PACKET, secmark_perm, &ad))  			return NF_DROP_ERR(-ECONNREFUSED); @@ -5900,15 +5795,13 @@ static unsigned int selinux_ip_postroute(void *priv,  		if (sel_netif_sid(state->net, ifindex, &if_sid))  			return NF_DROP; -		if (avc_has_perm(&selinux_state, -				 peer_sid, if_sid, +		if (avc_has_perm(peer_sid, if_sid,  				 SECCLASS_NETIF, NETIF__EGRESS, &ad))  			return NF_DROP_ERR(-ECONNREFUSED);  		if (sel_netnode_sid(addrp, family, &node_sid))  			return NF_DROP; -		if (avc_has_perm(&selinux_state, -				 peer_sid, node_sid, +		if (avc_has_perm(peer_sid, node_sid,  				 SECCLASS_NODE, NODE__SENDTO, &ad))  			return NF_DROP_ERR(-ECONNREFUSED);  	} @@ -5953,8 +5846,8 @@ static int selinux_netlink_send(struct sock *sk, struct sk_buff *skb)  				sk->sk_protocol, nlh->nlmsg_type,  				secclass_map[sclass - 1].name,  				task_pid_nr(current), current->comm); -			if (enforcing_enabled(&selinux_state) && -			    !security_get_allow_unknown(&selinux_state)) +			if (enforcing_enabled() && +			    !security_get_allow_unknown())  				return rc;  			rc = 0;  		} else if (rc == -ENOENT) { @@ -5993,8 +5886,7 @@ static int ipc_has_perm(struct kern_ipc_perm *ipc_perms,  	ad.type = LSM_AUDIT_DATA_IPC;  	ad.u.ipc_id = ipc_perms->key; -	return avc_has_perm(&selinux_state, -			    sid, isec->sid, isec->sclass, perms, &ad); +	return avc_has_perm(sid, isec->sid, isec->sclass, perms, &ad);  }  static int selinux_msg_msg_alloc_security(struct msg_msg *msg) @@ -6020,8 +5912,7 @@ static int selinux_msg_queue_alloc_security(struct kern_ipc_perm *msq)  	ad.type = LSM_AUDIT_DATA_IPC;  	ad.u.ipc_id = msq->key; -	return avc_has_perm(&selinux_state, -			    sid, isec->sid, SECCLASS_MSGQ, +	return avc_has_perm(sid, isec->sid, SECCLASS_MSGQ,  			    MSGQ__CREATE, &ad);  } @@ -6036,8 +5927,7 @@ static int selinux_msg_queue_associate(struct kern_ipc_perm *msq, int msqflg)  	ad.type = LSM_AUDIT_DATA_IPC;  	ad.u.ipc_id = msq->key; -	return avc_has_perm(&selinux_state, -			    sid, isec->sid, SECCLASS_MSGQ, +	return avc_has_perm(sid, isec->sid, SECCLASS_MSGQ,  			    MSGQ__ASSOCIATE, &ad);  } @@ -6050,8 +5940,7 @@ static int selinux_msg_queue_msgctl(struct kern_ipc_perm *msq, int cmd)  	case IPC_INFO:  	case MSG_INFO:  		/* No specific object, just general system-wide information. */ -		return avc_has_perm(&selinux_state, -				    current_sid(), SECINITSID_KERNEL, +		return avc_has_perm(current_sid(), SECINITSID_KERNEL,  				    SECCLASS_SYSTEM, SYSTEM__IPC_INFO, NULL);  	case IPC_STAT:  	case MSG_STAT: @@ -6091,7 +5980,7 @@ static int selinux_msg_queue_msgsnd(struct kern_ipc_perm *msq, struct msg_msg *m  		 * Compute new sid based on current process and  		 * message queue this message will be stored in  		 */ -		rc = security_transition_sid(&selinux_state, sid, isec->sid, +		rc = security_transition_sid(sid, isec->sid,  					     SECCLASS_MSG, NULL, &msec->sid);  		if (rc)  			return rc; @@ -6101,18 +5990,15 @@ static int selinux_msg_queue_msgsnd(struct kern_ipc_perm *msq, struct msg_msg *m  	ad.u.ipc_id = msq->key;  	/* Can this process write to the queue? */ -	rc = avc_has_perm(&selinux_state, -			  sid, isec->sid, SECCLASS_MSGQ, +	rc = avc_has_perm(sid, isec->sid, SECCLASS_MSGQ,  			  MSGQ__WRITE, &ad);  	if (!rc)  		/* Can this process send the message */ -		rc = avc_has_perm(&selinux_state, -				  sid, msec->sid, SECCLASS_MSG, +		rc = avc_has_perm(sid, msec->sid, SECCLASS_MSG,  				  MSG__SEND, &ad);  	if (!rc)  		/* Can the message be put in the queue? */ -		rc = avc_has_perm(&selinux_state, -				  msec->sid, isec->sid, SECCLASS_MSGQ, +		rc = avc_has_perm(msec->sid, isec->sid, SECCLASS_MSGQ,  				  MSGQ__ENQUEUE, &ad);  	return rc; @@ -6134,12 +6020,10 @@ static int selinux_msg_queue_msgrcv(struct kern_ipc_perm *msq, struct msg_msg *m  	ad.type = LSM_AUDIT_DATA_IPC;  	ad.u.ipc_id = msq->key; -	rc = avc_has_perm(&selinux_state, -			  sid, isec->sid, +	rc = avc_has_perm(sid, isec->sid,  			  SECCLASS_MSGQ, MSGQ__READ, &ad);  	if (!rc) -		rc = avc_has_perm(&selinux_state, -				  sid, msec->sid, +		rc = avc_has_perm(sid, msec->sid,  				  SECCLASS_MSG, MSG__RECEIVE, &ad);  	return rc;  } @@ -6157,8 +6041,7 @@ static int selinux_shm_alloc_security(struct kern_ipc_perm *shp)  	ad.type = LSM_AUDIT_DATA_IPC;  	ad.u.ipc_id = shp->key; -	return avc_has_perm(&selinux_state, -			    sid, isec->sid, SECCLASS_SHM, +	return avc_has_perm(sid, isec->sid, SECCLASS_SHM,  			    SHM__CREATE, &ad);  } @@ -6173,8 +6056,7 @@ static int selinux_shm_associate(struct kern_ipc_perm *shp, int shmflg)  	ad.type = LSM_AUDIT_DATA_IPC;  	ad.u.ipc_id = shp->key; -	return avc_has_perm(&selinux_state, -			    sid, isec->sid, SECCLASS_SHM, +	return avc_has_perm(sid, isec->sid, SECCLASS_SHM,  			    SHM__ASSOCIATE, &ad);  } @@ -6188,8 +6070,7 @@ static int selinux_shm_shmctl(struct kern_ipc_perm *shp, int cmd)  	case IPC_INFO:  	case SHM_INFO:  		/* No specific object, just general system-wide information. */ -		return avc_has_perm(&selinux_state, -				    current_sid(), SECINITSID_KERNEL, +		return avc_has_perm(current_sid(), SECINITSID_KERNEL,  				    SECCLASS_SYSTEM, SYSTEM__IPC_INFO, NULL);  	case IPC_STAT:  	case SHM_STAT: @@ -6240,8 +6121,7 @@ static int selinux_sem_alloc_security(struct kern_ipc_perm *sma)  	ad.type = LSM_AUDIT_DATA_IPC;  	ad.u.ipc_id = sma->key; -	return avc_has_perm(&selinux_state, -			    sid, isec->sid, SECCLASS_SEM, +	return avc_has_perm(sid, isec->sid, SECCLASS_SEM,  			    SEM__CREATE, &ad);  } @@ -6256,8 +6136,7 @@ static int selinux_sem_associate(struct kern_ipc_perm *sma, int semflg)  	ad.type = LSM_AUDIT_DATA_IPC;  	ad.u.ipc_id = sma->key; -	return avc_has_perm(&selinux_state, -			    sid, isec->sid, SECCLASS_SEM, +	return avc_has_perm(sid, isec->sid, SECCLASS_SEM,  			    SEM__ASSOCIATE, &ad);  } @@ -6271,8 +6150,7 @@ static int selinux_sem_semctl(struct kern_ipc_perm *sma, int cmd)  	case IPC_INFO:  	case SEM_INFO:  		/* No specific object, just general system-wide information. */ -		return avc_has_perm(&selinux_state, -				    current_sid(), SECINITSID_KERNEL, +		return avc_has_perm(current_sid(), SECINITSID_KERNEL,  				    SECCLASS_SYSTEM, SYSTEM__IPC_INFO, NULL);  	case GETPID:  	case GETNCNT: @@ -6359,8 +6237,7 @@ static int selinux_getprocattr(struct task_struct *p,  	__tsec = selinux_cred(__task_cred(p));  	if (current != p) { -		error = avc_has_perm(&selinux_state, -				     current_sid(), __tsec->sid, +		error = avc_has_perm(current_sid(), __tsec->sid,  				     SECCLASS_PROCESS, PROCESS__GETATTR, NULL);  		if (error)  			goto bad; @@ -6387,7 +6264,7 @@ static int selinux_getprocattr(struct task_struct *p,  	if (!sid)  		return 0; -	error = security_sid_to_context(&selinux_state, sid, value, &len); +	error = security_sid_to_context(sid, value, &len);  	if (error)  		return error;  	return len; @@ -6409,24 +6286,19 @@ static int selinux_setprocattr(const char *name, void *value, size_t size)  	 * Basic control over ability to set these attributes at all.  	 */  	if (!strcmp(name, "exec")) -		error = avc_has_perm(&selinux_state, -				     mysid, mysid, SECCLASS_PROCESS, +		error = avc_has_perm(mysid, mysid, SECCLASS_PROCESS,  				     PROCESS__SETEXEC, NULL);  	else if (!strcmp(name, "fscreate")) -		error = avc_has_perm(&selinux_state, -				     mysid, mysid, SECCLASS_PROCESS, +		error = avc_has_perm(mysid, mysid, SECCLASS_PROCESS,  				     PROCESS__SETFSCREATE, NULL);  	else if (!strcmp(name, "keycreate")) -		error = avc_has_perm(&selinux_state, -				     mysid, mysid, SECCLASS_PROCESS, +		error = avc_has_perm(mysid, mysid, SECCLASS_PROCESS,  				     PROCESS__SETKEYCREATE, NULL);  	else if (!strcmp(name, "sockcreate")) -		error = avc_has_perm(&selinux_state, -				     mysid, mysid, SECCLASS_PROCESS, +		error = avc_has_perm(mysid, mysid, SECCLASS_PROCESS,  				     PROCESS__SETSOCKCREATE, NULL);  	else if (!strcmp(name, "current")) -		error = avc_has_perm(&selinux_state, -				     mysid, mysid, SECCLASS_PROCESS, +		error = avc_has_perm(mysid, mysid, SECCLASS_PROCESS,  				     PROCESS__SETCURRENT, NULL);  	else  		error = -EINVAL; @@ -6439,7 +6311,7 @@ static int selinux_setprocattr(const char *name, void *value, size_t size)  			str[size-1] = 0;  			size--;  		} -		error = security_context_to_sid(&selinux_state, value, size, +		error = security_context_to_sid(value, size,  						&sid, GFP_KERNEL);  		if (error == -EINVAL && !strcmp(name, "fscreate")) {  			if (!has_cap_mac_admin(true)) { @@ -6463,9 +6335,8 @@ static int selinux_setprocattr(const char *name, void *value, size_t size)  				return error;  			} -			error = security_context_to_sid_force( -						      &selinux_state, -						      value, size, &sid); +			error = security_context_to_sid_force(value, size, +							&sid);  		}  		if (error)  			return error; @@ -6488,7 +6359,7 @@ static int selinux_setprocattr(const char *name, void *value, size_t size)  		tsec->create_sid = sid;  	} else if (!strcmp(name, "keycreate")) {  		if (sid) { -			error = avc_has_perm(&selinux_state, mysid, sid, +			error = avc_has_perm(mysid, sid,  					     SECCLASS_KEY, KEY__CREATE, NULL);  			if (error)  				goto abort_change; @@ -6503,15 +6374,13 @@ static int selinux_setprocattr(const char *name, void *value, size_t size)  		/* Only allow single threaded processes to change context */  		if (!current_is_single_threaded()) { -			error = security_bounded_transition(&selinux_state, -							    tsec->sid, sid); +			error = security_bounded_transition(tsec->sid, sid);  			if (error)  				goto abort_change;  		}  		/* Check permissions for the transition. */ -		error = avc_has_perm(&selinux_state, -				     tsec->sid, sid, SECCLASS_PROCESS, +		error = avc_has_perm(tsec->sid, sid, SECCLASS_PROCESS,  				     PROCESS__DYNTRANSITION, NULL);  		if (error)  			goto abort_change; @@ -6520,8 +6389,7 @@ static int selinux_setprocattr(const char *name, void *value, size_t size)  		   Otherwise, leave SID unchanged and fail. */  		ptsid = ptrace_parent_sid();  		if (ptsid != 0) { -			error = avc_has_perm(&selinux_state, -					     ptsid, sid, SECCLASS_PROCESS, +			error = avc_has_perm(ptsid, sid, SECCLASS_PROCESS,  					     PROCESS__PTRACE, NULL);  			if (error)  				goto abort_change; @@ -6548,13 +6416,13 @@ static int selinux_ismaclabel(const char *name)  static int selinux_secid_to_secctx(u32 secid, char **secdata, u32 *seclen)  { -	return security_sid_to_context(&selinux_state, secid, +	return security_sid_to_context(secid,  				       secdata, seclen);  }  static int selinux_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid)  { -	return security_context_to_sid(&selinux_state, secdata, seclen, +	return security_context_to_sid(secdata, seclen,  				       secid, GFP_KERNEL);  } @@ -6674,8 +6542,7 @@ static int selinux_key_permission(key_ref_t key_ref,  	key = key_ref_to_ptr(key_ref);  	ksec = key->security; -	return avc_has_perm(&selinux_state, -			    sid, ksec->sid, SECCLASS_KEY, perm, NULL); +	return avc_has_perm(sid, ksec->sid, SECCLASS_KEY, perm, NULL);  }  static int selinux_key_getsecurity(struct key *key, char **_buffer) @@ -6685,7 +6552,7 @@ static int selinux_key_getsecurity(struct key *key, char **_buffer)  	unsigned len;  	int rc; -	rc = security_sid_to_context(&selinux_state, ksec->sid, +	rc = security_sid_to_context(ksec->sid,  				     &context, &len);  	if (!rc)  		rc = len; @@ -6699,8 +6566,7 @@ static int selinux_watch_key(struct key *key)  	struct key_security_struct *ksec = key->security;  	u32 sid = current_sid(); -	return avc_has_perm(&selinux_state, -			    sid, ksec->sid, SECCLASS_KEY, KEY__VIEW, NULL); +	return avc_has_perm(sid, ksec->sid, SECCLASS_KEY, KEY__VIEW, NULL);  }  #endif  #endif @@ -6722,8 +6588,7 @@ static int selinux_ib_pkey_access(void *ib_sec, u64 subnet_prefix, u16 pkey_val)  	ibpkey.subnet_prefix = subnet_prefix;  	ibpkey.pkey = pkey_val;  	ad.u.ibpkey = &ibpkey; -	return avc_has_perm(&selinux_state, -			    sec->sid, sid, +	return avc_has_perm(sec->sid, sid,  			    SECCLASS_INFINIBAND_PKEY,  			    INFINIBAND_PKEY__ACCESS, &ad);  } @@ -6737,7 +6602,7 @@ static int selinux_ib_endport_manage_subnet(void *ib_sec, const char *dev_name,  	struct ib_security_struct *sec = ib_sec;  	struct lsm_ibendport_audit ibendport; -	err = security_ib_endport_sid(&selinux_state, dev_name, port_num, +	err = security_ib_endport_sid(dev_name, port_num,  				      &sid);  	if (err) @@ -6747,8 +6612,7 @@ static int selinux_ib_endport_manage_subnet(void *ib_sec, const char *dev_name,  	ibendport.dev_name = dev_name;  	ibendport.port = port_num;  	ad.u.ibendport = &ibendport; -	return avc_has_perm(&selinux_state, -			    sec->sid, sid, +	return avc_has_perm(sec->sid, sid,  			    SECCLASS_INFINIBAND_ENDPORT,  			    INFINIBAND_ENDPORT__MANAGE_SUBNET, &ad);  } @@ -6781,13 +6645,11 @@ static int selinux_bpf(int cmd, union bpf_attr *attr,  	switch (cmd) {  	case BPF_MAP_CREATE: -		ret = avc_has_perm(&selinux_state, -				   sid, sid, SECCLASS_BPF, BPF__MAP_CREATE, +		ret = avc_has_perm(sid, sid, SECCLASS_BPF, BPF__MAP_CREATE,  				   NULL);  		break;  	case BPF_PROG_LOAD: -		ret = avc_has_perm(&selinux_state, -				   sid, sid, SECCLASS_BPF, BPF__PROG_LOAD, +		ret = avc_has_perm(sid, sid, SECCLASS_BPF, BPF__PROG_LOAD,  				   NULL);  		break;  	default: @@ -6827,16 +6689,14 @@ static int bpf_fd_pass(struct file *file, u32 sid)  	if (file->f_op == &bpf_map_fops) {  		map = file->private_data;  		bpfsec = map->security; -		ret = avc_has_perm(&selinux_state, -				   sid, bpfsec->sid, SECCLASS_BPF, +		ret = avc_has_perm(sid, bpfsec->sid, SECCLASS_BPF,  				   bpf_map_fmode_to_av(file->f_mode), NULL);  		if (ret)  			return ret;  	} else if (file->f_op == &bpf_prog_fops) {  		prog = file->private_data;  		bpfsec = prog->aux->security; -		ret = avc_has_perm(&selinux_state, -				   sid, bpfsec->sid, SECCLASS_BPF, +		ret = avc_has_perm(sid, bpfsec->sid, SECCLASS_BPF,  				   BPF__PROG_RUN, NULL);  		if (ret)  			return ret; @@ -6850,8 +6710,7 @@ static int selinux_bpf_map(struct bpf_map *map, fmode_t fmode)  	struct bpf_security_struct *bpfsec;  	bpfsec = map->security; -	return avc_has_perm(&selinux_state, -			    sid, bpfsec->sid, SECCLASS_BPF, +	return avc_has_perm(sid, bpfsec->sid, SECCLASS_BPF,  			    bpf_map_fmode_to_av(fmode), NULL);  } @@ -6861,8 +6720,7 @@ static int selinux_bpf_prog(struct bpf_prog *prog)  	struct bpf_security_struct *bpfsec;  	bpfsec = prog->aux->security; -	return avc_has_perm(&selinux_state, -			    sid, bpfsec->sid, SECCLASS_BPF, +	return avc_has_perm(sid, bpfsec->sid, SECCLASS_BPF,  			    BPF__PROG_RUN, NULL);  } @@ -6911,7 +6769,7 @@ static void selinux_bpf_prog_free(struct bpf_prog_aux *aux)  }  #endif -struct lsm_blob_sizes selinux_blob_sizes __lsm_ro_after_init = { +struct lsm_blob_sizes selinux_blob_sizes __ro_after_init = {  	.lbs_cred = sizeof(struct task_security_struct),  	.lbs_file = sizeof(struct file_security_struct),  	.lbs_inode = sizeof(struct inode_security_struct), @@ -6936,7 +6794,7 @@ static int selinux_perf_event_open(struct perf_event_attr *attr, int type)  	else  		return -EINVAL; -	return avc_has_perm(&selinux_state, sid, sid, SECCLASS_PERF_EVENT, +	return avc_has_perm(sid, sid, SECCLASS_PERF_EVENT,  			    requested, NULL);  } @@ -6967,7 +6825,7 @@ static int selinux_perf_event_read(struct perf_event *event)  	struct perf_event_security_struct *perfsec = event->security;  	u32 sid = current_sid(); -	return avc_has_perm(&selinux_state, sid, perfsec->sid, +	return avc_has_perm(sid, perfsec->sid,  			    SECCLASS_PERF_EVENT, PERF_EVENT__READ, NULL);  } @@ -6976,7 +6834,7 @@ static int selinux_perf_event_write(struct perf_event *event)  	struct perf_event_security_struct *perfsec = event->security;  	u32 sid = current_sid(); -	return avc_has_perm(&selinux_state, sid, perfsec->sid, +	return avc_has_perm(sid, perfsec->sid,  			    SECCLASS_PERF_EVENT, PERF_EVENT__WRITE, NULL);  }  #endif @@ -6991,7 +6849,7 @@ static int selinux_perf_event_write(struct perf_event *event)   */  static int selinux_uring_override_creds(const struct cred *new)  { -	return avc_has_perm(&selinux_state, current_sid(), cred_sid(new), +	return avc_has_perm(current_sid(), cred_sid(new),  			    SECCLASS_IO_URING, IO_URING__OVERRIDE_CREDS, NULL);  } @@ -7005,7 +6863,7 @@ static int selinux_uring_sqpoll(void)  {  	int sid = current_sid(); -	return avc_has_perm(&selinux_state, sid, sid, +	return avc_has_perm(sid, sid,  			    SECCLASS_IO_URING, IO_URING__SQPOLL, NULL);  } @@ -7027,7 +6885,7 @@ static int selinux_uring_cmd(struct io_uring_cmd *ioucmd)  	ad.type = LSM_AUDIT_DATA_FILE;  	ad.u.file = file; -	return avc_has_perm(&selinux_state, current_sid(), isec->sid, +	return avc_has_perm(current_sid(), isec->sid,  			    SECCLASS_IO_URING, IO_URING__CMD, &ad);  }  #endif /* CONFIG_IO_URING */ @@ -7047,7 +6905,7 @@ static int selinux_uring_cmd(struct io_uring_cmd *ioucmd)   * safely. Breaking the ordering rules above might lead to NULL pointer derefs   * when disabling SELinux at runtime.   */ -static struct security_hook_list selinux_hooks[] __lsm_ro_after_init = { +static struct security_hook_list selinux_hooks[] __ro_after_init = {  	LSM_HOOK_INIT(binder_set_context_mgr, selinux_binder_set_context_mgr),  	LSM_HOOK_INIT(binder_transaction, selinux_binder_transaction),  	LSM_HOOK_INIT(binder_transfer_binder, selinux_binder_transfer_binder), @@ -7334,11 +7192,8 @@ static __init int selinux_init(void)  	pr_info("SELinux:  Initializing.\n");  	memset(&selinux_state, 0, sizeof(selinux_state)); -	enforcing_set(&selinux_state, selinux_enforcing_boot); -	if (CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE) -		pr_err("SELinux: CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE is non-zero.  This is deprecated and will be rejected in a future kernel release.\n"); -	checkreqprot_set(&selinux_state, selinux_checkreqprot_boot); -	selinux_avc_init(&selinux_state.avc); +	enforcing_set(selinux_enforcing_boot); +	selinux_avc_init();  	mutex_init(&selinux_state.status_lock);  	mutex_init(&selinux_state.policy_mutex); @@ -7398,7 +7253,6 @@ DEFINE_LSM(selinux) = {  };  #if defined(CONFIG_NETFILTER) -  static const struct nf_hook_ops selinux_nf_ops[] = {  	{  		.hook =		selinux_ip_postroute, @@ -7473,56 +7327,4 @@ static int __init selinux_nf_ip_init(void)  	return 0;  }  __initcall(selinux_nf_ip_init); - -#ifdef CONFIG_SECURITY_SELINUX_DISABLE -static void selinux_nf_ip_exit(void) -{ -	pr_debug("SELinux:  Unregistering netfilter hooks\n"); - -	unregister_pernet_subsys(&selinux_net_ops); -} -#endif - -#else /* CONFIG_NETFILTER */ - -#ifdef CONFIG_SECURITY_SELINUX_DISABLE -#define selinux_nf_ip_exit() -#endif -  #endif /* CONFIG_NETFILTER */ - -#ifdef CONFIG_SECURITY_SELINUX_DISABLE -int selinux_disable(struct selinux_state *state) -{ -	if (selinux_initialized(state)) { -		/* Not permitted after initial policy load. */ -		return -EINVAL; -	} - -	if (selinux_disabled(state)) { -		/* Only do this once. */ -		return -EINVAL; -	} - -	selinux_mark_disabled(state); - -	pr_info("SELinux:  Disabled at runtime.\n"); - -	/* -	 * Unregister netfilter hooks. -	 * Must be done before security_delete_hooks() to avoid breaking -	 * runtime disable. -	 */ -	selinux_nf_ip_exit(); - -	security_delete_hooks(selinux_hooks, ARRAY_SIZE(selinux_hooks)); - -	/* Try to destroy the avc node cache */ -	avc_disable(); - -	/* Unregister selinuxfs. */ -	exit_sel_fs(); - -	return 0; -} -#endif  |