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

    NFS: Fix use of copy_to_user() in idmap_pipe_upcall
    
    The idmap_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.
    
    Signed-off-by: Chuck Lever <[EMAIL PROTECTED]>
    Signed-off-by: Trond Myklebust <[EMAIL PROTECTED]>
---
 fs/nfs/idmap.c |   14 ++++++--------
 1 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/fs/nfs/idmap.c b/fs/nfs/idmap.c
index c56fc7d..d93e071 100644
--- a/fs/nfs/idmap.c
+++ b/fs/nfs/idmap.c
@@ -358,17 +358,15 @@ idmap_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 - msg->copied;
-       ssize_t left;
-
-       if (mlen > buflen)
-               mlen = buflen;
+       size_t mlen = min(msg->len, buflen);
+       unsigned long left;
 
        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