diff options
-rw-r--r-- | fs/overlayfs/dir.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c index 22f0253a3567..c2a6b0894022 100644 --- a/fs/overlayfs/dir.c +++ b/fs/overlayfs/dir.c | |||
@@ -405,12 +405,21 @@ static int ovl_create_or_link(struct dentry *dentry, int mode, dev_t rdev, | |||
405 | err = ovl_create_upper(dentry, inode, &stat, link, hardlink); | 405 | err = ovl_create_upper(dentry, inode, &stat, link, hardlink); |
406 | } else { | 406 | } else { |
407 | const struct cred *old_cred; | 407 | const struct cred *old_cred; |
408 | struct cred *override_cred; | ||
408 | 409 | ||
409 | old_cred = ovl_override_creds(dentry->d_sb); | 410 | old_cred = ovl_override_creds(dentry->d_sb); |
410 | 411 | ||
411 | err = ovl_create_over_whiteout(dentry, inode, &stat, link, | 412 | err = -ENOMEM; |
412 | hardlink); | 413 | override_cred = prepare_creds(); |
414 | if (override_cred) { | ||
415 | override_cred->fsuid = old_cred->fsuid; | ||
416 | override_cred->fsgid = old_cred->fsgid; | ||
417 | put_cred(override_creds(override_cred)); | ||
418 | put_cred(override_cred); | ||
413 | 419 | ||
420 | err = ovl_create_over_whiteout(dentry, inode, &stat, | ||
421 | link, hardlink); | ||
422 | } | ||
414 | revert_creds(old_cred); | 423 | revert_creds(old_cred); |
415 | } | 424 | } |
416 | 425 | ||