Commit 219b0e2c authored by Eric Biggers's avatar Eric Biggers Committed by Richard Weinberger

ubifs: Add support for FS_ENCRYPT_FL

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: default avatarEric Biggers <ebiggers@google.com>
Signed-off-by: default avatarRichard Weinberger <richard@nod.at>
parent 2b57067a
...@@ -17,10 +17,14 @@ ...@@ -17,10 +17,14 @@
#include "ubifs.h" #include "ubifs.h"
/* Need to be kept consistent with checked flags in ioctl2ubifs() */ /* 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_COMPR_FL | FS_SYNC_FL | FS_APPEND_FL | \
FS_IMMUTABLE_FL | FS_DIRSYNC_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. * ubifs_set_inode_flags - set VFS inode flags.
* @inode: VFS inode to set flags for * @inode: VFS inode to set flags for
...@@ -91,6 +95,8 @@ static int ubifs2ioctl(int ubifs_flags) ...@@ -91,6 +95,8 @@ static int ubifs2ioctl(int ubifs_flags)
ioctl_flags |= FS_IMMUTABLE_FL; ioctl_flags |= FS_IMMUTABLE_FL;
if (ubifs_flags & UBIFS_DIRSYNC_FL) if (ubifs_flags & UBIFS_DIRSYNC_FL)
ioctl_flags |= FS_DIRSYNC_FL; ioctl_flags |= FS_DIRSYNC_FL;
if (ubifs_flags & UBIFS_CRYPT_FL)
ioctl_flags |= FS_ENCRYPT_FL;
return ioctl_flags; return ioctl_flags;
} }
...@@ -113,7 +119,7 @@ static int setflags(struct inode *inode, int flags) ...@@ -113,7 +119,7 @@ static int setflags(struct inode *inode, int flags)
if (err) if (err)
goto out_unlock; goto out_unlock;
ui->flags &= ~ioctl2ubifs(UBIFS_SUPPORTED_IOCTL_FLAGS); ui->flags &= ~ioctl2ubifs(UBIFS_SETTABLE_IOCTL_FLAGS);
ui->flags |= ioctl2ubifs(flags); ui->flags |= ioctl2ubifs(flags);
ubifs_set_inode_flags(inode); ubifs_set_inode_flags(inode);
inode->i_ctime = current_time(inode); inode->i_ctime = current_time(inode);
...@@ -156,8 +162,9 @@ long ubifs_ioctl(struct file *file, unsigned int cmd, unsigned long arg) ...@@ -156,8 +162,9 @@ long ubifs_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
if (get_user(flags, (int __user *) arg)) if (get_user(flags, (int __user *) arg))
return -EFAULT; return -EFAULT;
if (flags & ~UBIFS_SUPPORTED_IOCTL_FLAGS) if (flags & ~UBIFS_GETTABLE_IOCTL_FLAGS)
return -EOPNOTSUPP; return -EOPNOTSUPP;
flags &= UBIFS_SETTABLE_IOCTL_FLAGS;
if (!S_ISDIR(inode->i_mode)) if (!S_ISDIR(inode->i_mode))
flags &= ~FS_DIRSYNC_FL; flags &= ~FS_DIRSYNC_FL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment