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/bluetooth | |
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/bluetooth')
-rw-r--r-- | net/bluetooth/hci_sock.c | 2 | ||||
-rw-r--r-- | net/bluetooth/l2cap.c | 4 | ||||
-rw-r--r-- | net/bluetooth/rfcomm/sock.c | 4 | ||||
-rw-r--r-- | net/bluetooth/sco.c | 2 |
4 files changed, 6 insertions, 6 deletions
diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c index 4f9621f759a0..75302a986067 100644 --- a/net/bluetooth/hci_sock.c +++ b/net/bluetooth/hci_sock.c | |||
@@ -466,7 +466,7 @@ drop: | |||
466 | goto done; | 466 | goto done; |
467 | } | 467 | } |
468 | 468 | ||
469 | static int hci_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int len) | 469 | static int hci_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int len) |
470 | { | 470 | { |
471 | struct hci_ufilter uf = { .opcode = 0 }; | 471 | struct hci_ufilter uf = { .opcode = 0 }; |
472 | struct sock *sk = sock->sk; | 472 | struct sock *sk = sock->sk; |
diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c index b03012564647..555d9da1869b 100644 --- a/net/bluetooth/l2cap.c +++ b/net/bluetooth/l2cap.c | |||
@@ -1698,7 +1698,7 @@ static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct ms | |||
1698 | return bt_sock_recvmsg(iocb, sock, msg, len, flags); | 1698 | return bt_sock_recvmsg(iocb, sock, msg, len, flags); |
1699 | } | 1699 | } |
1700 | 1700 | ||
1701 | static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, char __user *optval, int optlen) | 1701 | static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, char __user *optval, unsigned int optlen) |
1702 | { | 1702 | { |
1703 | struct sock *sk = sock->sk; | 1703 | struct sock *sk = sock->sk; |
1704 | struct l2cap_options opts; | 1704 | struct l2cap_options opts; |
@@ -1755,7 +1755,7 @@ static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, char __us | |||
1755 | return err; | 1755 | return err; |
1756 | } | 1756 | } |
1757 | 1757 | ||
1758 | static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int optlen) | 1758 | static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen) |
1759 | { | 1759 | { |
1760 | struct sock *sk = sock->sk; | 1760 | struct sock *sk = sock->sk; |
1761 | struct bt_security sec; | 1761 | struct bt_security sec; |
diff --git a/net/bluetooth/rfcomm/sock.c b/net/bluetooth/rfcomm/sock.c index 0b85e8116859..8a20aaf1f231 100644 --- a/net/bluetooth/rfcomm/sock.c +++ b/net/bluetooth/rfcomm/sock.c | |||
@@ -730,7 +730,7 @@ out: | |||
730 | return copied ? : err; | 730 | return copied ? : err; |
731 | } | 731 | } |
732 | 732 | ||
733 | static int rfcomm_sock_setsockopt_old(struct socket *sock, int optname, char __user *optval, int optlen) | 733 | static int rfcomm_sock_setsockopt_old(struct socket *sock, int optname, char __user *optval, unsigned int optlen) |
734 | { | 734 | { |
735 | struct sock *sk = sock->sk; | 735 | struct sock *sk = sock->sk; |
736 | int err = 0; | 736 | int err = 0; |
@@ -766,7 +766,7 @@ static int rfcomm_sock_setsockopt_old(struct socket *sock, int optname, char __u | |||
766 | return err; | 766 | return err; |
767 | } | 767 | } |
768 | 768 | ||
769 | static int rfcomm_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int optlen) | 769 | static int rfcomm_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen) |
770 | { | 770 | { |
771 | struct sock *sk = sock->sk; | 771 | struct sock *sk = sock->sk; |
772 | struct bt_security sec; | 772 | struct bt_security sec; |
diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c index 13c27f17192c..77f4153bdb5e 100644 --- a/net/bluetooth/sco.c +++ b/net/bluetooth/sco.c | |||
@@ -644,7 +644,7 @@ static int sco_sock_sendmsg(struct kiocb *iocb, struct socket *sock, | |||
644 | return err; | 644 | return err; |
645 | } | 645 | } |
646 | 646 | ||
647 | static int sco_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int optlen) | 647 | static int sco_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen) |
648 | { | 648 | { |
649 | struct sock *sk = sock->sk; | 649 | struct sock *sk = sock->sk; |
650 | int err = 0; | 650 | int err = 0; |