fuse: fix return value of fuse_dev_write()
authorCsaba Henk <csaba@gluster.com>
Mon, 29 Jun 2009 01:26:53 +0000 (03:26 +0200)
committerMiklos Szeredi <mszeredi@suse.cz>
Tue, 30 Jun 2009 18:06:23 +0000 (20:06 +0200)
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>
CC: stable@kernel.org
fs/fuse/dev.c

index 8fed2ed12f38b3ab468a042964ae800479f18d18..8a11a8c67c42cdf199038ab35394e4ec9e192cdf 100644 (file)
@@ -910,7 +910,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;