On Mon, Dec 8, 2014 at 10:14 AM, Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote: > > iov_iter_get_pages() in ITER_KVEC case, trying to avoid get_user_pages_fast() > and getting it wrong. FWIW, the reproducer is finit_module(fd, ....) > where fd has been opened with O_DIRECT. In that case we get kernel_read() > on O_DIRECT and the buffer has just been vmalloc'ed. Ugh. That's horrid. Do we need to even support O_DIRECT in that case? In general, we should *not* do IO on vmalloc'ed areas, although at least the non-O_DIRECT case where we just memcpy() it as if it came from user space is much better. Did this actually use to work? Or is it an issue of "the new iov_iter is so generic that something that used to just return an error now 'works' and triggers the problem"? > What's the sane way to grab struct page * for a vmalloc'ed address? So "vmalloc_to_page()" should work. However, it's actually fundamentally racy unless you can guarantee that the vmalloc()'ed area in question is stable (so you had better have done that allocation yourself, and be in control of the freeing, rather than "we look up random vmalloc'ed addresses). In general, it's really a horrible thing to use, and tends to be a big red sign that "somebody misdesigned this badly" Linus -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html