summaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/dlmfs
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2020-06-01 16:19:59 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2020-06-01 16:19:59 -0700
commit062ea674ae8ad93530dbf7176c59daef098863df (patch)
treeef1e63bd9770a6b13542289fdd172b1d0cd3b4f7 /fs/ocfs2/dlmfs
parent56446efab9ce4961fe0fe6bbc5bc66374b08b9f3 (diff)
parent0702e4f39034f15855def3165fe7213c7c2c0163 (diff)
downloadlinux-062ea674ae8ad93530dbf7176c59daef098863df.tar.bz2
Merge branch 'uaccess.__copy_to_user' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull uaccess/__copy_to_user updates from Al Viro: "Getting rid of __copy_to_user() callers - stuff that doesn't fit into other series" * 'uaccess.__copy_to_user' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: dlmfs: convert dlmfs_file_read() to copy_to_user() esas2r: don't bother with __copy_to_user()
Diffstat (limited to 'fs/ocfs2/dlmfs')
-rw-r--r--fs/ocfs2/dlmfs/dlmfs.c33
1 files changed, 14 insertions, 19 deletions
diff --git a/fs/ocfs2/dlmfs/dlmfs.c b/fs/ocfs2/dlmfs/dlmfs.c
index a06f19b67d3b..ea868c6f9800 100644
--- a/fs/ocfs2/dlmfs/dlmfs.c
+++ b/fs/ocfs2/dlmfs/dlmfs.c
@@ -227,7 +227,7 @@ static ssize_t dlmfs_file_read(struct file *filp,
loff_t *ppos)
{
int bytes_left;
- ssize_t readlen, got;
+ ssize_t got;
char *lvb_buf;
struct inode *inode = file_inode(filp);
@@ -237,36 +237,31 @@ static ssize_t dlmfs_file_read(struct file *filp,
if (*ppos >= i_size_read(inode))
return 0;
+ /* don't read past the lvb */
+ if (count > i_size_read(inode) - *ppos)
+ count = i_size_read(inode) - *ppos;
+
if (!count)
return 0;
- if (!access_ok(buf, count))
- return -EFAULT;
-
- /* don't read past the lvb */
- if ((count + *ppos) > i_size_read(inode))
- readlen = i_size_read(inode) - *ppos;
- else
- readlen = count;
-
- lvb_buf = kmalloc(readlen, GFP_NOFS);
+ lvb_buf = kmalloc(count, GFP_NOFS);
if (!lvb_buf)
return -ENOMEM;
- got = user_dlm_read_lvb(inode, lvb_buf, readlen);
+ got = user_dlm_read_lvb(inode, lvb_buf, count);
if (got) {
- BUG_ON(got != readlen);
- bytes_left = __copy_to_user(buf, lvb_buf, readlen);
- readlen -= bytes_left;
+ BUG_ON(got != count);
+ bytes_left = copy_to_user(buf, lvb_buf, count);
+ count -= bytes_left;
} else
- readlen = 0;
+ count = 0;
kfree(lvb_buf);
- *ppos = *ppos + readlen;
+ *ppos = *ppos + count;
- mlog(0, "read %zd bytes\n", readlen);
- return readlen;
+ mlog(0, "read %zu bytes\n", count);
+ return count;
}
static ssize_t dlmfs_file_write(struct file *filp,