X-Git-Url: http://git.cascardo.info/?p=cascardo%2Flinux.git;a=blobdiff_plain;f=fs%2Foverlayfs%2Fdir.c;h=3a60e68ec9658f773064770ac12b2451ba4fe203;hp=463a18477a101f9c2456881306245172870a36e1;hb=97d2116708ca0fd6ad8b00811ee4349b7e19e96f;hpb=fd50ecaddf8372a1d96e0daeaac0f93cf04e4d42 diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c index 463a18477a10..3a60e68ec965 100644 --- a/fs/overlayfs/dir.c +++ b/fs/overlayfs/dir.c @@ -489,6 +489,15 @@ static int ovl_create_or_link(struct dentry *dentry, struct inode *inode, if (override_cred) { override_cred->fsuid = inode->i_uid; override_cred->fsgid = inode->i_gid; + if (!hardlink) { + err = security_dentry_create_files_as(dentry, + stat->mode, &dentry->d_name, old_cred, + override_cred); + if (err) { + put_cred(override_cred); + goto out_revert_creds; + } + } put_cred(override_creds(override_cred)); put_cred(override_cred); @@ -499,6 +508,7 @@ static int ovl_create_or_link(struct dentry *dentry, struct inode *inode, err = ovl_create_over_whiteout(dentry, inode, stat, link, hardlink); } +out_revert_creds: revert_creds(old_cred); if (!err) { struct inode *realinode = d_inode(ovl_dentry_upper(dentry));