Skip to content

Commit

Permalink
net/tcp: switch ->md5_parse to sockptr_t
Browse files Browse the repository at this point in the history
Pass a sockptr_t to prepare for set_fs-less handling of the kernel
pointer from bpf-cgroup.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Christoph Hellwig authored and David S. Miller committed Jul 24, 2020
1 parent 91ac1cc commit d4c19c4
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 6 deletions.
2 changes: 1 addition & 1 deletion include/net/tcp.h
Original file line number Diff line number Diff line change
Expand Up @@ -2002,7 +2002,7 @@ struct tcp_sock_af_ops {
const struct sk_buff *skb);
int (*md5_parse)(struct sock *sk,
int optname,
char __user *optval,
sockptr_t optval,
int optlen);
#endif
};
Expand Down
3 changes: 2 additions & 1 deletion net/ipv4/tcp.c
Original file line number Diff line number Diff line change
Expand Up @@ -3249,7 +3249,8 @@ static int do_tcp_setsockopt(struct sock *sk, int level,
#ifdef CONFIG_TCP_MD5SIG
case TCP_MD5SIG:
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;
#endif
case TCP_USER_TIMEOUT:
Expand Down
4 changes: 2 additions & 2 deletions net/ipv4/tcp_ipv4.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
char __user *optval, int optlen)
sockptr_t optval, int optlen)
{
struct tcp_md5sig cmd;
struct sockaddr_in *sin = (struct sockaddr_in *)&cmd.tcpm_addr;
Expand All @@ -1206,7 +1206,7 @@ static int tcp_v4_parse_md5_keys(struct sock *sk, int optname,
if (optlen < sizeof(cmd))
return -EINVAL;

if (copy_from_user(&cmd, optval, sizeof(cmd)))
if (copy_from_sockptr(&cmd, optval, sizeof(cmd)))
return -EFAULT;

if (sin->sin_family != AF_INET)
Expand Down
4 changes: 2 additions & 2 deletions net/ipv6/tcp_ipv6.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
char __user *optval, int optlen)
sockptr_t optval, int optlen)
{
struct tcp_md5sig cmd;
struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&cmd.tcpm_addr;
Expand All @@ -577,7 +577,7 @@ static int tcp_v6_parse_md5_keys(struct sock *sk, int optname,
if (optlen < sizeof(cmd))
return -EINVAL;

if (copy_from_user(&cmd, optval, sizeof(cmd)))
if (copy_from_sockptr(&cmd, optval, sizeof(cmd)))
return -EFAULT;

if (sin6->sin6_family != AF_INET6)
Expand Down

0 comments on commit d4c19c4

Please sign in to comment.