diff options
Diffstat (limited to 'security/selinux/hooks.c')
| -rw-r--r-- | security/selinux/hooks.c | 33 | 
1 files changed, 19 insertions, 14 deletions
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 372ec6502aa8..6c77f63c7591 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -2129,7 +2129,7 @@ static inline void flush_unauthorized_files(const struct cred *cred,  		int fd;  		j++; -		i = j * __NFDBITS; +		i = j * BITS_PER_LONG;  		fdt = files_fdtable(files);  		if (i >= fdt->max_fds)  			break; @@ -2157,8 +2157,7 @@ static inline void flush_unauthorized_files(const struct cred *cred,  						get_file(devnull);  					} else {  						devnull = dentry_open( -							dget(selinux_null), -							mntget(selinuxfs_mount), +							&selinux_null,  							O_RDWR, cred);  						if (IS_ERR(devnull)) {  							devnull = NULL; @@ -2717,7 +2716,7 @@ static int selinux_inode_setattr(struct dentry *dentry, struct iattr *iattr)  			ATTR_ATIME_SET | ATTR_MTIME_SET | ATTR_TIMES_SET))  		return dentry_has_perm(cred, dentry, FILE__SETATTR); -	if (ia_valid & ATTR_SIZE) +	if (selinux_policycap_openperm && (ia_valid & ATTR_SIZE))  		av |= FILE__OPEN;  	return dentry_has_perm(cred, dentry, av); @@ -2792,11 +2791,16 @@ static int selinux_inode_setxattr(struct dentry *dentry, const char *name,  			/* We strip a nul only if it is at the end, otherwise the  			 * context contains a nul and we should audit that */ -			str = value; -			if (str[size - 1] == '\0') -				audit_size = size - 1; -			else -				audit_size = size; +			if (value) { +				str = value; +				if (str[size - 1] == '\0') +					audit_size = size - 1; +				else +					audit_size = size; +			} else { +				str = ""; +				audit_size = 0; +			}  			ab = audit_log_start(current->audit_context, GFP_ATOMIC, AUDIT_SELINUX_ERR);  			audit_log_format(ab, "op=setxattr invalid_context=");  			audit_log_n_untrustedstring(ab, value, audit_size); @@ -3181,6 +3185,7 @@ static int selinux_file_fcntl(struct file *file, unsigned int cmd,  	case F_GETFL:  	case F_GETOWN:  	case F_GETSIG: +	case F_GETOWNER_UIDS:  		/* Just check FD__USE permission */  		err = file_has_perm(cred, file, 0);  		break; @@ -5763,21 +5768,21 @@ static struct nf_hook_ops selinux_ipv4_ops[] = {  	{  		.hook =		selinux_ipv4_postroute,  		.owner =	THIS_MODULE, -		.pf =		PF_INET, +		.pf =		NFPROTO_IPV4,  		.hooknum =	NF_INET_POST_ROUTING,  		.priority =	NF_IP_PRI_SELINUX_LAST,  	},  	{  		.hook =		selinux_ipv4_forward,  		.owner =	THIS_MODULE, -		.pf =		PF_INET, +		.pf =		NFPROTO_IPV4,  		.hooknum =	NF_INET_FORWARD,  		.priority =	NF_IP_PRI_SELINUX_FIRST,  	},  	{  		.hook =		selinux_ipv4_output,  		.owner =	THIS_MODULE, -		.pf =		PF_INET, +		.pf =		NFPROTO_IPV4,  		.hooknum =	NF_INET_LOCAL_OUT,  		.priority =	NF_IP_PRI_SELINUX_FIRST,  	} @@ -5789,14 +5794,14 @@ static struct nf_hook_ops selinux_ipv6_ops[] = {  	{  		.hook =		selinux_ipv6_postroute,  		.owner =	THIS_MODULE, -		.pf =		PF_INET6, +		.pf =		NFPROTO_IPV6,  		.hooknum =	NF_INET_POST_ROUTING,  		.priority =	NF_IP6_PRI_SELINUX_LAST,  	},  	{  		.hook =		selinux_ipv6_forward,  		.owner =	THIS_MODULE, -		.pf =		PF_INET6, +		.pf =		NFPROTO_IPV6,  		.hooknum =	NF_INET_FORWARD,  		.priority =	NF_IP6_PRI_SELINUX_FIRST,  	}  | 
