diff options
| -rw-r--r-- | include/linux/tipc.h | 2 | ||||
| -rw-r--r-- | net/tipc/socket.c | 13 |
2 files changed, 14 insertions, 1 deletions
diff --git a/include/linux/tipc.h b/include/linux/tipc.h index a5b994a204d2..f2d90091cc20 100644 --- a/include/linux/tipc.h +++ b/include/linux/tipc.h | |||
| @@ -101,7 +101,7 @@ static inline unsigned int tipc_node(__u32 addr) | |||
| 101 | * Limiting values for messages | 101 | * Limiting values for messages |
| 102 | */ | 102 | */ |
| 103 | 103 | ||
| 104 | #define TIPC_MAX_USER_MSG_SIZE 66000 | 104 | #define TIPC_MAX_USER_MSG_SIZE 66000U |
| 105 | 105 | ||
| 106 | /* | 106 | /* |
| 107 | * Message importance levels | 107 | * Message importance levels |
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 | * |
