From: Andreas Dilger <adilger@dilger.ca>
To: Amir Goldstein <amir73il@gmail.com>
Cc: Luis Henriques <lhenriques@suse.de>,
Trond Myklebust <trondmy@hammerspace.com>,
"samba-technical@lists.samba.org"
<samba-technical@lists.samba.org>,
"drinkcat@chromium.org" <drinkcat@chromium.org>,
"iant@google.com" <iant@google.com>,
"linux-cifs@vger.kernel.org" <linux-cifs@vger.kernel.org>,
"darrick.wong@oracle.com" <darrick.wong@oracle.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"jlayton@kernel.org" <jlayton@kernel.org>,
"anna.schumaker@netapp.com" <anna.schumaker@netapp.com>,
"llozano@chromium.org" <llozano@chromium.org>,
"linux-nfs@vger.kernel.org" <linux-nfs@vger.kernel.org>,
"miklos@szeredi.hu" <miklos@szeredi.hu>,
"viro@zeniv.linux.org.uk" <viro@zeniv.linux.org.uk>,
"dchinner@redhat.com" <dchinner@redhat.com>,
"linux-fsdevel@vger.kernel.org" <linux-fsdevel@vger.kernel.org>,
"gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>,
"sfrench@samba.org" <sfrench@samba.org>,
James Simmons <jsimmons@infradead.org>,
"ceph-devel@vger.kernel.org" <ceph-devel@vger.kernel.org>
Subject: Re: [PATCH v2] vfs: prevent copy_file_range to copy across devices
Date: Tue, 16 Feb 2021 11:54:07 -0700 [thread overview]
Message-ID: <13583117-59D4-4294-BB23-9D4802E4B8A3@dilger.ca> (raw)
In-Reply-To: <CAOQ4uxgucdN8hi=wkcvnFhBoZ=L5=ZDc7-6SwKVHYaRODdcFkg@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 2844 bytes --]
On Feb 16, 2021, at 6:51 AM, Amir Goldstein <amir73il@gmail.com> wrote:
>>
>>> This is easy to solve with a flag COPY_FILE_SPLICE (or something) that
>>> is internal to kernel users.
>>>
>>> FWIW, you may want to look at the loop in ovl_copy_up_data()
>>> for improvements to nfsd_copy_file_range().
>>>
>>> We can move the check out to copy_file_range syscall:
>>>
>>> if (flags != 0)
>>> return -EINVAL;
>>>
>>> Leave the fallback from all filesystems and check for the
>>> COPY_FILE_SPLICE flag inside generic_copy_file_range().
>>
>> Ok, the diff bellow is just to make sure I understood your suggestion.
>>
>> The patch will also need to:
>>
>> - change nfs and overlayfs calls to vfs_copy_file_range() so that they
>> use the new flag.
>>
>> - check flags in generic_copy_file_checks() to make sure only valid flags
>> are used (COPY_FILE_SPLICE at the moment).
>>
>> Also, where should this flag be defined? include/uapi/linux/fs.h?
>>
>> Cheers,
>> --
>> Luis
>>
>> diff --git a/fs/read_write.c b/fs/read_write.c
>> index 75f764b43418..341d315d2a96 100644
>> --- a/fs/read_write.c
>> +++ b/fs/read_write.c
>> @@ -1383,6 +1383,13 @@ ssize_t generic_copy_file_range(struct file *file_in, loff_t pos_in,
>> struct file *file_out, loff_t pos_out,
>> size_t len, unsigned int flags)
>> {
>> + if (!(flags & COPY_FILE_SPLICE)) {
>> + if (!file_out->f_op->copy_file_range)
>> + return -EOPNOTSUPP;
>> + else if (file_out->f_op->copy_file_range !=
>> + file_in->f_op->copy_file_range)
>> + return -EXDEV;
>> + }
>
> That looks strange, because you are duplicating the logic in
> do_copy_file_range(). Maybe better:
>
> if (WARN_ON_ONCE(flags & ~COPY_FILE_SPLICE))
> return -EINVAL;
> if (flags & COPY_FILE_SPLICE)
> return do_splice_direct(file_in, &pos_in, file_out, &pos_out,
> len > MAX_RW_COUNT ? MAX_RW_COUNT : len, 0);
> if (!file_out->f_op->copy_file_range)
> return -EOPNOTSUPP;
> return -EXDEV;
This shouldn't return -EINVAL to userspace if the flag is not set.
That implies there *is* some valid way for userspace to call this
function, which is AFAICS not possible if COPY_FILE_SPLICE is only
available to in-kernel callers. Instead, it should continue
to return -EOPNOTSUPP to userspace if copy_file_range() is not valid
for this combination of file descriptors, so that applications will
fall back to the non-CFR implementation.
The WARN_ON_ONCE(ret == -EOPNOTSUPP) in vfs_copy_file_range() would
also need to be removed if this will be triggered from userspace.
Cheers, Andreas
[-- Attachment #2: Message signed with OpenPGP --]
[-- Type: application/pgp-signature, Size: 873 bytes --]
next prev parent reply other threads:[~2021-02-16 18:55 UTC|newest]
Thread overview: 136+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-12 4:43 [PATCH 0/6] Add generated flag to filesystem struct to block copy_file_range Nicolas Boichat
2021-02-12 4:44 ` [PATCH 1/6] fs: Add flag to file_system_type to indicate content is generated Nicolas Boichat
2021-02-12 7:46 ` Greg KH
2021-02-12 8:20 ` Nicolas Boichat
2021-02-12 8:37 ` Greg KH
2021-02-12 15:33 ` Ian Lance Taylor
2021-02-12 15:45 ` Greg KH
2021-02-12 15:59 ` Ian Lance Taylor
2021-02-12 16:28 ` Greg KH
2021-02-12 20:22 ` Ian Lance Taylor
2021-02-12 23:03 ` Dave Chinner
2021-02-12 23:07 ` Ian Lance Taylor
2021-02-12 23:27 ` Dave Chinner
2021-02-12 23:54 ` Darrick J. Wong
2021-02-15 0:38 ` Dave Chinner
2021-02-15 1:12 ` Ian Lance Taylor
2021-02-15 1:25 ` Nicolas Boichat
2021-02-15 5:56 ` Amir Goldstein
2021-02-15 8:30 ` Greg KH
2021-02-12 8:22 ` Amir Goldstein
2021-02-12 8:39 ` Greg KH
2021-02-12 12:05 ` Luis Henriques
2021-02-12 12:18 ` Greg KH
2021-02-12 12:41 ` Luis Henriques
2021-02-12 14:11 ` Greg KH
2021-02-12 15:01 ` Luis Henriques
2021-02-15 6:12 ` Amir Goldstein
2021-02-15 10:39 ` Luis Henriques
2021-02-15 12:22 ` Luis Henriques
2021-02-15 14:23 ` Amir Goldstein
2021-02-15 14:51 ` Luis Henriques
2021-02-15 15:43 ` [PATCH v2] vfs: prevent copy_file_range to copy across devices Luis Henriques
2021-02-15 16:02 ` Trond Myklebust
2021-02-16 0:25 ` Steve French
2021-02-15 16:34 ` Amir Goldstein
2021-02-15 16:53 ` Trond Myklebust
2021-02-15 17:24 ` Amir Goldstein
2021-02-15 18:57 ` Trond Myklebust
2021-02-15 19:43 ` Amir Goldstein
2021-02-16 11:17 ` Luis Henriques
2021-02-16 11:28 ` gregkh
2021-02-16 12:01 ` Luis Henriques
2021-02-16 12:08 ` Greg KH
2021-02-16 13:51 ` Amir Goldstein
2021-02-16 16:42 ` Luis Henriques
2021-02-16 17:44 ` Amir Goldstein
2021-02-16 18:55 ` Luis Henriques
2021-02-16 19:20 ` Amir Goldstein
2021-02-16 19:27 ` Anna Schumaker
2021-02-16 19:31 ` Steve French
2021-02-16 19:40 ` Amir Goldstein
2021-02-16 21:15 ` Steve French
2021-02-17 8:08 ` Amir Goldstein
2021-02-17 17:26 ` [PATCH v3] vfs: fix copy_file_range regression in cross-fs copies Luis Henriques
2021-02-17 20:47 ` Amir Goldstein
2021-02-18 0:56 ` Nicolas Boichat
2021-02-18 5:32 ` Olga Kornievskaia
2021-02-18 6:47 ` Amir Goldstein
2021-02-18 16:28 ` Olga Kornievskaia
2021-02-18 7:43 ` Christoph Hellwig
2021-02-18 0:50 ` [PATCH v2] vfs: prevent copy_file_range to copy across devices Andreas Dilger
2021-02-18 7:34 ` gregkh
2021-02-16 18:54 ` Andreas Dilger [this message]
2021-02-17 4:45 ` Nicolas Boichat
2021-02-18 7:42 ` Christoph Hellwig
2021-02-18 9:10 ` Amir Goldstein
2021-02-18 10:29 ` Luis Henriques
2021-02-18 12:15 ` Luis Henriques
2021-02-18 12:49 ` Amir Goldstein
2021-02-18 14:36 ` [PATCH v4] vfs: fix copy_file_range regression in cross-fs copies Luis Henriques
2021-02-18 14:58 ` Amir Goldstein
2021-02-18 15:17 ` [PATCH v5] " Luis Henriques
2021-02-18 15:53 ` Amir Goldstein
2021-02-18 16:35 ` Luis Henriques
2021-02-18 17:18 ` [PATCH v6] " Luis Henriques
2021-02-19 21:18 ` Olga Kornievskaia
2021-02-19 21:52 ` Amir Goldstein
2021-02-21 19:58 ` [PATCH v7] " Luis Henriques
2021-02-22 3:00 ` Nicolas Boichat
2021-02-22 10:24 ` [PATCH v8] " Luis Henriques
2021-02-22 10:46 ` Amir Goldstein
2021-02-22 16:25 ` dai.ngo
2021-02-23 10:32 ` Luis Henriques
2021-02-23 15:28 ` Amir Goldstein
2021-02-23 15:29 ` dai.ngo
2021-02-23 16:02 ` dai.ngo
2021-02-23 16:47 ` Amir Goldstein
2021-02-23 16:57 ` dai.ngo
[not found] ` <e3eed18b-fc7e-e687-608b-7f662017329c@oracle.com>
2021-02-23 17:33 ` Amir Goldstein
2021-02-24 0:13 ` dai.ngo
2021-02-23 17:56 ` Luis Henriques
2021-02-23 17:13 ` Olga Kornievskaia
2021-02-24 1:00 ` Olga Kornievskaia
2021-02-24 10:23 ` Luis Henriques
2021-02-24 10:44 ` Nicolas Boichat
2021-04-09 5:23 ` Nicolas Boichat
2021-04-09 13:39 ` Luis Henriques
2021-04-09 13:50 ` Amir Goldstein
2021-04-23 4:40 ` Nicolas Boichat
2021-05-03 8:54 ` Luis Henriques
2021-05-10 4:59 ` Amir Goldstein
2021-05-10 9:10 ` Luis Henriques
2021-02-24 14:23 ` [PATCH] copy_file_range.2: Kernel v5.12 updates Luis Henriques
2021-02-24 16:10 ` Amir Goldstein
2021-02-25 10:21 ` Luis Henriques
2021-02-26 10:13 ` Alejandro Colomar (man-pages)
2021-02-26 10:34 ` Amir Goldstein
2021-02-26 11:15 ` Alejandro Colomar (man-pages)
2021-02-26 13:59 ` Jeff Layton
2021-02-26 21:26 ` Alejandro Colomar (man-pages)
2021-02-26 22:18 ` Alejandro Colomar (man-pages)
2021-02-27 5:41 ` Amir Goldstein
2021-02-27 12:20 ` Alejandro Colomar (man-pages)
2021-02-27 13:49 ` [RFC v2] copy_file_range.2: Update cross-filesystem support for 5.12 Alejandro Colomar
2021-02-27 16:00 ` Amir Goldstein
2021-02-27 23:08 ` [PATCH] copy_file_range.2: Kernel v5.12 updates Steve French
2021-02-28 7:35 ` Amir Goldstein
2021-02-28 22:25 ` Steve French
2021-03-01 6:18 ` Amir Goldstein
2021-03-01 14:41 ` [RFC v3] copy_file_range.2: Update cross-filesystem support for 5.12 Alejandro Colomar
2021-03-01 14:58 ` Amir Goldstein
2021-03-04 9:38 ` [RFC v4] " Alejandro Colomar
2021-03-04 17:13 ` Darrick J. Wong
2021-03-04 18:24 ` Alejandro Colomar (man-pages)
2021-03-04 23:50 ` Darrick J. Wong
2021-02-24 7:15 ` [PATCH v4] vfs: fix copy_file_range regression in cross-fs copies Amir Goldstein
2021-02-24 8:30 ` Petr Vorel
2021-02-18 20:41 ` [PATCH v2] vfs: prevent copy_file_range to copy across devices Steve French
2021-02-12 23:15 ` [PATCH 1/6] fs: Add flag to file_system_type to indicate content is generated Dave Chinner
2021-02-12 7:54 ` Amir Goldstein
2021-02-12 4:44 ` [PATCH 2/6] proc: Add FS_GENERATED_CONTENT to filesystem flags Nicolas Boichat
2021-02-12 4:44 ` [PATCH 6/6] vfs: Disallow copy_file_range on generated file systems Nicolas Boichat
2021-02-12 4:53 ` Darrick J. Wong
2021-02-12 4:59 ` Darrick J. Wong
2021-02-12 5:24 ` Nicolas Boichat
2021-02-14 23:09 ` [PATCH 0/6] Add generated flag to filesystem struct to block copy_file_range Al Viro
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=13583117-59D4-4294-BB23-9D4802E4B8A3@dilger.ca \
--to=adilger@dilger.ca \
--cc=amir73il@gmail.com \
--cc=anna.schumaker@netapp.com \
--cc=ceph-devel@vger.kernel.org \
--cc=darrick.wong@oracle.com \
--cc=dchinner@redhat.com \
--cc=drinkcat@chromium.org \
--cc=gregkh@linuxfoundation.org \
--cc=iant@google.com \
--cc=jlayton@kernel.org \
--cc=jsimmons@infradead.org \
--cc=lhenriques@suse.de \
--cc=linux-cifs@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=llozano@chromium.org \
--cc=miklos@szeredi.hu \
--cc=samba-technical@lists.samba.org \
--cc=sfrench@samba.org \
--cc=trondmy@hammerspace.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).