summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorTARUISI Hiroaki <taruishi.hiroak@jp.fujitsu.com>2009-11-12 07:14:26 +0000
committerGreg Kroah-Hartman <gregkh@suse.de>2010-08-13 13:19:59 -0700
commit8db426bbfeef206a8cd6002d6790f936f3071f0c (patch)
treec7f5db164861752e6f993d0c1ec2c800e11e10cf /fs
parentf09a3eb5f7c42159bfa53a03779741487b5336a7 (diff)
Btrfs: deny sys_link across subvolumes.
commit 4a8be425a8fb8fbb5d881eb55fa6634c3463b9c9 upstream. I rebased Christian Parpart's patch to deny hard link across subvolumes. Original patch modifies also btrfs_rename, but I excluded it because we can move across subvolumes now and it make no problem. ----------------- Hard link across subvolumes should not allowed in Btrfs. btrfs_link checks root of 'to' directory is same as root of 'from' file. If not same, btrfs_link returns -EPERM. Signed-off-by: TARUISI Hiroaki <taruishi.hiroak@jp.fujitsu.com> Signed-off-by: Chris Mason <chris.mason@oracle.com> Acked-by: Jeff Mahoney <jeffm@suse.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'fs')
-rw-r--r--fs/btrfs/inode.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 168e8c040aab..da76cad92ecf 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -4462,6 +4462,10 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
if (inode->i_nlink == 0)
return -ENOENT;
+ /* do not allow sys_link's with other subvols of the same device */
+ if (root->objectid != BTRFS_I(inode)->root->objectid)
+ return -EPERM;
+
/*
* 1 item for inode ref
* 2 items for dir items