f2fs: wire up FS_IOC_GET_ENCRYPTION_NONCE
authorEric Biggers <ebiggers@google.com>
Sat, 14 Mar 2020 20:50:51 +0000 (13:50 -0700)
committerEric Biggers <ebiggers@google.com>
Fri, 20 Mar 2020 04:57:06 +0000 (21:57 -0700)
This new ioctl retrieves a file's encryption nonce, which is useful for
testing.  See the corresponding fs/crypto/ patch for more details.

Link: https://lore.kernel.org/r/20200314205052.93294-4-ebiggers@kernel.org
Signed-off-by: Eric Biggers <ebiggers@google.com>
fs/f2fs/file.c

index 0d4da64..351762f 100644 (file)
@@ -2423,6 +2423,14 @@ static int f2fs_ioc_get_encryption_key_status(struct file *filp,
        return fscrypt_ioctl_get_key_status(filp, (void __user *)arg);
 }
 
+static int f2fs_ioc_get_encryption_nonce(struct file *filp, unsigned long arg)
+{
+       if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
+               return -EOPNOTSUPP;
+
+       return fscrypt_ioctl_get_nonce(filp, (void __user *)arg);
+}
+
 static int f2fs_ioc_gc(struct file *filp, unsigned long arg)
 {
        struct inode *inode = file_inode(filp);
@@ -3437,6 +3445,8 @@ long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
                return f2fs_ioc_remove_encryption_key_all_users(filp, arg);
        case FS_IOC_GET_ENCRYPTION_KEY_STATUS:
                return f2fs_ioc_get_encryption_key_status(filp, arg);
+       case FS_IOC_GET_ENCRYPTION_NONCE:
+               return f2fs_ioc_get_encryption_nonce(filp, arg);
        case F2FS_IOC_GARBAGE_COLLECT:
                return f2fs_ioc_gc(filp, arg);
        case F2FS_IOC_GARBAGE_COLLECT_RANGE:
@@ -3611,6 +3621,7 @@ long f2fs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
        case FS_IOC_REMOVE_ENCRYPTION_KEY:
        case FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS:
        case FS_IOC_GET_ENCRYPTION_KEY_STATUS:
+       case FS_IOC_GET_ENCRYPTION_NONCE:
        case F2FS_IOC_GARBAGE_COLLECT:
        case F2FS_IOC_GARBAGE_COLLECT_RANGE:
        case F2FS_IOC_WRITE_CHECKPOINT: