X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=fs%2Fxattr.c;h=c243905835abd25b52eb8daf061b5f11b3a5708e;hb=3fbff9c874072a085c08af706beb88e7797d78b4;hp=4beafc43daa58bff015f0839c78b5a65f8b8d2ab;hpb=89a82a9218fabd753979847f494565f1fa91d7a8;p=deliverable%2Flinux.git diff --git a/fs/xattr.c b/fs/xattr.c index 4beafc43daa5..c243905835ab 100644 --- a/fs/xattr.c +++ b/fs/xattr.c @@ -38,6 +38,13 @@ xattr_permission(struct inode *inode, const char *name, int mask) if (mask & MAY_WRITE) { if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) return -EPERM; + /* + * Updating an xattr will likely cause i_uid and i_gid + * to be writen back improperly if their true value is + * unknown to the vfs. + */ + if (HAS_UNMAPPED_ID(inode)) + return -EPERM; } /*