diff options
author | David S. Miller <davem@davemloft.net> | 2009-09-30 19:12:20 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-09-30 19:12:20 -0400 |
commit | b7058842c940ad2c08dd829b21e5c92ebe3b8758 (patch) | |
tree | 5fe78d599fc345ca0bcd4b083b79095a54b2921b /net/ipv4/udp.c | |
parent | eb1cf0f8f7a9e5a6d573d5bd72c015686a042db0 (diff) |
net: Make setsockopt() optlen be unsigned.
This provides safety against negative optlen at the type
level instead of depending upon (sometimes non-trivial)
checks against this sprinkled all over the the place, in
each and every implementation.
Based upon work done by Arjan van de Ven and feedback
from Linus Torvalds.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/udp.c')
-rw-r--r-- | net/ipv4/udp.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index ebaaa7f973d7..3326aff65906 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c | |||
@@ -1359,7 +1359,7 @@ void udp_destroy_sock(struct sock *sk) | |||
1359 | * Socket option code for UDP | 1359 | * Socket option code for UDP |
1360 | */ | 1360 | */ |
1361 | int udp_lib_setsockopt(struct sock *sk, int level, int optname, | 1361 | int udp_lib_setsockopt(struct sock *sk, int level, int optname, |
1362 | char __user *optval, int optlen, | 1362 | char __user *optval, unsigned int optlen, |
1363 | int (*push_pending_frames)(struct sock *)) | 1363 | int (*push_pending_frames)(struct sock *)) |
1364 | { | 1364 | { |
1365 | struct udp_sock *up = udp_sk(sk); | 1365 | struct udp_sock *up = udp_sk(sk); |
@@ -1441,7 +1441,7 @@ int udp_lib_setsockopt(struct sock *sk, int level, int optname, | |||
1441 | EXPORT_SYMBOL(udp_lib_setsockopt); | 1441 | EXPORT_SYMBOL(udp_lib_setsockopt); |
1442 | 1442 | ||
1443 | int udp_setsockopt(struct sock *sk, int level, int optname, | 1443 | int udp_setsockopt(struct sock *sk, int level, int optname, |
1444 | char __user *optval, int optlen) | 1444 | char __user *optval, unsigned int optlen) |
1445 | { | 1445 | { |
1446 | if (level == SOL_UDP || level == SOL_UDPLITE) | 1446 | if (level == SOL_UDP || level == SOL_UDPLITE) |
1447 | return udp_lib_setsockopt(sk, level, optname, optval, optlen, | 1447 | return udp_lib_setsockopt(sk, level, optname, optval, optlen, |
@@ -1451,7 +1451,7 @@ int udp_setsockopt(struct sock *sk, int level, int optname, | |||
1451 | 1451 | ||
1452 | #ifdef CONFIG_COMPAT | 1452 | #ifdef CONFIG_COMPAT |
1453 | int compat_udp_setsockopt(struct sock *sk, int level, int optname, | 1453 | int compat_udp_setsockopt(struct sock *sk, int level, int optname, |
1454 | char __user *optval, int optlen) | 1454 | char __user *optval, unsigned int optlen) |
1455 | { | 1455 | { |
1456 | if (level == SOL_UDP || level == SOL_UDPLITE) | 1456 | if (level == SOL_UDP || level == SOL_UDPLITE) |
1457 | return udp_lib_setsockopt(sk, level, optname, optval, optlen, | 1457 | return udp_lib_setsockopt(sk, level, optname, optval, optlen, |