Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=7df089952fca41cb336733e1167c0a25e5a025d8
Commit:     7df089952fca41cb336733e1167c0a25e5a025d8
Parent:     59dca3b28cb915745019d4f4c27d97b6b6ab12c6
Author:     Chuck Lever <[EMAIL PROTECTED]>
AuthorDate: Thu Dec 20 14:54:27 2007 -0500
Committer:  Trond Myklebust <[EMAIL PROTECTED]>
CommitDate: Wed Jan 30 02:06:00 2008 -0500

    SUNRPC: Fix use of copy_to_user() in gss_pipe_upcall()
    
    The gss_pipe_upcall() function expects the copy_to_user() function to
    return a negative error value if the call fails, but copy_to_user()
    returns an unsigned long number of bytes that couldn't be copied.
    
    Can rpc_pipefs actually retry a partially completed upcall read?  If
    not, then gss_pipe_upcall() should punt any partial read, just like the
    upcall logic in net/sunrpc/cache.c.
    
    Signed-off-by: Chuck Lever <[EMAIL PROTECTED]>
    Signed-off-by: Trond Myklebust <[EMAIL PROTECTED]>
---
 net/sunrpc/auth_gss/auth_gss.c |   13 ++++++-------
 1 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c
index 1f2d85e..6dac387 100644
--- a/net/sunrpc/auth_gss/auth_gss.c
+++ b/net/sunrpc/auth_gss/auth_gss.c
@@ -472,16 +472,15 @@ gss_pipe_upcall(struct file *filp, struct rpc_pipe_msg 
*msg,
                char __user *dst, size_t buflen)
 {
        char *data = (char *)msg->data + msg->copied;
-       ssize_t mlen = msg->len;
-       ssize_t left;
+       size_t mlen = min(msg->len, buflen);
+       unsigned long left;
 
-       if (mlen > buflen)
-               mlen = buflen;
        left = copy_to_user(dst, data, mlen);
-       if (left < 0) {
-               msg->errno = left;
-               return left;
+       if (left == mlen) {
+               msg->errno = -EFAULT;
+               return -EFAULT;
        }
+
        mlen -= left;
        msg->copied += mlen;
        msg->errno = 0;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to