ima: fix fallback to use new_sync_read()
authorDmitry Kasatkin <d.kasatkin@samsung.com>
Mon, 23 Jun 2014 17:32:56 +0000 (20:32 +0300)
committerMimi Zohar <zohar@linux.vnet.ibm.com>
Tue, 2 Sep 2014 21:03:36 +0000 (17:03 -0400)
3.16 commit aad4f8bb42af06371aa0e85bf0cd9d52c0494985
'switch simple generic_file_aio_read() users to ->read_iter()'
replaced ->aio_read with ->read_iter in most of the file systems
and introduced new_sync_read() as a replacement for do_sync_read().

Most of file systems set '->read' and ima_kernel_read is not affected.
When ->read is not set, this patch adopts fallback call changes from the
vfs_read.

Signed-off-by: Dmitry Kasatkin <d.kasatkin@samsung.com>
Signed-off-by: Mimi Zohar <zohar@linux.vnet.ibm.com>
Cc: <stable@vger.kernel.org> 3.16+
security/integrity/ima/ima_crypto.c

index 1178b307d5621e23ef1be2eda7c5650fb2333d06..3b26472fbf0af69e0995b4bb6f0d0deb4d333dd6 100644 (file)
@@ -80,19 +80,19 @@ static int ima_kernel_read(struct file *file, loff_t offset,
 {
        mm_segment_t old_fs;
        char __user *buf = addr;
-       ssize_t ret;
+       ssize_t ret = -EINVAL;
 
        if (!(file->f_mode & FMODE_READ))
                return -EBADF;
-       if (!file->f_op->read && !file->f_op->aio_read)
-               return -EINVAL;
 
        old_fs = get_fs();
        set_fs(get_ds());
        if (file->f_op->read)
                ret = file->f_op->read(file, buf, count, &offset);
-       else
+       else if (file->f_op->aio_read)
                ret = do_sync_read(file, buf, count, &offset);
+       else if (file->f_op->read_iter)
+               ret = new_sync_read(file, buf, count, &offset);
        set_fs(old_fs);
        return ret;
 }