Skip to content

Commit 91ac1cc

Browse files
Christoph Hellwigdavem330
authored andcommitted
net/udp: switch udp_lib_setsockopt to sockptr_t
Pass a sockptr_t to prepare for set_fs-less handling of the kernel pointer from bpf-cgroup. Signed-off-by: Christoph Hellwig <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 894cfbc commit 91ac1cc

File tree

3 files changed

+7
-5
lines changed

3 files changed

+7
-5
lines changed

include/net/udp.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ struct sk_buff *skb_udp_tunnel_segment(struct sk_buff *skb,
306306
int udp_lib_getsockopt(struct sock *sk, int level, int optname,
307307
char __user *optval, int __user *optlen);
308308
int udp_lib_setsockopt(struct sock *sk, int level, int optname,
309-
char __user *optval, unsigned int optlen,
309+
sockptr_t optval, unsigned int optlen,
310310
int (*push_pending_frames)(struct sock *));
311311
struct sock *udp4_lib_lookup(struct net *net, __be32 saddr, __be16 sport,
312312
__be32 daddr, __be16 dport, int dif);

net/ipv4/udp.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2588,7 +2588,7 @@ void udp_destroy_sock(struct sock *sk)
25882588
* Socket option code for UDP
25892589
*/
25902590
int udp_lib_setsockopt(struct sock *sk, int level, int optname,
2591-
char __user *optval, unsigned int optlen,
2591+
sockptr_t optval, unsigned int optlen,
25922592
int (*push_pending_frames)(struct sock *))
25932593
{
25942594
struct udp_sock *up = udp_sk(sk);
@@ -2599,7 +2599,7 @@ int udp_lib_setsockopt(struct sock *sk, int level, int optname,
25992599
if (optlen < sizeof(int))
26002600
return -EINVAL;
26012601

2602-
if (get_user(val, (int __user *)optval))
2602+
if (copy_from_sockptr(&val, optval, sizeof(val)))
26032603
return -EFAULT;
26042604

26052605
valbool = val ? 1 : 0;
@@ -2707,7 +2707,8 @@ int udp_setsockopt(struct sock *sk, int level, int optname,
27072707
char __user *optval, unsigned int optlen)
27082708
{
27092709
if (level == SOL_UDP || level == SOL_UDPLITE)
2710-
return udp_lib_setsockopt(sk, level, optname, optval, optlen,
2710+
return udp_lib_setsockopt(sk, level, optname,
2711+
USER_SOCKPTR(optval), optlen,
27112712
udp_push_pending_frames);
27122713
return ip_setsockopt(sk, level, optname, optval, optlen);
27132714
}

net/ipv6/udp.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1622,7 +1622,8 @@ int udpv6_setsockopt(struct sock *sk, int level, int optname,
16221622
char __user *optval, unsigned int optlen)
16231623
{
16241624
if (level == SOL_UDP || level == SOL_UDPLITE)
1625-
return udp_lib_setsockopt(sk, level, optname, optval, optlen,
1625+
return udp_lib_setsockopt(sk, level, optname,
1626+
USER_SOCKPTR(optval), optlen,
16261627
udp_v6_push_pending_frames);
16271628
return ipv6_setsockopt(sk, level, optname, optval, optlen);
16281629
}

0 commit comments

Comments
 (0)