Re: [Security] TIPC security issues

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Paul Gortmaker
Date: Thursday, October 28, 2010 - 12:51 pm

[Re: [Security] TIPC security issues] On 27/10/2010 (Wed 10:50) David Miller wrote:


In keeping with this idea, perhaps this is a better solution for getting
an immediate fix to the tipc part of this issue than the previous
patches I'd sent?  I can see some immediate advantages to this:

   -it adds checks that arguably should have been there since day
    one, since it is always best to check for garbage input ASAP.

   -it is a much smaller change, and thus easier to review and have
    confidence in

   -by being smaller and clearer, it lends itself better for being
    directly cherry picked onto the -stable release(s).

We'll still need to clean up the mishmash of variable types being
used in the tipc internals, but at least we can then do that in
a development cycle, and we won't have to inflict those bigger
cleanup changesets back onto GregKH.

Paul.

----

From 3fb200c1b27cf5cde668888ab85cffb1e9c6314f Mon Sep 17 00:00:00 2001
From: Allan Stephens <Allan.Stephens@windriver.com>
Date: Thu, 28 Oct 2010 07:58:24 -0400
Subject: [PATCH] tipc: Fix security hole exploitable by excessive send requests

Add checks to TIPC's socket send routines to promptly detect and
abort attempts to send more than 66,000 bytes in a single TIPC
message, or more than 2**31-1 bytes in a single TIPC byte stream
request.  This prevents excessively large size_t based inputs from
reaching internal tipc routines that currently use int values where
they risk being truncated or incorrectly wrapped.

The three checks are added to send_msg() send_packet() and
send_stream() -- all of which are entered via proto_ops .sendmsg, which
in turn already checked for msg_iovlen > UIO_MAXIOV [in net/socket.c],
so there is no need to repeat that specific test in these new checks.

Reported-by: Dan Rosenberg <drosenberg@vsecurity.com>
Signed-off-by: Allan Stephens <Allan.Stephens@windriver.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 include/linux/tipc.h |    2 +-
 net/tipc/socket.c    |   10 ++++++++++
 2 files changed, 11 insertions(+), 1 deletions(-)

diff --git a/include/linux/tipc.h b/include/linux/tipc.h
index d10614b..1fd2889 100644
--- a/include/linux/tipc.h
+++ b/include/linux/tipc.h
@@ -101,7 +101,7 @@ static inline unsigned int tipc_node(__u32 addr)
  * Limiting values for messages
  */
 
-#define TIPC_MAX_USER_MSG_SIZE	66000
+#define TIPC_MAX_USER_MSG_SIZE	66000U
 
 /*
  * Message importance levels
diff --git a/net/tipc/socket.c b/net/tipc/socket.c
index 33217fc..3562cf9 100644
--- a/net/tipc/socket.c
+++ b/net/tipc/socket.c
@@ -542,6 +542,8 @@ static int send_msg(struct kiocb *iocb, struct socket *sock,
 	if (unlikely((m->msg_namelen < sizeof(*dest)) ||
 		     (dest->family != AF_TIPC)))
 		return -EINVAL;
+	if (total_len > TIPC_MAX_USER_MSG_SIZE)
+		return -EMSGSIZE;
 
 	if (iocb)
 		lock_sock(sk);
@@ -649,6 +651,9 @@ static int send_packet(struct kiocb *iocb, struct socket *sock,
 	if (unlikely(dest))
 		return send_msg(iocb, sock, m, total_len);
 
+	if (total_len > TIPC_MAX_USER_MSG_SIZE)
+		return -EMSGSIZE;
+
 	if (iocb)
 		lock_sock(sk);
 
@@ -733,6 +738,11 @@ static int send_stream(struct kiocb *iocb, struct socket *sock,
 		goto exit;
 	}
 
+	if (total_len > (unsigned)INT_MAX) {
+		res = -EMSGSIZE;
+		goto exit;
+	}
+
 	/*
 	 * Send each iovec entry using one or more messages
 	 *
-- 
1.7.3.1

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
TIPC security issues, Dan Rosenberg, (Thu Oct 21, 4:45 pm)
Re: [Security] TIPC security issues, Linus Torvalds, (Thu Oct 21, 5:31 pm)
RE: TIPC security issues, Jon Maloy, (Fri Oct 22, 6:49 am)
Re: [Security] TIPC security issues, David Miller, (Sun Oct 24, 7:14 pm)
Re: [Security] TIPC security issues, Linus Torvalds, (Sun Oct 24, 8:42 pm)
Re: [Security] TIPC security issues, David Miller, (Sun Oct 24, 10:28 pm)
Re: [Security] TIPC security issues, David Miller, (Wed Oct 27, 10:29 am)
Re: [Security] TIPC security issues, Linus Torvalds, (Wed Oct 27, 10:37 am)
Re: [Security] TIPC security issues, David Miller, (Wed Oct 27, 10:50 am)
Re: [Security] TIPC security issues, Dan Rosenberg, (Wed Oct 27, 11:26 am)
Re: [Security] TIPC security issues, Paul Gortmaker, (Wed Oct 27, 11:27 am)
Re: [Security] TIPC security issues, David Miller, (Wed Oct 27, 11:34 am)
Re: [Security] TIPC security issues, David Miller, (Wed Oct 27, 11:35 am)
Re: [Security] TIPC security issues, Linus Torvalds, (Wed Oct 27, 11:51 am)
Re: [Security] TIPC security issues, Paul Gortmaker, (Wed Oct 27, 12:00 pm)
Re: [Security] TIPC security issues, David Miller, (Wed Oct 27, 12:27 pm)
Re: [Security] TIPC security issues, Linus Torvalds, (Thu Oct 28, 8:32 am)
Re: [Security] TIPC security issues, Andy Grover, (Thu Oct 28, 11:45 am)
Re: [Security] TIPC security issues, David Miller, (Thu Oct 28, 11:49 am)
Re: [Security] TIPC security issues, Paul Gortmaker, (Thu Oct 28, 12:51 pm)