]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ubifs: Add support for FS_ENCRYPT_FL
authorEric Biggers <ebiggers@google.com>
Mon, 9 Dec 2019 22:23:25 +0000 (14:23 -0800)
committerRichard Weinberger <richard@nod.at>
Thu, 16 Jan 2020 22:35:43 +0000 (23:35 +0100)
Make the FS_IOC_GETFLAGS ioctl on ubifs return the FS_ENCRYPT_FL flag on
encrypted files, like ext4 and f2fs do.

Also make this flag be ignored by FS_IOC_SETFLAGS, like ext4 and f2fs
do, since it's a recognized flag but is not directly settable.

Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
fs/ubifs/ioctl.c

index eeb1be25988814ce20dd0694add504f5abd1dab3..d49fc04f2d7d4628a2da57b5eca997fe0c87e81b 100644 (file)
 #include "ubifs.h"
 
 /* Need to be kept consistent with checked flags in ioctl2ubifs() */
-#define UBIFS_SUPPORTED_IOCTL_FLAGS \
+#define UBIFS_SETTABLE_IOCTL_FLAGS \
        (FS_COMPR_FL | FS_SYNC_FL | FS_APPEND_FL | \
         FS_IMMUTABLE_FL | FS_DIRSYNC_FL)
 
+/* Need to be kept consistent with checked flags in ubifs2ioctl() */
+#define UBIFS_GETTABLE_IOCTL_FLAGS \
+       (UBIFS_SETTABLE_IOCTL_FLAGS | FS_ENCRYPT_FL)
+
 /**
  * ubifs_set_inode_flags - set VFS inode flags.
  * @inode: VFS inode to set flags for
@@ -91,6 +95,8 @@ static int ubifs2ioctl(int ubifs_flags)
                ioctl_flags |= FS_IMMUTABLE_FL;
        if (ubifs_flags & UBIFS_DIRSYNC_FL)
                ioctl_flags |= FS_DIRSYNC_FL;
+       if (ubifs_flags & UBIFS_CRYPT_FL)
+               ioctl_flags |= FS_ENCRYPT_FL;
 
        return ioctl_flags;
 }
@@ -113,7 +119,7 @@ static int setflags(struct inode *inode, int flags)
        if (err)
                goto out_unlock;
 
-       ui->flags &= ~ioctl2ubifs(UBIFS_SUPPORTED_IOCTL_FLAGS);
+       ui->flags &= ~ioctl2ubifs(UBIFS_SETTABLE_IOCTL_FLAGS);
        ui->flags |= ioctl2ubifs(flags);
        ubifs_set_inode_flags(inode);
        inode->i_ctime = current_time(inode);
@@ -156,8 +162,9 @@ long ubifs_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                if (get_user(flags, (int __user *) arg))
                        return -EFAULT;
 
-               if (flags & ~UBIFS_SUPPORTED_IOCTL_FLAGS)
+               if (flags & ~UBIFS_GETTABLE_IOCTL_FLAGS)
                        return -EOPNOTSUPP;
+               flags &= UBIFS_SETTABLE_IOCTL_FLAGS;
 
                if (!S_ISDIR(inode->i_mode))
                        flags &= ~FS_DIRSYNC_FL;