All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 03/20] SUNRPC: Fix some signed v. unsigned comparisons in xprtsock.c
@ 2007-08-06 15:56 Chuck Lever
  2007-08-11 14:43 ` Trond Myklebust
  0 siblings, 1 reply; 4+ messages in thread
From: Chuck Lever @ 2007-08-06 15:56 UTC (permalink / raw)
  To: trond.myklebust; +Cc: nfs

Currently these are not harmful because the range of "len" is less than the
size of a page.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---

 net/sunrpc/xprtsock.c |   18 ++++++++++++++----
 1 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 4ae7eed..274f235 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -338,7 +338,10 @@ static int xs_send_pagedata(struct socket *sock, struct xdr_buf *xdr, unsigned i
 		if (remainder != 0 || more)
 			flags |= MSG_MORE;
 		err = sock->ops->sendpage(sock, *ppage, base, len, flags);
-		if (remainder == 0 || err != len)
+		if (err < 0 || (unsigned int)err != len)
+			break;
+
+		if (remainder == 0)
 			break;
 		sent += err;
 		ppage++;
@@ -377,8 +380,12 @@ static int xs_sendpages(struct socket *sock, struct sockaddr *addr, int addrlen,
 	if (base < xdr->head[0].iov_len || addr != NULL) {
 		unsigned int len = xdr->head[0].iov_len - base;
 		remainder -= len;
-		err = xs_send_kvec(sock, addr, addrlen, &xdr->head[0], base, remainder != 0);
-		if (remainder == 0 || err != len)
+		err = xs_send_kvec(sock, addr, addrlen, &xdr->head[0],
+				   base, remainder != 0);
+		if (err < 0 || (unsigned int)err != len)
+			goto out;
+
+		if (remainder == 0)
 			goto out;
 		sent += err;
 		base = 0;
@@ -389,7 +396,10 @@ static int xs_sendpages(struct socket *sock, struct sockaddr *addr, int addrlen,
 		unsigned int len = xdr->page_len - base;
 		remainder -= len;
 		err = xs_send_pagedata(sock, xdr, base, remainder != 0);
-		if (remainder == 0 || err != len)
+		if (err < 0 || (unsigned int)err != len)
+			goto out;
+
+		if (remainder == 0)
 			goto out;
 		sent += err;
 		base = 0;


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
NFS maillist  -  NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2007-08-13 17:42 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-08-06 15:56 [PATCH 03/20] SUNRPC: Fix some signed v. unsigned comparisons in xprtsock.c Chuck Lever
2007-08-11 14:43 ` Trond Myklebust
2007-08-13 14:10   ` Chuck Lever
2007-08-13 17:42     ` Trond Myklebust

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.