• B
    xfs: invalidate cached acl if set directly via xattr · 67d8e04e
    Brian Foster 提交于
    ACLs are stored as extended attributes of the inode to which they apply.
    XFS converts the standard "system.posix_acl_[access|default]" attribute
    names used to control ACLs to "trusted.SGI_ACL_[FILE|DEFAULT]" as stored
    on-disk. These xattrs are directly exposed in on-disk format via
    getxattr/setxattr, without any ACL aware code in the path to perform
    validation, etc. This is partly historical and supports backup/restore
    applications such as xfsdump to back up and restore the binary blob that
    represents ACLs as-is.
    
    Andreas reports that the ACLs observed via the getfacl interface is not
    consistent when ACLs are set directly via the setxattr path. This occurs
    because the ACLs are cached in-core against the inode and the xattr path
    has no knowledge that the operation relates to ACLs.
    
    Update the xattr set codepath to trap writes of the special XFS ACL
    attributes and invalidate the associated cached ACL when this occurs.
    This ensures that the correct ACLs are used on a subsequent operation
    through the actual ACL interface.
    
    Note that this does not update or add support for setting the ACL xattrs
    directly beyond the restore use case that requires a correctly formatted
    binary blob and to restore a consistent i_mode at the same time. It is
    still possible for a root user to set an invalid or inconsistent (with
    i_mode) ACL blob on-disk and potentially cause corruption.
    
    [ With fixes from Andreas Gruenbacher. ]
    Reported-by: NAndreas Gruenbacher <agruenba@redhat.com>
    Signed-off-by: NBrian Foster <bfoster@redhat.com>
    Reviewed-by: NDave Chinner <dchinner@redhat.com>
    Signed-off-by: NDave Chinner <david@fromorbit.com>
    67d8e04e
xfs_xattr.c 6.2 KB