lkml.org 
[lkml]   [2018]   [Oct]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.18 150/168] sysfs: Do not return POSIX ACL xattrs via listxattr
    Date
    4.18-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Andreas Gruenbacher <agruenba@redhat.com>

    commit ffc4c92227db5699493e43eb140b4cb5904c30ff upstream.

    Commit 786534b92f3c introduced a regression that caused listxattr to
    return the POSIX ACL attribute names even though sysfs doesn't support
    POSIX ACLs. This happens because simple_xattr_list checks for NULL
    i_acl / i_default_acl, but inode_init_always initializes those fields
    to ACL_NOT_CACHED ((void *)-1). For example:
    $ getfattr -m- -d /sys
    /sys: system.posix_acl_access: Operation not supported
    /sys: system.posix_acl_default: Operation not supported
    Fix this in simple_xattr_list by checking if the filesystem supports POSIX ACLs.

    Fixes: 786534b92f3c ("tmpfs: listxattr should include POSIX ACL xattrs")
    Reported-by: Marc Aurèle La France <tsi@tuyoix.net>
    Tested-by: Marc Aurèle La France <tsi@tuyoix.net>
    Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
    Cc: stable@vger.kernel.org # v4.5+
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/xattr.c | 24 +++++++++++++-----------
    1 file changed, 13 insertions(+), 11 deletions(-)

    --- a/fs/xattr.c
    +++ b/fs/xattr.c
    @@ -949,17 +949,19 @@ ssize_t simple_xattr_list(struct inode *
    int err = 0;

    #ifdef CONFIG_FS_POSIX_ACL
    - if (inode->i_acl) {
    - err = xattr_list_one(&buffer, &remaining_size,
    - XATTR_NAME_POSIX_ACL_ACCESS);
    - if (err)
    - return err;
    - }
    - if (inode->i_default_acl) {
    - err = xattr_list_one(&buffer, &remaining_size,
    - XATTR_NAME_POSIX_ACL_DEFAULT);
    - if (err)
    - return err;
    + if (IS_POSIXACL(inode)) {
    + if (inode->i_acl) {
    + err = xattr_list_one(&buffer, &remaining_size,
    + XATTR_NAME_POSIX_ACL_ACCESS);
    + if (err)
    + return err;
    + }
    + if (inode->i_default_acl) {
    + err = xattr_list_one(&buffer, &remaining_size,
    + XATTR_NAME_POSIX_ACL_DEFAULT);
    + if (err)
    + return err;
    + }
    }
    #endif


    \
     
     \ /
      Last update: 2018-10-08 20:56    [W:3.197 / U:1.856 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site