| From 7b279bbfd2b230c7a210ff8f405799c7e46bbf48 Mon Sep 17 00:00:00 2001 |
| From: Dan Carpenter <dan.carpenter@oracle.com> |
| Date: Tue, 23 Mar 2021 16:19:35 +0300 |
| Subject: ovl: fix missing revert_creds() on error path |
| |
| From: Dan Carpenter <dan.carpenter@oracle.com> |
| |
| commit 7b279bbfd2b230c7a210ff8f405799c7e46bbf48 upstream. |
| |
| Smatch complains about missing that the ovl_override_creds() doesn't |
| have a matching revert_creds() if the dentry is disconnected. Fix this |
| by moving the ovl_override_creds() until after the disconnected check. |
| |
| Fixes: aa3ff3c152ff ("ovl: copy up of disconnected dentries") |
| Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> |
| Signed-off-by: Miklos Szeredi <mszeredi@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| fs/overlayfs/copy_up.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/fs/overlayfs/copy_up.c |
| +++ b/fs/overlayfs/copy_up.c |
| @@ -932,7 +932,7 @@ static int ovl_copy_up_one(struct dentry |
| static int ovl_copy_up_flags(struct dentry *dentry, int flags) |
| { |
| int err = 0; |
| - const struct cred *old_cred = ovl_override_creds(dentry->d_sb); |
| + const struct cred *old_cred; |
| bool disconnected = (dentry->d_flags & DCACHE_DISCONNECTED); |
| |
| /* |
| @@ -943,6 +943,7 @@ static int ovl_copy_up_flags(struct dent |
| if (WARN_ON(disconnected && d_is_dir(dentry))) |
| return -EIO; |
| |
| + old_cred = ovl_override_creds(dentry->d_sb); |
| while (!err) { |
| struct dentry *next; |
| struct dentry *parent = NULL; |