lkml.org 
[lkml]   [2018]   [Apr]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 152/310] ovl: filter trusted xattr for non-admin
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

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

    From: Miklos Szeredi <mszeredi@redhat.com>


    [ Upstream commit a082c6f680da298cf075886ff032f32ccb7c5e1a ]

    Filesystems filter out extended attributes in the "trusted." domain for
    unprivlieged callers.

    Overlay calls underlying filesystem's method with elevated privs, so need
    to do the filtering in overlayfs too.

    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    fs/overlayfs/inode.c | 12 +++++++++++-
    1 file changed, 11 insertions(+), 1 deletion(-)

    --- a/fs/overlayfs/inode.c
    +++ b/fs/overlayfs/inode.c
    @@ -227,6 +227,16 @@ int ovl_xattr_get(struct dentry *dentry,
    return res;
    }

    +static bool ovl_can_list(const char *s)
    +{
    + /* List all non-trusted xatts */
    + if (strncmp(s, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN) != 0)
    + return true;
    +
    + /* Never list trusted.overlay, list other trusted for superuser only */
    + return !ovl_is_private_xattr(s) && capable(CAP_SYS_ADMIN);
    +}
    +
    ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size)
    {
    struct dentry *realdentry = ovl_dentry_real(dentry);
    @@ -250,7 +260,7 @@ ssize_t ovl_listxattr(struct dentry *den
    return -EIO;

    len -= slen;
    - if (ovl_is_private_xattr(s)) {
    + if (!ovl_can_list(s)) {
    res -= slen;
    memmove(s, s + slen, len);
    } else {

    \
     
     \ /
      Last update: 2018-04-11 21:48    [W:2.347 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site