summaryrefslogtreecommitdiff
path: root/fs/overlayfs/dir.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/overlayfs/dir.c')
-rw-r--r--fs/overlayfs/dir.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c
index 9c2e8538f1ab..0f8b4a719237 100644
--- a/fs/overlayfs/dir.c
+++ b/fs/overlayfs/dir.c
@@ -555,7 +555,7 @@ static int ovl_create_or_link(struct dentry *dentry, struct inode *inode,
struct ovl_cattr *attr, bool origin)
{
int err;
- const struct cred *old_cred, *hold_cred = NULL;
+ const struct cred *old_cred;
struct cred *override_cred;
struct dentry *parent = dentry->d_parent;
@@ -592,14 +592,13 @@ static int ovl_create_or_link(struct dentry *dentry, struct inode *inode,
override_cred->fsuid = inode->i_uid;
override_cred->fsgid = inode->i_gid;
err = security_dentry_create_files_as(dentry,
- attr->mode, &dentry->d_name,
- old_cred ? old_cred : current_cred(),
+ attr->mode, &dentry->d_name, old_cred,
override_cred);
if (err) {
put_cred(override_cred);
goto out_revert_creds;
}
- hold_cred = override_creds(override_cred);
+ put_cred(override_creds(override_cred));
put_cred(override_cred);
}
@@ -609,9 +608,7 @@ static int ovl_create_or_link(struct dentry *dentry, struct inode *inode,
err = ovl_create_over_whiteout(dentry, inode, attr);
out_revert_creds:
- ovl_revert_creds(dentry->d_sb, old_cred ?: hold_cred);
- if (old_cred && hold_cred)
- put_cred(hold_cred);
+ revert_creds(old_cred);
return err;
}
@@ -692,7 +689,7 @@ static int ovl_set_link_redirect(struct dentry *dentry)
old_cred = ovl_override_creds(dentry->d_sb);
err = ovl_set_redirect(dentry, false);
- ovl_revert_creds(dentry->d_sb, old_cred);
+ revert_creds(old_cred);
return err;
}
@@ -902,7 +899,7 @@ static int ovl_do_remove(struct dentry *dentry, bool is_dir)
err = ovl_remove_upper(dentry, is_dir, &list);
else
err = ovl_remove_and_whiteout(dentry, &list);
- ovl_revert_creds(dentry->d_sb, old_cred);
+ revert_creds(old_cred);
if (!err) {
if (is_dir)
clear_nlink(dentry->d_inode);
@@ -1282,7 +1279,7 @@ out_dput_old:
out_unlock:
unlock_rename(new_upperdir, old_upperdir);
out_revert_creds:
- ovl_revert_creds(old->d_sb, old_cred);
+ revert_creds(old_cred);
if (update_nlink)
ovl_nlink_end(new);
else