All of lore.kernel.org
 help / color / mirror / Atom feed
From: Amir Goldstein <amir73il@gmail.com>
To: "Darrick J. Wong" <darrick.wong@oracle.com>
Cc: Dave Chinner <david@fromorbit.com>,
	Christoph Hellwig <hch@lst.de>,
	Olga Kornievskaia <olga.kornievskaia@gmail.com>,
	Luis Henriques <lhenriques@suse.com>,
	Al Viro <viro@zeniv.linux.org.uk>,
	linux-fsdevel <linux-fsdevel@vger.kernel.org>,
	linux-xfs <linux-xfs@vger.kernel.org>,
	Linux NFS Mailing List <linux-nfs@vger.kernel.org>,
	CIFS <linux-cifs@vger.kernel.org>,
	ceph-devel@vger.kernel.org, linux-api@vger.kernel.org,
	Dave Chinner <dchinner@redhat.com>
Subject: Re: [PATCH v2 4/8] vfs: add missing checks to copy_file_range
Date: Tue, 28 May 2019 19:39:10 +0300	[thread overview]
Message-ID: <CAOQ4uxg4JEyzKCd-OGiox-mLth2At7hFM-WDGfqdVc2WTBr3cA@mail.gmail.com> (raw)
In-Reply-To: <20190528163110.GG5221@magnolia>

On Tue, May 28, 2019 at 7:31 PM Darrick J. Wong <darrick.wong@oracle.com> wrote:
>
> On Tue, May 28, 2019 at 07:26:29PM +0300, Amir Goldstein wrote:
> > On Tue, May 28, 2019 at 7:18 PM Darrick J. Wong <darrick.wong@oracle.com> wrote:
> > >
> > > On Sun, May 26, 2019 at 09:10:55AM +0300, Amir Goldstein wrote:
> > > > Like the clone and dedupe interfaces we've recently fixed, the
> > > > copy_file_range() implementation is missing basic sanity, limits and
> > > > boundary condition tests on the parameters that are passed to it
> > > > from userspace. Create a new "generic_copy_file_checks()" function
> > > > modelled on the generic_remap_checks() function to provide this
> > > > missing functionality.
> > > >
> > > > [Amir] Shorten copy length instead of checking pos_in limits
> > > > because input file size already abides by the limits.
> > > >
> > > > Signed-off-by: Dave Chinner <dchinner@redhat.com>
> > > > Signed-off-by: Amir Goldstein <amir73il@gmail.com>
> > > > ---
> > > >  fs/read_write.c    |  3 ++-
> > > >  include/linux/fs.h |  3 +++
> > > >  mm/filemap.c       | 53 ++++++++++++++++++++++++++++++++++++++++++++++
> > > >  3 files changed, 58 insertions(+), 1 deletion(-)
> > > >
> > > > diff --git a/fs/read_write.c b/fs/read_write.c
> > > > index f1900bdb3127..b0fb1176b628 100644
> > > > --- a/fs/read_write.c
> > > > +++ b/fs/read_write.c
> > > > @@ -1626,7 +1626,8 @@ ssize_t vfs_copy_file_range(struct file *file_in, loff_t pos_in,
> > > >       if (file_inode(file_in)->i_sb != file_inode(file_out)->i_sb)
> > > >               return -EXDEV;
> > > >
> > > > -     ret = generic_file_rw_checks(file_in, file_out);
> > > > +     ret = generic_copy_file_checks(file_in, pos_in, file_out, pos_out, &len,
> > > > +                                    flags);
> > > >       if (unlikely(ret))
> > > >               return ret;
> > > >
> > > > diff --git a/include/linux/fs.h b/include/linux/fs.h
> > > > index 89b9b73eb581..e4d382c4342a 100644
> > > > --- a/include/linux/fs.h
> > > > +++ b/include/linux/fs.h
> > > > @@ -3050,6 +3050,9 @@ extern int generic_remap_checks(struct file *file_in, loff_t pos_in,
> > > >                               struct file *file_out, loff_t pos_out,
> > > >                               loff_t *count, unsigned int remap_flags);
> > > >  extern int generic_file_rw_checks(struct file *file_in, struct file *file_out);
> > > > +extern int generic_copy_file_checks(struct file *file_in, loff_t pos_in,
> > > > +                                 struct file *file_out, loff_t pos_out,
> > > > +                                 size_t *count, unsigned int flags);
> > > >  extern ssize_t generic_file_read_iter(struct kiocb *, struct iov_iter *);
> > > >  extern ssize_t __generic_file_write_iter(struct kiocb *, struct iov_iter *);
> > > >  extern ssize_t generic_file_write_iter(struct kiocb *, struct iov_iter *);
> > > > diff --git a/mm/filemap.c b/mm/filemap.c
> > > > index 798aac92cd76..1852fbf08eeb 100644
> > > > --- a/mm/filemap.c
> > > > +++ b/mm/filemap.c
> > > > @@ -3064,6 +3064,59 @@ int generic_file_rw_checks(struct file *file_in, struct file *file_out)
> > > >       return 0;
> > > >  }
> > > >
> > > > +/*
> > > > + * Performs necessary checks before doing a file copy
> > > > + *
> > > > + * Can adjust amount of bytes to copy
> > >
> > > That's the @req_count parameter, correct?
> >
> > Correct. Same as generic_remap_checks()
>
> Ok.  Would you mind updating the comment?
>
OK.

Thanks,
Amir.

  reply	other threads:[~2019-05-28 16:39 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-26  6:10 [PATCH v2 0/8] Fixes for major copy_file_range() issues Amir Goldstein
2019-05-26  6:10 ` [PATCH v2 1/8] vfs: introduce generic_copy_file_range() Amir Goldstein
2019-05-28 16:11   ` Darrick J. Wong
2019-05-26  6:10 ` [PATCH v2 2/8] vfs: no fallback for ->copy_file_range Amir Goldstein
2019-05-28 16:09   ` Darrick J. Wong
2019-05-26  6:10 ` [PATCH v2 3/8] vfs: introduce generic_file_rw_checks() Amir Goldstein
2019-05-28 16:14   ` Darrick J. Wong
2019-05-26  6:10 ` [PATCH v2 4/8] vfs: add missing checks to copy_file_range Amir Goldstein
2019-05-28 16:18   ` Darrick J. Wong
2019-05-28 16:26     ` Amir Goldstein
2019-05-28 16:31       ` Darrick J. Wong
2019-05-28 16:39         ` Amir Goldstein [this message]
2019-05-26  6:10 ` [PATCH v2 5/8] vfs: copy_file_range needs to strip setuid bits Amir Goldstein
2019-05-28 16:25   ` Darrick J. Wong
2019-05-31 19:34   ` J. Bruce Fields
2019-05-26  6:10 ` [PATCH v2 6/8] vfs: copy_file_range should update file timestamps Amir Goldstein
2019-05-27 14:35   ` Luis Henriques
2019-05-27 22:05     ` Dave Chinner
2019-05-28  8:53       ` Luis Henriques
2019-05-28 16:30   ` Darrick J. Wong
2019-05-28 16:36     ` Amir Goldstein
2019-05-26  6:10 ` [PATCH v2 7/8] vfs: allow copy_file_range to copy across devices Amir Goldstein
2019-05-28 16:34   ` Darrick J. Wong
2019-05-26  6:10 ` [PATCH v2 8/8] vfs: remove redundant checks from generic_remap_checks() Amir Goldstein
2019-05-28 16:37   ` Darrick J. Wong
2019-05-26  6:11 ` [PATCH v2 9/8] man-pages: copy_file_range updates Amir Goldstein
2019-05-28 16:48   ` Darrick J. Wong
2019-05-29 16:20     ` Amir Goldstein

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAOQ4uxg4JEyzKCd-OGiox-mLth2At7hFM-WDGfqdVc2WTBr3cA@mail.gmail.com \
    --to=amir73il@gmail.com \
    --cc=ceph-devel@vger.kernel.org \
    --cc=darrick.wong@oracle.com \
    --cc=david@fromorbit.com \
    --cc=dchinner@redhat.com \
    --cc=hch@lst.de \
    --cc=lhenriques@suse.com \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-cifs@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=linux-xfs@vger.kernel.org \
    --cc=olga.kornievskaia@gmail.com \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.