• Roberto Sassu's avatar
    smack: Record transmuting in smk_transmuted · 2c085f3a
    Roberto Sassu authored
    smack_dentry_create_files_as() determines whether transmuting should occur
    based on the label of the parent directory the new inode will be added to,
    and not the label of the directory where it is created.
    
    This helps for example to do transmuting on overlayfs, since the latter
    first creates the inode in the working directory, and then moves it to the
    correct destination.
    
    However, despite smack_dentry_create_files_as() provides the correct label,
    smack_inode_init_security() does not know from passed information whether
    or not transmuting occurred. Without this information,
    smack_inode_init_security() cannot set SMK_INODE_CHANGED in smk_flags,
    which will result in the SMACK64TRANSMUTE xattr not being set in
    smack_d_instantiate().
    
    Thus, add the smk_transmuted field to the task_smack structure, and set it
    in smack_dentry_create_files_as() to smk_task if transmuting occurred. If
    smk_task is equal to smk_transmuted in smack_inode_init_security(), act as
    if transmuting was successful but without taking the label from the parent
    directory (the inode label was already set correctly from the current
    credentials in smack_inode_alloc_security()).
    Signed-off-by: default avatarRoberto Sassu <roberto.sassu@huawei.com>
    Signed-off-by: default avatarCasey Schaufler <casey@schaufler-ca.com>
    2c085f3a
smack.h 13.3 KB