diff options
| -rw-r--r-- | fs/overlayfs/dir.c | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c index b4498b95234c..eedacae889b9 100644 --- a/fs/overlayfs/dir.c +++ b/fs/overlayfs/dir.c @@ -407,7 +407,7 @@ static int ovl_create_or_link(struct dentry *dentry, int mode, dev_t rdev, if (!ovl_dentry_is_opaque(dentry)) { err = ovl_create_upper(dentry, inode, &stat, link, hardlink); } else { - const struct cred *old_cred, *hold_cred = NULL; + const struct cred *old_cred; struct cred *override_cred; old_cred = ovl_override_creds(dentry->d_sb); @@ -415,22 +415,15 @@ static int ovl_create_or_link(struct dentry *dentry, int mode, dev_t rdev, err = -ENOMEM; override_cred = prepare_creds(); if (override_cred) { - const struct cred *our_cred; - - our_cred = old_cred; - if (!our_cred) - our_cred = current_cred(); - override_cred->fsuid = our_cred->fsuid; - override_cred->fsgid = our_cred->fsgid; - hold_cred = override_creds(override_cred); + override_cred->fsuid = old_cred->fsuid; + override_cred->fsgid = old_cred->fsgid; + put_cred(override_creds(override_cred)); put_cred(override_cred); err = ovl_create_over_whiteout(dentry, inode, &stat, link, hardlink); } - ovl_revert_creds(old_cred ?: hold_cred); - if (old_cred && hold_cred) - put_cred(hold_cred); + revert_creds(old_cred); } if (!err) |
