Skip to content

Commit

Permalink
fuse: verify all ioctl retry iov elements
Browse files Browse the repository at this point in the history
Commit 7572777 attempted to verify that
the total iovec from the client doesn't overflow iov_length() but it
only checked the first element.  The iovec could still overflow by
starting with a small element.  The obvious fix is to check all the
elements.

The overflow case doesn't look dangerous to the kernel as the copy is
limited by the length after the overflow.  This fix restores the
intention of returning an error instead of successfully copying less
than the iovec represented.

I found this by code inspection.  I built it but don't have a test case.
I'm cc:ing stable because the initial commit did as well.

Signed-off-by: Zach Brown <[email protected]>
Signed-off-by: Miklos Szeredi <[email protected]>
CC: <[email protected]>         [2.6.37+]
  • Loading branch information
Zach Brown authored and Miklos Szeredi committed Aug 6, 2012
1 parent f3840dc commit fb6ccff
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion fs/fuse/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -1703,7 +1703,7 @@ static int fuse_verify_ioctl_iov(struct iovec *iov, size_t count)
size_t n;
u32 max = FUSE_MAX_PAGES_PER_REQ << PAGE_SHIFT;

for (n = 0; n < count; n++) {
for (n = 0; n < count; n++, iov++) {
if (iov->iov_len > (size_t) max)
return -ENOMEM;
max -= iov->iov_len;
Expand Down

0 comments on commit fb6ccff

Please sign in to comment.