]> git.hungrycats.org Git - linux/commitdiff
[IPV4/IPV6]: Use size_t for size in {send,recv}msg.
authorStephen Hemminger <shemminger@osdl.org>
Thu, 8 Jan 2004 17:50:34 +0000 (09:50 -0800)
committerStephen Hemminger <shemminger@osdl.org>
Thu, 8 Jan 2004 17:50:34 +0000 (09:50 -0800)
include/net/inet_common.h
include/net/tcp.h
include/net/udp.h
net/ipv4/af_inet.c
net/ipv4/raw.c
net/ipv4/tcp.c
net/ipv4/udp.c
net/ipv6/raw.c
net/ipv6/udp.c
net/sctp/socket.c

index 8449a3b5ba229e44534aae231aff4fc199ac619a..3b0624e7ba166d06c1f914ece90687d61de8b990 100644 (file)
@@ -23,11 +23,11 @@ extern int                  inet_accept(struct socket *sock,
 extern int                     inet_recvmsg(struct kiocb *iocb,
                                             struct socket *sock, 
                                             struct msghdr *ubuf, 
-                                            int size, int flags);
+                                            size_t size, int flags);
 extern int                     inet_sendmsg(struct kiocb *iocb,
                                             struct socket *sock, 
                                             struct msghdr *msg, 
-                                            int size);
+                                            size_t size);
 extern int                     inet_shutdown(struct socket *sock, int how);
 extern unsigned int            inet_poll(struct file * file, struct socket *sock, struct poll_table_struct *wait);
 extern int                     inet_setsockopt(struct socket *sock, int level,
index 2bfe64e2104b3475d29d719b22f0d9169de276c9..aeea9b268f8036a9167f99f67829761d2436782c 100644 (file)
@@ -752,7 +752,7 @@ extern int                  tcp_v4_remember_stamp(struct sock *sk);
 extern int                     tcp_v4_tw_remember_stamp(struct tcp_tw_bucket *tw);
 
 extern int                     tcp_sendmsg(struct kiocb *iocb, struct sock *sk,
-                                           struct msghdr *msg, int size);
+                                           struct msghdr *msg, size_t size);
 extern ssize_t                 tcp_sendpage(struct socket *sock, struct page *page, int offset, size_t size, int flags);
 
 extern int                     tcp_ioctl(struct sock *sk, 
@@ -846,7 +846,7 @@ extern int                  tcp_setsockopt(struct sock *sk, int level,
 extern void                    tcp_set_keepalive(struct sock *sk, int val);
 extern int                     tcp_recvmsg(struct kiocb *iocb, struct sock *sk,
                                            struct msghdr *msg,
-                                           int len, int nonblock, 
+                                           size_t len, int nonblock, 
                                            int flags, int *addr_len);
 
 extern int                     tcp_listen_start(struct sock *sk);
index c50078d5912ceef83e54ea05b40db212cca8d7fc..12d5d7ef62e8038f0a07533dc58a1d4695ef0132 100644 (file)
@@ -68,7 +68,7 @@ extern int    udp_connect(struct sock *sk,
                            struct sockaddr *usin, int addr_len);
 
 extern int     udp_sendmsg(struct kiocb *iocb, struct sock *sk,
-                           struct msghdr *msg, int len);
+                           struct msghdr *msg, size_t len);
 
 extern int     udp_rcv(struct sk_buff *skb);
 extern int     udp_ioctl(struct sock *sk, int cmd, unsigned long arg);
index 6d241b47ced979df7adf87aa8f0d82cd909500e7..98a7baf373e64159894b959b339d9c68dd10d41e 100644 (file)
@@ -731,7 +731,7 @@ int inet_getname(struct socket *sock, struct sockaddr *uaddr,
 
 
 int inet_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,
-                int size, int flags)
+                size_t size, int flags)
 {
        struct sock *sk = sock->sk;
        int addr_len = 0;
@@ -746,7 +746,7 @@ int inet_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,
 
 
 int inet_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,
-                int size)
+                size_t size)
 {
        struct sock *sk = sock->sk;
 
index 72242fe078db5757b225f8cef460c1def7fac9eb..d7b9238d1ea7093a012085ed78e8d9a60281eb6e 100644 (file)
@@ -324,7 +324,7 @@ error:
 }
 
 static int raw_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
-                      int len)
+                      size_t len)
 {
        struct inet_opt *inet = inet_sk(sk);
        struct ipcm_cookie ipc;
@@ -335,17 +335,6 @@ static int raw_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
        u8  tos;
        int err;
 
-       /* This check is ONLY to check for arithmetic overflow
-          on integer(!) len. Not more! Real check will be made
-          in ip_build_xmit --ANK
-
-          BTW socket.c -> af_*.c -> ... make multiple
-          invalid conversions size_t -> int. We MUST repair it f.e.
-          by replacing all of them with size_t and revise all
-          the places sort of len += sizeof(struct iphdr)
-          If len was ULONG_MAX-10 it would be cathastrophe  --ANK
-        */
-
        err = -EMSGSIZE;
        if (len < 0 || len > 0xFFFF)
                goto out;
@@ -523,10 +512,10 @@ out:      return ret;
  */
 
 int raw_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
-               int len, int noblock, int flags, int *addr_len)
+               size_t len, int noblock, int flags, int *addr_len)
 {
        struct inet_opt *inet = inet_sk(sk);
-       int copied = 0;
+       size_t copied = 0;
        int err = -EOPNOTSUPP;
        struct sockaddr_in *sin = (struct sockaddr_in *)msg->msg_name;
        struct sk_buff *skb;
index 6f3331d6b9f1cbc11a853c1fd4055b6110061b0f..8d60264f47edbaf06ad49b3878ab5cd0a7031136 100644 (file)
@@ -1029,7 +1029,7 @@ static inline int select_size(struct sock *sk, struct tcp_opt *tp)
 }
 
 int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
-               int size)
+               size_t size)
 {
        struct iovec *iov;
        struct tcp_opt *tp = tcp_sk(sk);
@@ -1498,7 +1498,7 @@ int tcp_read_sock(struct sock *sk, read_descriptor_t *desc,
  */
 
 int tcp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
-               int len, int nonblock, int flags, int *addr_len)
+               size_t len, int nonblock, int flags, int *addr_len)
 {
        struct tcp_opt *tp = tcp_sk(sk);
        int copied = 0;
index 2114b86335563e94f66e872fc42ad9700edf7b25..cea7b9ab8e1105eb92b2051070316da6c7c15127 100644 (file)
@@ -478,7 +478,7 @@ static unsigned short udp_check(struct udphdr *uh, int len, unsigned long saddr,
 }
 
 int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
-               int len)
+               size_t len)
 {
        struct inet_opt *inet = inet_sk(sk);
        struct udp_opt *up = udp_sk(sk);
@@ -493,18 +493,7 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
        int err;
        int corkreq = up->corkflag || msg->msg_flags&MSG_MORE;
 
-       /* This check is ONLY to check for arithmetic overflow
-          on integer(!) len. Not more! Real check will be made
-          in ip_append_* --ANK
-
-          BTW socket.c -> af_*.c -> ... make multiple
-          invalid conversions size_t -> int. We MUST repair it f.e.
-          by replacing all of them with size_t and revise all
-          the places sort of len += sizeof(struct iphdr)
-          If len was ULONG_MAX-10 it would be cathastrophe  --ANK
-        */
-
-       if (len < 0 || len > 0xFFFF)
+       if (len > 0xFFFF)
                return -EMSGSIZE;
 
        /* 
@@ -782,7 +771,7 @@ static __inline__ int udp_checksum_complete(struct sk_buff *skb)
  */
 
 int udp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
-               int len, int noblock, int flags, int *addr_len)
+               size_t len, int noblock, int flags, int *addr_len)
 {
        struct inet_opt *inet = inet_sk(sk);
        struct sockaddr_in *sin = (struct sockaddr_in *)msg->msg_name;
index 83eb6d3664bdb9d52f4b9c5b2c07766ee2f6f827..78e92ecc02a7264ff8830a043d20975a3a081758 100644 (file)
@@ -345,13 +345,15 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb)
  *     we return it, otherwise we block.
  */
 
-static int rawv6_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, int len,
+static int rawv6_recvmsg(struct kiocb *iocb, struct sock *sk,
+                 struct msghdr *msg, size_t len,
                  int noblock, int flags, int *addr_len)
 {
        struct ipv6_pinfo *np = inet6_sk(sk);
        struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)msg->msg_name;
        struct sk_buff *skb;
-       int copied, err;
+       size_t copied;
+       int err;
 
        if (flags & MSG_OOB)
                return -EOPNOTSUPP;
@@ -527,7 +529,8 @@ error:
        IP6_INC_STATS(Ip6OutDiscards);
        return err; 
 }
-static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, int len)
+static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk,
+                  struct msghdr *msg, size_t len)
 {
        struct ipv6_txoptions opt_space;
        struct sockaddr_in6 * sin6 = (struct sockaddr_in6 *) msg->msg_name;
index 103ab5d599237d856aaf8fd74fcf598827ed24ca..5d7777947ccb7d3145c4ff4a79402e4dddc19fd3 100644 (file)
@@ -366,12 +366,14 @@ static void udpv6_close(struct sock *sk, long timeout)
  *     return it, otherwise we block.
  */
 
-static int udpv6_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, int len,
+static int udpv6_recvmsg(struct kiocb *iocb, struct sock *sk, 
+                 struct msghdr *msg, size_t len,
                  int noblock, int flags, int *addr_len)
 {
        struct ipv6_pinfo *np = inet6_sk(sk);
        struct sk_buff *skb;
-       int copied, err;
+       size_t copied;
+       int err;
 
        if (addr_len)
                *addr_len=sizeof(struct sockaddr_in6);
@@ -774,7 +776,8 @@ out:
        return err;
 }
 
-static int udpv6_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, int len)
+static int udpv6_sendmsg(struct kiocb *iocb, struct sock *sk, 
+                 struct msghdr *msg, size_t len)
 {
        struct ipv6_txoptions opt_space;
        struct udp_opt *up = udp_sk(sk);
@@ -841,7 +844,7 @@ do_udp_sendmsg:
        /* Rough check on arithmetic overflow,
           better check is made in ip6_build_xmit
           */
-       if (len < 0 || len > INT_MAX - sizeof(struct udphdr))
+       if (len > INT_MAX - sizeof(struct udphdr))
                return -EMSGSIZE;
        
        if (up->pending) {
index 36b2ec11a3a8455541da073d45a6a2dd0dbc8200..574efdb0cf42b1e80dc281a199039f9be650e4a0 100644 (file)
@@ -90,7 +90,7 @@ static inline int sctp_wspace(struct sctp_association *asoc);
 static inline void sctp_set_owner_w(struct sctp_chunk *chunk);
 static void sctp_wfree(struct sk_buff *skb);
 static int sctp_wait_for_sndbuf(struct sctp_association *, long *timeo_p,
-                               int msg_len);
+                               size_t msg_len);
 static int sctp_wait_for_packet(struct sock * sk, int *err, long *timeo_p);
 static int sctp_wait_for_connect(struct sctp_association *, long *timeo_p);
 static int sctp_wait_for_accept(struct sock *sk, long timeo);
@@ -943,7 +943,7 @@ static int sctp_error(struct sock *sk, int flags, int err)
 SCTP_STATIC int sctp_msghdr_parse(const struct msghdr *, sctp_cmsgs_t *);
 
 SCTP_STATIC int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
-                            struct msghdr *msg, int msg_len)
+                            struct msghdr *msg, size_t msg_len)
 {
        struct sctp_opt *sp;
        struct sctp_endpoint *ep;
@@ -965,7 +965,7 @@ SCTP_STATIC int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
        struct list_head *pos;
        int msg_flags = msg->msg_flags;
 
-       SCTP_DEBUG_PRINTK("sctp_sendmsg(sk: %p, msg: %p, msg_len: %d)\n",
+       SCTP_DEBUG_PRINTK("sctp_sendmsg(sk: %p, msg: %p, msg_len: %u)\n",
                          sk, msg, msg_len);
 
        err = 0;
@@ -1021,7 +1021,7 @@ SCTP_STATIC int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
                associd = sinfo->sinfo_assoc_id;
        }
 
-       SCTP_DEBUG_PRINTK("msg_len: %d, sinfo_flags: 0x%x\n",
+       SCTP_DEBUG_PRINTK("msg_len: %u, sinfo_flags: 0x%x\n",
                          msg_len, sinfo_flags);
 
        /* MSG_EOF or MSG_ABORT cannot be set on a TCP-style socket. */
@@ -1377,7 +1377,7 @@ static int sctp_skb_pull(struct sk_buff *skb, int len)
 static struct sk_buff *sctp_skb_recv_datagram(struct sock *, int, int, int *);
 
 SCTP_STATIC int sctp_recvmsg(struct kiocb *iocb, struct sock *sk,
-                            struct msghdr *msg, int len, int noblock,
+                            struct msghdr *msg, size_t len, int noblock,
                             int flags, int *addr_len)
 {
        struct sctp_ulpevent *event = NULL;
@@ -4157,14 +4157,14 @@ static void sctp_wfree(struct sk_buff *skb)
 
 /* Helper function to wait for space in the sndbuf.  */
 static int sctp_wait_for_sndbuf(struct sctp_association *asoc, long *timeo_p,
-                               int msg_len)
+                               size_t msg_len)
 {
        struct sock *sk = asoc->base.sk;
        int err = 0;
        long current_timeo = *timeo_p;
        DEFINE_WAIT(wait);
 
-       SCTP_DEBUG_PRINTK("wait_for_sndbuf: asoc=%p, timeo=%ld, msg_len=%d\n",
+       SCTP_DEBUG_PRINTK("wait_for_sndbuf: asoc=%p, timeo=%ld, msg_len=%u\n",
                          asoc, (long)(*timeo_p), msg_len);
 
        /* Increment the association's refcnt.  */