[PATCH 21/44] btrfs: hold a ref on the root in btrfs_ioctl_get_subvol_info

Josef Bacik
2019-12-06T14:46:21Z

We look up whatever root userspace has given us, we need to hold a ref
throughout this operation.

Signed-off-by: Josef Bacik <josef@toxicpanda.com>
---
fs/btrfs/ioctl.c | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index 2eb5a5dc07bd..2797a1249f25 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -2683,6 +2683,10 @@ static int btrfs_ioctl_get_subvol_info(struct file *file, void __user *argp)
root = btrfs_get_fs_root(fs_info, &key, true);
if (IS_ERR(root)) {
ret = PTR_ERR(root);
+ goto out_free;
+ }
+ if (!btrfs_grab_fs_root(root)) {
+ ret = -ENOENT;
goto out;
}
root_item = &root->root_item;
@@ -2760,6 +2764,8 @@ static int btrfs_ioctl_get_subvol_info(struct file *file, void __user *argp)
ret = -EFAULT;

out:
+ btrfs_put_fs_root(root);
+out_free:
btrfs_free_path(path);
kzfree(subvol_info);
return ret;
--
2.23.0