• E
    selinux: Perform both commoncap and selinux xattr checks · 6b240306
    Eric W. Biederman 提交于
    When selinux is loaded the relax permission checks for writing
    security.capable are not honored.  Which keeps file capabilities
    from being used in user namespaces.
    
    Stephen Smalley <sds@tycho.nsa.gov> writes:
    > Originally SELinux called the cap functions directly since there was no
    > stacking support in the infrastructure and one had to manually stack a
    > secondary module internally.  inode_setxattr and inode_removexattr
    > however were special cases because the cap functions would check
    > CAP_SYS_ADMIN for any non-capability attributes in the security.*
    > namespace, and we don't want to impose that requirement on setting
    > security.selinux.  Thus, we inlined the capabilities logic into the
    > selinux hook functions and adapted it appropriately.
    
    Now that the permission checks in commoncap have evolved this
    inlining of their contents has become a problem.  So restructure
    selinux_inode_removexattr, and selinux_inode_setxattr to call
    both the corresponding cap_inode_ function and dentry_has_perm
    when the attribute is not a selinux security xattr.   This ensures
    the policies of both commoncap and selinux are enforced.
    
    This results in smack and selinux having the same basic structure
    for setxattr and removexattr.  Performing their own special permission
    checks when it is their modules xattr being written to, and deferring
    to commoncap when that is not the case.  Then finally performing their
    generic module policy on all xattr writes.
    
    This structure is fine when you only consider stacking with the
    commoncap lsm, but it becomes a problem if two lsms that don't want
    the commoncap security checks on their own attributes need to be
    stack.  This means there will need to be updates in the future as lsm
    stacking is improved, but at least now the structure between smack and
    selinux is common making the code easier to refactor.
    
    This change also has the effect that selinux_linux_setotherxattr becomes
    unnecessary so it is removed.
    
    Fixes: 8db6c34f ("Introduce v3 namespaced file capabilities")
    Fixes: 7bbf0e052b76 ("[PATCH] selinux merge")
    Historical Tree: https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.gitSigned-off-by: N"Eric W. Biederman" <ebiederm@xmission.com>
    Reviewed-by: NSerge Hallyn <serge@hallyn.com>
    Acked-by: NStephen Smalley <sds@tycho.nsa.gov>
    Signed-off-by: NPaul Moore <paul@paul-moore.com>
    6b240306
hooks.c 167.6 KB