• Ondrej Mosnacek's avatar
    selinux: make labeled NFS work when mounted before policy load · cec5fe70
    Ondrej Mosnacek authored
    Currently, when an NFS filesystem that supports passing LSM/SELinux
    labels is mounted during early boot (before the SELinux policy is
    loaded), it ends up mounted without the labeling support (i.e. with
    Fedora policy all files get the generic NFS label
    system_u:object_r:nfs_t:s0).
    
    This is because the information that the NFS mount supports passing
    labels (communicated to the LSM layer via the kern_flags argument of
    security_set_mnt_opts()) gets lost and when the policy is loaded the
    mount is initialized as if the passing is not supported.
    
    Fix this by noting the "native labeling" in newsbsec->flags (using a new
    SE_SBNATIVE flag) on the pre-policy-loaded call of
    selinux_set_mnt_opts() and then making sure it is respected on the
    second call from delayed_superblock_init().
    
    Additionally, make inode_doinit_with_dentry() initialize the inode's
    label from its extended attributes whenever it doesn't find it already
    intitialized by the filesystem. This is needed to properly initialize
    pre-existing inodes when delayed_superblock_init() is called. It should
    not trigger in any other cases (and if it does, it's still better to
    initialize the correct label instead of leaving the inode unlabeled).
    
    Fixes: eb9ae686 ("SELinux: Add new labeling type native labels")
    Tested-by: default avatarScott Mayhew <smayhew@redhat.com>
    Signed-off-by: default avatarOndrej Mosnacek <omosnace@redhat.com>
    [PM: fixed 'Fixes' tag format]
    Signed-off-by: default avatarPaul Moore <paul@paul-moore.com>
    cec5fe70
security.h 11.3 KB