NFS: Fix use of copy_to_user() in idmap_pipe_upcall
Subsystems (2)
PATCH 11/27 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]>
---
fs/nfs/idmap.c | 13 +++++++------ 1 files changed, 7 insertions(+), 6 deletions(-)
fs/nfs/idmap.c +7 -6
@@ -357,19 +357,20 @@ 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; +size_t mlen = msg->len; +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 -1 ; } + mlen -= left; - msg->copied += mlen; + msg->copied += left; msg->errno =0 ;return mlen; }
-------------------------------------------------------------------------
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 - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs