Skip to content

Commit a8892fd

Browse files
josefbacikkdave
authored andcommitted
btrfs: do not allow non subvolume root targets for snapshot
Our btrfs subvolume snapshot <source> <destination> utility enforces that <source> is the root of the subvolume, however this isn't enforced in the kernel. Update the kernel to also enforce this limitation to avoid problems with other users of this ioctl that don't have the appropriate checks in place. Reported-by: Martin Michaelis <code@mgjm.de> CC: stable@vger.kernel.org # 4.14+ Reviewed-by: Neal Gompa <neal@gompa.dev> Signed-off-by: Josef Bacik <josef@toxicpanda.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
1 parent e85a0ad commit a8892fd

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

fs/btrfs/ioctl.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1290,6 +1290,15 @@ static noinline int __btrfs_ioctl_snap_create(struct file *file,
12901290
* are limited to own subvolumes only
12911291
*/
12921292
ret = -EPERM;
1293+
} else if (btrfs_ino(BTRFS_I(src_inode)) != BTRFS_FIRST_FREE_OBJECTID) {
1294+
/*
1295+
* Snapshots must be made with the src_inode referring
1296+
* to the subvolume inode, otherwise the permission
1297+
* checking above is useless because we may have
1298+
* permission on a lower directory but not the subvol
1299+
* itself.
1300+
*/
1301+
ret = -EINVAL;
12931302
} else {
12941303
ret = btrfs_mksnapshot(&file->f_path, idmap,
12951304
name, namelen,

0 commit comments

Comments
 (0)