mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 13:53:33 +00:00
bcachefs: Fix copy_to_user() usage in flush_buf()
copy_to_user() returns the number of bytes successfully copied - not an errcode. Reported-by: Dan Carpenter <dan.carpenter@linaro.org> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
3e55189b50
commit
f7f6943a8c
1 changed files with 8 additions and 8 deletions
|
@ -319,16 +319,16 @@ static ssize_t flush_buf(struct dump_iter *i)
|
|||
{
|
||||
if (i->buf.pos) {
|
||||
size_t bytes = min_t(size_t, i->buf.pos, i->size);
|
||||
int err = copy_to_user(i->ubuf, i->buf.buf, bytes);
|
||||
int copied = bytes - copy_to_user(i->ubuf, i->buf.buf, bytes);
|
||||
|
||||
if (err)
|
||||
return err;
|
||||
i->ret += copied;
|
||||
i->ubuf += copied;
|
||||
i->size -= copied;
|
||||
i->buf.pos -= copied;
|
||||
memmove(i->buf.buf, i->buf.buf + copied, i->buf.pos);
|
||||
|
||||
i->ret += bytes;
|
||||
i->ubuf += bytes;
|
||||
i->size -= bytes;
|
||||
i->buf.pos -= bytes;
|
||||
memmove(i->buf.buf, i->buf.buf + bytes, i->buf.pos);
|
||||
if (copied != bytes)
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
return i->size ? 0 : i->ret;
|
||||
|
|
Loading…
Reference in a new issue