• Eric Biggers's avatar
    ubifs: Fix FS_IOC_SETFLAGS unexpectedly clearing encrypt flag · 2b57067a
    Eric Biggers authored
    UBIFS's implementation of FS_IOC_SETFLAGS fails to preserve existing
    inode flags that aren't settable by FS_IOC_SETFLAGS, namely the encrypt
    flag.  This causes the encrypt flag to be unexpectedly cleared.
    
    Fix it by preserving existing unsettable flags, like ext4 and f2fs do.
    
    Test case with kvm-xfstests shell:
    
        FSTYP=ubifs KEYCTL_PROG=keyctl
        . fs/ubifs/config
        . ~/xfstests/common/encrypt
        dev=$(__blkdev_to_ubi_volume /dev/vdc)
        ubiupdatevol -t $dev
        mount $dev /mnt -t ubifs
        k=$(_generate_session_encryption_key)
        mkdir /mnt/edir
        xfs_io -c "set_encpolicy $k" /mnt/edir
        echo contents > /mnt/edir/file
        chattr +i /mnt/edir/file
        chattr -i /mnt/edir/file
    
    With the bug, the following errors occur on the last command:
    
        [   18.081559] fscrypt (ubifs, inode 67): Inconsistent encryption context (parent directory: 65)
        chattr: Operation not permitted while reading flags on /mnt/edir/file
    
    Fixes: d475a507 ("ubifs: Add skeleton for fscrypto")
    Cc: <stable@vger.kernel.org> # v4.10+
    Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
    Signed-off-by: default avatarRichard Weinberger <richard@nod.at>
    2b57067a
ioctl.c 5.94 KB