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/atm | |
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/atm')
-rw-r--r-- | net/atm/common.c | 2 | ||||
-rw-r--r-- | net/atm/common.h | 2 | ||||
-rw-r--r-- | net/atm/pvc.c | 2 | ||||
-rw-r--r-- | net/atm/svc.c | 2 |
4 files changed, 4 insertions, 4 deletions
diff --git a/net/atm/common.c b/net/atm/common.c index 8c4d843eb17f..950bd16d2383 100644 --- a/net/atm/common.c +++ b/net/atm/common.c | |||
@@ -679,7 +679,7 @@ static int check_qos(const struct atm_qos *qos) | |||
679 | } | 679 | } |
680 | 680 | ||
681 | int vcc_setsockopt(struct socket *sock, int level, int optname, | 681 | int vcc_setsockopt(struct socket *sock, int level, int optname, |
682 | char __user *optval, int optlen) | 682 | char __user *optval, unsigned int optlen) |
683 | { | 683 | { |
684 | struct atm_vcc *vcc; | 684 | struct atm_vcc *vcc; |
685 | unsigned long value; | 685 | unsigned long value; |
diff --git a/net/atm/common.h b/net/atm/common.h index 92e2981f479f..f48a76b6cdf4 100644 --- a/net/atm/common.h +++ b/net/atm/common.h | |||
@@ -21,7 +21,7 @@ unsigned int vcc_poll(struct file *file, struct socket *sock, poll_table *wait); | |||
21 | int vcc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg); | 21 | int vcc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg); |
22 | int vcc_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg); | 22 | int vcc_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg); |
23 | int vcc_setsockopt(struct socket *sock, int level, int optname, | 23 | int vcc_setsockopt(struct socket *sock, int level, int optname, |
24 | char __user *optval, int optlen); | 24 | char __user *optval, unsigned int optlen); |
25 | int vcc_getsockopt(struct socket *sock, int level, int optname, | 25 | int vcc_getsockopt(struct socket *sock, int level, int optname, |
26 | char __user *optval, int __user *optlen); | 26 | char __user *optval, int __user *optlen); |
27 | 27 | ||
diff --git a/net/atm/pvc.c b/net/atm/pvc.c index e1d22d9430dd..d4c024504f99 100644 --- a/net/atm/pvc.c +++ b/net/atm/pvc.c | |||
@@ -59,7 +59,7 @@ static int pvc_connect(struct socket *sock,struct sockaddr *sockaddr, | |||
59 | } | 59 | } |
60 | 60 | ||
61 | static int pvc_setsockopt(struct socket *sock, int level, int optname, | 61 | static int pvc_setsockopt(struct socket *sock, int level, int optname, |
62 | char __user *optval, int optlen) | 62 | char __user *optval, unsigned int optlen) |
63 | { | 63 | { |
64 | struct sock *sk = sock->sk; | 64 | struct sock *sk = sock->sk; |
65 | int error; | 65 | int error; |
diff --git a/net/atm/svc.c b/net/atm/svc.c index 7b831b526d0b..f90d143c4b25 100644 --- a/net/atm/svc.c +++ b/net/atm/svc.c | |||
@@ -446,7 +446,7 @@ int svc_change_qos(struct atm_vcc *vcc,struct atm_qos *qos) | |||
446 | 446 | ||
447 | 447 | ||
448 | static int svc_setsockopt(struct socket *sock, int level, int optname, | 448 | static int svc_setsockopt(struct socket *sock, int level, int optname, |
449 | char __user *optval, int optlen) | 449 | char __user *optval, unsigned int optlen) |
450 | { | 450 | { |
451 | struct sock *sk = sock->sk; | 451 | struct sock *sk = sock->sk; |
452 | struct atm_vcc *vcc = ATM_SD(sock); | 452 | struct atm_vcc *vcc = ATM_SD(sock); |