• Vivek Goyal's avatar
    fuse: send security context of inode on file · 3e2b6fdb
    Vivek Goyal authored
    When a new inode is created, send its security context to server along with
    creation request (FUSE_CREAT, FUSE_MKNOD, FUSE_MKDIR and FUSE_SYMLINK).
    This gives server an opportunity to create new file and set security
    context (possibly atomically).  In all the configurations it might not be
    possible to set context atomically.
    
    Like nfs and ceph, use security_dentry_init_security() to dermine security
    context of inode and send it with create, mkdir, mknod, and symlink
    requests.
    
    Following is the information sent to server.
    
    fuse_sectx_header, fuse_secctx, xattr_name, security_context
    
     - struct fuse_secctx_header
       This contains total number of security contexts being sent and total
       size of all the security contexts (including size of
       fuse_secctx_header).
    
     - struct fuse_secctx
       This contains size of security context which follows this structure.
       There is one fuse_secctx instance per security context.
    
     - xattr name string
       This string represents name of xattr which should be used while setting
       security context.
    
     - security context
       This is the actual security context whose size is specified in
       fuse_secctx struct.
    
    Also add the FUSE_SECURITY_CTX flag for the `flags` field of the
    fuse_init_out struct.  When this flag is set the kernel will append the
    security context for a newly created inode to the request (create, mkdir,
    mknod, and symlink).  The server is responsible for ensuring that the inode
    appears atomically (preferrably) with the requested security context.
    
    For example, If the server is using SELinux and backed by a "real" linux
    file system that supports extended attributes it can write the security
    context value to /proc/thread-self/attr/fscreate before making the syscall
    to create the inode.
    
    This patch is based on patch from Chirantan Ekbote <chirantan@chromium.org>
    Signed-off-by: default avatarVivek Goyal <vgoyal@redhat.com>
    Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
    3e2b6fdb
dir.c 48.3 KB