diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-17 14:43:43 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-17 14:43:43 -0800 | 
| commit | eee2a817df7c5a6e569f353f8be78cc1b3604bb6 (patch) | |
| tree | f721beb4712c732702d3383d3c6a52da8b5bbb20 /fs/btrfs/xattr.c | |
| parent | 83896fb5e51594281720d145164f866ba769abd5 (diff) | |
| parent | acce952b0263825da32cf10489413dec78053347 (diff) | |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable: (25 commits)
  Btrfs: forced readonly mounts on errors
  btrfs: Require CAP_SYS_ADMIN for filesystem rebalance
  Btrfs: don't warn if we get ENOSPC in btrfs_block_rsv_check
  btrfs: Fix memory leak in btrfs_read_fs_root_no_radix()
  btrfs: check NULL or not
  btrfs: Don't pass NULL ptr to func that may deref it.
  btrfs: mount failure return value fix
  btrfs: Mem leak in btrfs_get_acl()
  btrfs: fix wrong free space information of btrfs
  btrfs: make the chunk allocator utilize the devices better
  btrfs: restructure find_free_dev_extent()
  btrfs: fix wrong calculation of stripe size
  btrfs: try to reclaim some space when chunk allocation fails
  btrfs: fix wrong data space statistics
  fs/btrfs: Fix build of ctree
  Btrfs: fix off by one while setting block groups readonly
  Btrfs: Add BTRFS_IOC_SUBVOL_GETFLAGS/SETFLAGS ioctls
  Btrfs: Add readonly snapshots support
  Btrfs: Refactor btrfs_ioctl_snap_create()
  btrfs: Extract duplicate decompress code
  ...
Diffstat (limited to 'fs/btrfs/xattr.c')
| -rw-r--r-- | fs/btrfs/xattr.c | 18 | 
1 files changed, 18 insertions, 0 deletions
| diff --git a/fs/btrfs/xattr.c b/fs/btrfs/xattr.c index 698fdd2c739..a5776531dc2 100644 --- a/fs/btrfs/xattr.c +++ b/fs/btrfs/xattr.c @@ -316,6 +316,15 @@ ssize_t btrfs_getxattr(struct dentry *dentry, const char *name,  int btrfs_setxattr(struct dentry *dentry, const char *name, const void *value,  		   size_t size, int flags)  { +	struct btrfs_root *root = BTRFS_I(dentry->d_inode)->root; + +	/* +	 * The permission on security.* and system.* is not checked +	 * in permission(). +	 */ +	if (btrfs_root_readonly(root)) +		return -EROFS; +  	/*  	 * If this is a request for a synthetic attribute in the system.*  	 * namespace use the generic infrastructure to resolve a handler @@ -336,6 +345,15 @@ int btrfs_setxattr(struct dentry *dentry, const char *name, const void *value,  int btrfs_removexattr(struct dentry *dentry, const char *name)  { +	struct btrfs_root *root = BTRFS_I(dentry->d_inode)->root; + +	/* +	 * The permission on security.* and system.* is not checked +	 * in permission(). +	 */ +	if (btrfs_root_readonly(root)) +		return -EROFS; +  	/*  	 * If this is a request for a synthetic attribute in the system.*  	 * namespace use the generic infrastructure to resolve a handler | 
