Commit d4c19c49 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by David S. Miller

net/tcp: switch ->md5_parse to sockptr_t

Pass a sockptr_t to prepare for set_fs-less handling of the kernel
pointer from bpf-cgroup.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 91ac1cca
...@@ -2002,7 +2002,7 @@ struct tcp_sock_af_ops { ...@@ -2002,7 +2002,7 @@ struct tcp_sock_af_ops {
const struct sk_buff *skb); const struct sk_buff *skb);
int (*md5_parse)(struct sock *sk, int (*md5_parse)(struct sock *sk,
int optname, int optname,
char __user *optval, sockptr_t optval,
int optlen); int optlen);
#endif #endif
}; };
......
...@@ -3249,7 +3249,8 @@ static int do_tcp_setsockopt(struct sock *sk, int level, ...@@ -3249,7 +3249,8 @@ static int do_tcp_setsockopt(struct sock *sk, int level,
#ifdef CONFIG_TCP_MD5SIG #ifdef CONFIG_TCP_MD5SIG
case TCP_MD5SIG: case TCP_MD5SIG:
case TCP_MD5SIG_EXT: case TCP_MD5SIG_EXT:
err = tp->af_specific->md5_parse(sk, optname, optval, optlen); err = tp->af_specific->md5_parse(sk, optname,
USER_SOCKPTR(optval), optlen);
break; break;
#endif #endif
case TCP_USER_TIMEOUT: case TCP_USER_TIMEOUT:
......
...@@ -1195,7 +1195,7 @@ static void tcp_clear_md5_list(struct sock *sk) ...@@ -1195,7 +1195,7 @@ static void tcp_clear_md5_list(struct sock *sk)
} }
static int tcp_v4_parse_md5_keys(struct sock *sk, int optname, static int tcp_v4_parse_md5_keys(struct sock *sk, int optname,
char __user *optval, int optlen) sockptr_t optval, int optlen)
{ {
struct tcp_md5sig cmd; struct tcp_md5sig cmd;
struct sockaddr_in *sin = (struct sockaddr_in *)&cmd.tcpm_addr; struct sockaddr_in *sin = (struct sockaddr_in *)&cmd.tcpm_addr;
...@@ -1206,7 +1206,7 @@ static int tcp_v4_parse_md5_keys(struct sock *sk, int optname, ...@@ -1206,7 +1206,7 @@ static int tcp_v4_parse_md5_keys(struct sock *sk, int optname,
if (optlen < sizeof(cmd)) if (optlen < sizeof(cmd))
return -EINVAL; return -EINVAL;
if (copy_from_user(&cmd, optval, sizeof(cmd))) if (copy_from_sockptr(&cmd, optval, sizeof(cmd)))
return -EFAULT; return -EFAULT;
if (sin->sin_family != AF_INET) if (sin->sin_family != AF_INET)
......
...@@ -567,7 +567,7 @@ static struct tcp_md5sig_key *tcp_v6_md5_lookup(const struct sock *sk, ...@@ -567,7 +567,7 @@ static struct tcp_md5sig_key *tcp_v6_md5_lookup(const struct sock *sk,
} }
static int tcp_v6_parse_md5_keys(struct sock *sk, int optname, static int tcp_v6_parse_md5_keys(struct sock *sk, int optname,
char __user *optval, int optlen) sockptr_t optval, int optlen)
{ {
struct tcp_md5sig cmd; struct tcp_md5sig cmd;
struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&cmd.tcpm_addr; struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&cmd.tcpm_addr;
...@@ -577,7 +577,7 @@ static int tcp_v6_parse_md5_keys(struct sock *sk, int optname, ...@@ -577,7 +577,7 @@ static int tcp_v6_parse_md5_keys(struct sock *sk, int optname,
if (optlen < sizeof(cmd)) if (optlen < sizeof(cmd))
return -EINVAL; return -EINVAL;
if (copy_from_user(&cmd, optval, sizeof(cmd))) if (copy_from_sockptr(&cmd, optval, sizeof(cmd)))
return -EFAULT; return -EFAULT;
if (sin6->sin6_family != AF_INET6) if (sin6->sin6_family != AF_INET6)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment