| From d88c93f090f708c18195553b352b9f205e65418f Mon Sep 17 00:00:00 2001 |
| From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Date: Wed, 23 Jan 2019 11:27:02 +0100 |
| Subject: debugfs: fix debugfs_rename parameter checking |
| |
| From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| commit d88c93f090f708c18195553b352b9f205e65418f upstream. |
| |
| debugfs_rename() needs to check that the dentries passed into it really |
| are valid, as sometimes they are not (i.e. if the return value of |
| another debugfs call is passed into this one.) So fix this up by |
| properly checking if the two parent directories are errors (they are |
| allowed to be NULL), and if the dentry to rename is not NULL or an |
| error. |
| |
| Cc: stable <stable@vger.kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/debugfs/inode.c | 7 +++++++ |
| 1 file changed, 7 insertions(+) |
| |
| --- a/fs/debugfs/inode.c |
| +++ b/fs/debugfs/inode.c |
| @@ -732,6 +732,13 @@ struct dentry *debugfs_rename(struct den |
| struct dentry *dentry = NULL, *trap; |
| struct name_snapshot old_name; |
| |
| + if (IS_ERR(old_dir)) |
| + return old_dir; |
| + if (IS_ERR(new_dir)) |
| + return new_dir; |
| + if (IS_ERR_OR_NULL(old_dentry)) |
| + return old_dentry; |
| + |
| trap = lock_rename(new_dir, old_dir); |
| /* Source or destination directories don't exist? */ |
| if (d_really_is_negative(old_dir) || d_really_is_negative(new_dir)) |