Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 40673
b: refs/heads/master
c: f1f2d87
h: refs/heads/master
i:
  40671: c4badc0
v: v3
  • Loading branch information
Andreas Gruenbacher authored and Linus Torvalds committed Nov 3, 2006
1 parent ca8c2fd commit c13e911
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 4 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 8ce08464d2c749610a52c4d6c7c11080a7eaaef1
refs/heads/master: f1f2d8713d16a1e198880bbc716eb24fae09c858
13 changes: 10 additions & 3 deletions trunk/fs/xattr.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,14 +48,21 @@ xattr_permission(struct inode *inode, const char *name, int mask)
return 0;

/*
* The trusted.* namespace can only accessed by a privilegued user.
* The trusted.* namespace can only be accessed by a privileged user.
*/
if (!strncmp(name, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN))
return (capable(CAP_SYS_ADMIN) ? 0 : -EPERM);

/* In user.* namespace, only regular files and directories can have
* extended attributes. For sticky directories, only the owner and
* privileged user can write attributes.
*/
if (!strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN)) {
if (!S_ISREG(inode->i_mode) &&
(!S_ISDIR(inode->i_mode) || inode->i_mode & S_ISVTX))
if (!S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode))
return -EPERM;
if (S_ISDIR(inode->i_mode) && (inode->i_mode & S_ISVTX) &&
(mask & MAY_WRITE) && (current->fsuid != inode->i_uid) &&
!capable(CAP_FOWNER))
return -EPERM;
}

Expand Down

0 comments on commit c13e911

Please sign in to comment.