diff options
author | Anand V. Avati <avati@gluster.com> | 2009-10-22 09:24:52 -0400 |
---|---|---|
committer | Miklos Szeredi <mszeredi@suse.cz> | 2009-11-04 04:24:50 -0500 |
commit | f60311d5f7670d9539b424e4ed8b5c0872fc9e83 (patch) | |
tree | e4289854a25f4640308532726deceb7d6ac293ed /fs/fuse | |
parent | b419148e567728f6af0c3b01965c1cc141e3e13a (diff) |
fuse: prevent fuse_put_request on invalid pointer
fuse_direct_io() has a loop where requests are allocated in each
iteration. if allocation fails, the loop is broken out and follows
into an unconditional fuse_put_request() on that invalid pointer.
Signed-off-by: Anand V. Avati <avati@gluster.com>
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Cc: stable@kernel.org
Diffstat (limited to 'fs/fuse')
-rw-r--r-- | fs/fuse/file.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/fuse/file.c b/fs/fuse/file.c index a3492f7d207c..5887a6395ad2 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c | |||
@@ -1063,7 +1063,8 @@ ssize_t fuse_direct_io(struct file *file, const char __user *buf, | |||
1063 | break; | 1063 | break; |
1064 | } | 1064 | } |
1065 | } | 1065 | } |
1066 | fuse_put_request(fc, req); | 1066 | if (!IS_ERR(req)) |
1067 | fuse_put_request(fc, req); | ||
1067 | if (res > 0) | 1068 | if (res > 0) |
1068 | *ppos = pos; | 1069 | *ppos = pos; |
1069 | 1070 | ||