• Eric Paris's avatar
    tmpfs: implement generic xattr support · b09e0fa4
    Eric Paris authored
    Implement generic xattrs for tmpfs filesystems.  The Feodra project, while
    trying to replace suid apps with file capabilities, realized that tmpfs,
    which is used on the build systems, does not support file capabilities and
    thus cannot be used to build packages which use file capabilities.  Xattrs
    are also needed for overlayfs.
    
    The xattr interface is a bit odd.  If a filesystem does not implement any
    {get,set,list}xattr functions the VFS will call into some random LSM hooks
    and the running LSM can then implement some method for handling xattrs.
    SELinux for example provides a method to support security.selinux but no
    other security.* xattrs.
    
    As it stands today when one enables CONFIG_TMPFS_POSIX_ACL tmpfs will have
    xattr handler routines specifically to handle acls.  Because of this tmpfs
    would loose the VFS/LSM helpers to support the running LSM.  To make up
    for that tmpfs had stub functions that did nothing but call into the LSM
    hooks which implement the helpers.
    
    This new patch does not use the LSM fallback functions and instead just
    implements a native get/set/list xattr feature for the full security.* and
    trusted.* namespace like a normal filesystem.  This means that tmpfs can
    now support both security.selinux and security.capability, which was not
    previously possible.
    
    The basic implementation is that I attach a:
    
    struct shmem_xattr {
    	struct list_head list; /* anchored by shmem_inode_info->xattr_list */
    	char *name;
    	size_t size;
    	char value[0];
    };
    
    Into the struct shmem_inode_info for each xattr that is set.  This
    implementation could easily support the user.* namespace as well, except
    some care needs to be taken to prevent large amounts of unswappable memory
    being allocated for unprivileged users.
    
    [mszeredi@suse.cz: new config option, suport trusted.*, support symlinks]
    Signed-off-by: default avatarEric Paris <eparis@redhat.com>
    Signed-off-by: default avatarMiklos Szeredi <mszeredi@suse.cz>
    Acked-by: default avatarSerge Hallyn <serge.hallyn@ubuntu.com>
    Tested-by: default avatarSerge Hallyn <serge.hallyn@ubuntu.com>
    Cc: Kyle McMartin <kyle@mcmartin.ca>
    Acked-by: default avatarHugh Dickins <hughd@google.com>
    Tested-by: default avatarJordi Pujol <jordipujolp@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    b09e0fa4
shmem.c 77.1 KB