aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc')
-rw-r--r--net/tipc/socket.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/net/tipc/socket.c b/net/tipc/socket.c
index 29d94d53198d..e1c791798ba1 100644
--- a/net/tipc/socket.c
+++ b/net/tipc/socket.c
@@ -535,6 +535,9 @@ static int send_msg(struct kiocb *iocb, struct socket *sock,
535 if (unlikely((m->msg_namelen < sizeof(*dest)) || 535 if (unlikely((m->msg_namelen < sizeof(*dest)) ||
536 (dest->family != AF_TIPC))) 536 (dest->family != AF_TIPC)))
537 return -EINVAL; 537 return -EINVAL;
538 if ((total_len > TIPC_MAX_USER_MSG_SIZE) ||
539 (m->msg_iovlen > (unsigned)INT_MAX))
540 return -EMSGSIZE;
538 541
539 if (iocb) 542 if (iocb)
540 lock_sock(sk); 543 lock_sock(sk);
@@ -640,6 +643,10 @@ static int send_packet(struct kiocb *iocb, struct socket *sock,
640 if (unlikely(dest)) 643 if (unlikely(dest))
641 return send_msg(iocb, sock, m, total_len); 644 return send_msg(iocb, sock, m, total_len);
642 645
646 if ((total_len > TIPC_MAX_USER_MSG_SIZE) ||
647 (m->msg_iovlen > (unsigned)INT_MAX))
648 return -EMSGSIZE;
649
643 if (iocb) 650 if (iocb)
644 lock_sock(sk); 651 lock_sock(sk);
645 652
@@ -723,6 +730,12 @@ static int send_stream(struct kiocb *iocb, struct socket *sock,
723 goto exit; 730 goto exit;
724 } 731 }
725 732
733 if ((total_len > (unsigned)INT_MAX) ||
734 (m->msg_iovlen > (unsigned)INT_MAX)) {
735 res = -EMSGSIZE;
736 goto exit;
737 }
738
726 /* 739 /*
727 * Send each iovec entry using one or more messages 740 * Send each iovec entry using one or more messages
728 * 741 *