diff options
Diffstat (limited to 'security/selinux/hooks.c')
| -rw-r--r-- | security/selinux/hooks.c | 13 | 
1 files changed, 6 insertions, 7 deletions
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 7c5c8d17695c..3c5be76a9199 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -5138,11 +5138,12 @@ static int selinux_socket_sock_rcv_skb(struct sock *sk, struct sk_buff *skb)  	return err;  } -static int selinux_socket_getpeersec_stream(struct socket *sock, char __user *optval, -					    int __user *optlen, unsigned len) +static int selinux_socket_getpeersec_stream(struct socket *sock, +					    sockptr_t optval, sockptr_t optlen, +					    unsigned int len)  {  	int err = 0; -	char *scontext; +	char *scontext = NULL;  	u32 scontext_len;  	struct sk_security_struct *sksec = sock->sk->sk_security;  	u32 peer_sid = SECSID_NULL; @@ -5158,17 +5159,15 @@ static int selinux_socket_getpeersec_stream(struct socket *sock, char __user *op  				      &scontext_len);  	if (err)  		return err; -  	if (scontext_len > len) {  		err = -ERANGE;  		goto out_len;  	} -	if (copy_to_user(optval, scontext, scontext_len)) +	if (copy_to_sockptr(optval, scontext, scontext_len))  		err = -EFAULT; -  out_len: -	if (put_user(scontext_len, optlen)) +	if (copy_to_sockptr(optlen, &scontext_len, sizeof(scontext_len)))  		err = -EFAULT;  	kfree(scontext);  	return err;  | 
