Skip to content

Commit

Permalink
ubifs: Add support for FS_ENCRYPT_FL
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Richard Weinberger <[email protected]>
  • Loading branch information
ebiggers authored and richardweinberger committed Jan 16, 2020
1 parent 2b57067 commit 219b0e2
Showing 1 changed file with 10 additions and 3 deletions.
13 changes: 10 additions & 3 deletions fs/ubifs/ioctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,14 @@
#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
Expand Down Expand Up @@ -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;
}
Expand All @@ -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);
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 219b0e2

Please sign in to comment.