Thread (4 messages) 4 messages, 2 authors, 2016-06-15

Re: [PATCH] ovl: fix uid/gid when creating over whiteout

From: Vivek Goyal <vgoyal@redhat.com>
Date: 2016-06-15 14:21:06
Also in: linux-fsdevel, lkml

On Wed, Jun 15, 2016 at 04:09:47PM +0200, Miklos Szeredi wrote:
On Wed, Jun 15, 2016 at 4:01 PM, Vivek Goyal [off-list ref] wrote:
quoted
On Wed, Jun 15, 2016 at 03:30:02PM +0200, Miklos Szeredi wrote:
quoted
quoted
--- a/fs/overlayfs/dir.c
+++ b/fs/overlayfs/dir.c
@@ -405,12 +405,21 @@ static int ovl_create_or_link(struct den
              err = ovl_create_upper(dentry, inode, &stat, link, hardlink);
      } else {
              const struct cred *old_cred;
+             struct cred *override_cred;

              old_cred = ovl_override_creds(dentry->d_sb);

-             err = ovl_create_over_whiteout(dentry, inode, &stat, link,
-                                            hardlink);
+             err = -ENOMEM;
+             override_cred = prepare_creds();
+             if (override_cred) {
+                     override_cred->fsuid = old_cred->fsuid;
+                     override_cred->fsgid = old_cred->fsgid;
Hi Miklos,

I am wondering if we are switching to tasks's ->fsuid and ->fsgid too
early. ovl_create_over_whiteout() calls ovl_lookup_temp(workdir) and
IIUC, task might not have permission to do lookup in workdir.

Should we switch to this override_cred, just before ovl_create_real()
so that task ->fsuid and ->fsgid are used only for creation purposes
only.
For lookup in workdir only CAP_DAC_OVERRIDE should matter, the actual
value of the fsuid and fsgid should be irrelevant (user, group and
others all have zero permission on workdir).
Ok. Agreed that CAP_DAC_OVERRIDE should do.

Thanks
Vivek
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help