btrfs: restrict snapshotting to own subvolumes
[firefly-linux-kernel-4.4.55.git] / fs / btrfs / ioctl.c
index 145b2c75ab830216144eb485788ed1b7d67e20b5..783906c687b55de0053adf46754d2630e8dd9e83 100644 (file)
@@ -1528,6 +1528,12 @@ static noinline int btrfs_ioctl_snap_create_transid(struct file *file,
                        printk(KERN_INFO "btrfs: Snapshot src from "
                               "another FS\n");
                        ret = -EINVAL;
+               } else if (!inode_owner_or_capable(src_inode)) {
+                       /*
+                        * Subvolume creation is not restricted, but snapshots
+                        * are limited to own subvolumes only
+                        */
+                       ret = -EPERM;
                } else {
                        ret = btrfs_mksubvol(&file->f_path, name, namelen,
                                             BTRFS_I(src_inode)->root,