vfs/splice: Fix missed checks in new __kernel_write() helper
authorAl Viro <viro@ZenIV.linux.org.uk>
Wed, 27 Mar 2013 15:20:30 +0000 (15:20 +0000)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 27 Mar 2013 16:24:02 +0000 (09:24 -0700)
Commit 06ae43f34bcc ("Don't bother with redoing rw_verify_area() from
default_file_splice_from()") lost the checks to test existence of the
write/aio_write methods.  My apologies ;-/

Eventually, we want that in fs/splice.c side of things (no point
repeating it for every buffer, after all), but for now this is the
obvious minimal fix.

Reported-by: Dave Jones <davej@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/read_write.c

index f7b5a23..e6ddc8d 100644 (file)
@@ -424,6 +424,9 @@ ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t
        const char __user *p;
        ssize_t ret;
 
+       if (!file->f_op || (!file->f_op->write && !file->f_op->aio_write))
+               return -EINVAL;
+
        old_fs = get_fs();
        set_fs(get_ds());
        p = (__force const char __user *)buf;