mirror of
https://github.com/torvalds/linux.git
synced 2026-06-09 23:23:53 +02:00
fuse: verify all ioctl retry iov elements
commitfb6ccff667upstream. Commit7572777eefattempted 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 <zab@redhat.com> Signed-off-by: Miklos Szeredi <mszeredi@suse.cz> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
9ea2c02baf
commit
90f9cb724d
|
|
@ -1698,7 +1698,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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user