summaryrefslogtreecommitdiff
path: root/fs/fuse
diff options
context:
space:
mode:
authorCsaba Henk <csaba@gluster.com>2009-06-29 03:26:53 +0200
committerGreg Kroah-Hartman <gregkh@suse.de>2009-07-19 20:38:56 -0700
commit0457e83ceec2a048a330713a3ae828c2fcd6c9f2 (patch)
tree217ddbdc285c9ca27304a605d717215a0dbfd78b /fs/fuse
parentf4d8cd6481fab1e7651e342b87c4828c548cbc52 (diff)
downloadlinux-stable-0457e83ceec2a048a330713a3ae828c2fcd6c9f2.tar.gz
linux-stable-0457e83ceec2a048a330713a3ae828c2fcd6c9f2.tar.bz2
linux-stable-0457e83ceec2a048a330713a3ae828c2fcd6c9f2.zip
fuse: fix return value of fuse_dev_write()
commit b4c458b3a23d76936e76678f2074b1528f129f7a upstream. On 64 bit systems -- where sizeof(ssize_t) > sizeof(int) -- the following test exposes a bug due to a non-careful return of an int or unsigned value: implement a FUSE filesystem which sends an unsolicited notification to the kernel with invalid opcode. The respective write to /dev/fuse will return (1 << 32) - EINVAL with errno == 0 instead of -1 with errno == EINVAL. Signed-off-by: Miklos Szeredi <mszeredi@suse.cz> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'fs/fuse')
-rw-r--r--fs/fuse/dev.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
index ba76b68c52ff..eb403358dd5d 100644
--- a/fs/fuse/dev.c
+++ b/fs/fuse/dev.c
@@ -904,7 +904,7 @@ static ssize_t fuse_dev_write(struct kiocb *iocb, const struct iovec *iov,
unsigned long nr_segs, loff_t pos)
{
int err;
- unsigned nbytes = iov_length(iov, nr_segs);
+ size_t nbytes = iov_length(iov, nr_segs);
struct fuse_req *req;
struct fuse_out_header oh;
struct fuse_copy_state cs;