Messages in this thread | | | Subject | Re: [fuse-devel] [PATCH] fuse: break infinite loop in fuse_fill_write_pages() | From | Maxim Patlasov <> | Date | Fri, 2 Oct 2015 12:27:45 -0700 |
| |
On 10/02/2015 04:21 AM, Konstantin Khlebnikov wrote: > Bump. Add more peopple in CC. > > On Mon, Sep 21, 2015 at 1:02 PM, Roman Gushchin <klamm@yandex-team.ru> wrote: >> I got a report about unkillable task eating CPU. Thge further >> investigation shows, that the problem is in the fuse_fill_write_pages() >> function. If iov's first segment has zero length, we get an infinite >> loop, because we never reach iov_iter_advance() call.
iov_iter_copy_from_user_atomic() eventually calls iterate_iovec(). The latter silently consumes zero-length iov. So I don't think "iov's first segment has zero length" can cause infinite loop.
Thanks, Maxim
>> >> Fix this by calling iov_iter_advance() before repeating an attempt to >> copy data from userspace. >> >> A similar problem is described in 124d3b7041f ("fix writev regression: >> pan hanging unkillable and un-straceable"). >> >> Signed-off-by: Roman Gushchin <klamm@yandex-team.ru> >> Cc: Miklos Szeredi <miklos@szeredi.hu> >> --- >> fs/fuse/file.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/fs/fuse/file.c b/fs/fuse/file.c >> index f523f2f..195476a 100644 >> --- a/fs/fuse/file.c >> +++ b/fs/fuse/file.c >> @@ -1049,6 +1049,7 @@ static ssize_t fuse_fill_write_pages(struct fuse_req *req, >> tmp = iov_iter_copy_from_user_atomic(page, ii, offset, bytes); >> flush_dcache_page(page); >> >> + iov_iter_advance(ii, tmp); >> if (!tmp) { >> unlock_page(page); >> page_cache_release(page); >> @@ -1061,7 +1062,6 @@ static ssize_t fuse_fill_write_pages(struct fuse_req *req, >> req->page_descs[req->num_pages].length = tmp; >> req->num_pages++; >> >> - iov_iter_advance(ii, tmp); >> count += tmp; >> pos += tmp; >> offset += tmp; >> -- >> 2.4.3 >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html >> Please read the FAQ at http://www.tux.org/lkml/ > ------------------------------------------------------------------------------ > _______________________________________________ > fuse-devel mailing list > fuse-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/fuse-devel
| |