From: Vivek Goyal <vgoyal@redhat.com>
To: Amir Goldstein <amir73il@gmail.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>,
linux-unionfs@vger.kernel.org,
linux-fsdevel <linux-fsdevel@vger.kernel.org>,
Miklos Szeredi <miklos@szeredi.hu>
Subject: Re: [PATCH v3 4/6] ovl: copy up regular file using O_TMPFILE
Date: Wed, 5 Apr 2017 15:36:01 -0400 [thread overview]
Message-ID: <20170405193601.GA4475@redhat.com> (raw)
In-Reply-To: <CAOQ4uxiLgcpvz4hcFJdcYETokbQ=88nS4fA3_F4k8faCR=ia_g@mail.gmail.com>
On Wed, Apr 05, 2017 at 09:32:36PM +0300, Amir Goldstein wrote:
> On Mon, Jan 16, 2017 at 7:46 PM, Amir Goldstein <amir73il@gmail.com> wrote:
> > In preparation for concurrent copy up, implement copy up
> > of regular file as O_TMPFILE that is linked to upperdir
> > instead of a file in workdir that is moved to upperdir.
> >
>
> Hi Vivek,
>
> This commit is already in v4.11-rc1 and I haven't heard any complains.
> But I wanted to ask all the same.
>
> With this commit the semantics of security checks are modified a bit.
>
> Before this change it was:
> - Create temp file in workdir and negative dentry in upperdir with
> security_inode_copy_up() creds
> - Move temp file to upperdir with mounter creds
>
> After this change it is:
> - Create an O_TMPFILE and negative dentry in upperdir with
> security_inode_copy_up() creds
> - Link O_TMPFILE to upperdir with mounter creds
>
> Is this equivalent as far as SELinux goes?
> Does it mean that users may have to fix their sepolicy in some way?
Hi Amir,
I think this change is fine. security_inode_copy_up() returns new creds
using which new file should be created during copy up. And using tmpfile
does not seem to change it. We still switch to creds retruned by
security_inode_copy_up() and then tmpfile is created.
>
> Were you able to verify that there are no overlay+selinux regression
> with v4.11-rc1? I just don't have selinux in my test setup...
I ran selinux-testsuite overlay test cases and they all passed. So I can't
think of any regression yet.
https://github.com/SELinuxProject/selinux-testsuite
Thanks
Vivek
>
> Thanks,
> Amir.
>
> > Suggested-by: Al Viro <viro@zeniv.linux.org.uk>
> > Signed-off-by: Amir Goldstein <amir73il@gmail.com>
> > ---
> > fs/overlayfs/copy_up.c | 27 ++++++++++++++++++++-------
> > 1 file changed, 20 insertions(+), 7 deletions(-)
> >
> > diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c
> > index 01e3327..6e39e90 100644
> > --- a/fs/overlayfs/copy_up.c
> > +++ b/fs/overlayfs/copy_up.c
> > @@ -20,6 +20,7 @@
> > #include <linux/fdtable.h>
> > #include <linux/ratelimit.h>
> > #include "overlayfs.h"
> > +#include "ovl_entry.h"
> >
> > #define OVL_COPY_UP_CHUNK_SIZE (1 << 20)
> >
> > @@ -233,7 +234,7 @@ int ovl_set_attr(struct dentry *upperdentry, struct kstat *stat)
> > static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir,
> > struct dentry *dentry, struct path *lowerpath,
> > struct kstat *stat, const char *link,
> > - struct kstat *pstat)
> > + struct kstat *pstat, bool tmpfile)
> > {
> > struct inode *wdir = workdir->d_inode;
> > struct inode *udir = upperdir->d_inode;
> > @@ -263,12 +264,17 @@ static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir,
> > if (new_creds)
> > old_creds = override_creds(new_creds);
> >
> > - temp = ovl_lookup_temp(workdir, dentry);
> > + if (tmpfile)
> > + temp = ovl_do_tmpfile(upperdir, stat->mode);
> > + else
> > + temp = ovl_lookup_temp(workdir, dentry);
> > err = PTR_ERR(temp);
> > if (IS_ERR(temp))
> > goto out1;
> >
> > - err = ovl_create_real(wdir, temp, &cattr, NULL, true);
> > + err = 0;
> > + if (!tmpfile)
> > + err = ovl_create_real(wdir, temp, &cattr, NULL, true);
> >
> > if (new_creds) {
> > revert_creds(old_creds);
> > @@ -300,11 +306,14 @@ static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir,
> > if (err)
> > goto out_cleanup;
> >
> > - err = ovl_do_rename(wdir, temp, udir, upper, 0);
> > + if (tmpfile)
> > + err = ovl_do_link(temp, udir, upper, true);
> > + else
> > + err = ovl_do_rename(wdir, temp, udir, upper, 0);
> > if (err)
> > goto out_cleanup;
> >
> > - newdentry = dget(temp);
> > + newdentry = dget(tmpfile ? upper : temp);
> > ovl_dentry_update(dentry, newdentry);
> > ovl_inode_update(d_inode(dentry), d_inode(newdentry));
> >
> > @@ -318,7 +327,8 @@ static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir,
> > return err;
> >
> > out_cleanup:
> > - ovl_cleanup(wdir, temp);
> > + if (!tmpfile)
> > + ovl_cleanup(wdir, temp);
> > goto out2;
> > }
> >
> > @@ -342,6 +352,9 @@ static int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry,
> > struct dentry *lowerdentry = lowerpath->dentry;
> > struct dentry *upperdir;
> > const char *link = NULL;
> > + struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
> > + /* Should we copyup with O_TMPFILE or with workdir? */
> > + bool tmpfile = S_ISREG(stat->mode) && ofs->tmpfile;
> >
> > if (WARN_ON(!workdir))
> > return -EROFS;
> > @@ -373,7 +386,7 @@ static int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry,
> > }
> >
> > err = ovl_copy_up_locked(workdir, upperdir, dentry, lowerpath,
> > - stat, link, &pstat);
> > + stat, link, &pstat, tmpfile);
> > out_unlock:
> > unlock_rename(workdir, upperdir);
> > do_delayed_call(&done);
> > --
> > 2.7.4
> >
> --
> To unsubscribe from this list: send the line "unsubscribe linux-unionfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2017-04-05 19:36 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-16 17:45 [PATCH v3 0/6] ovl: concurrent copy up Amir Goldstein
2017-01-16 17:46 ` [PATCH v3 1/6] vfs: create vfs helper vfs_tmpfile() Amir Goldstein
2017-01-16 19:47 ` Miklos Szeredi
2017-02-19 3:27 ` Al Viro
2017-03-09 11:13 ` Miklos Szeredi
2017-03-09 17:31 ` Eric W. Biederman
2017-03-09 17:31 ` Eric W. Biederman
2017-01-16 17:46 ` [PATCH v3 2/6] ovl: check if upperdir fs supports O_TMPFILE Amir Goldstein
2017-01-16 17:46 ` [PATCH v3 3/6] ovl: rearrange code in ovl_copy_up_locked() Amir Goldstein
2017-01-16 17:46 ` [PATCH v3 4/6] ovl: copy up regular file using O_TMPFILE Amir Goldstein
2017-04-05 18:32 ` Amir Goldstein
2017-04-05 19:36 ` Vivek Goyal [this message]
2017-01-16 17:46 ` [PATCH v3 5/6] ovl: introduce copy up waitqueue Amir Goldstein
2017-01-16 17:46 ` [PATCH v3 6/6] ovl: concurrent copy up of regular files 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=20170405193601.GA4475@redhat.com \
--to=vgoyal@redhat.com \
--cc=amir73il@gmail.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-unionfs@vger.kernel.org \
--cc=miklos@szeredi.hu \
--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.