mirror of https://gitee.com/openkylin/linux.git
ext4 crypto: fix to check feature status before get policy
When getting fscrypt policy via EXT4_IOC_GET_ENCRYPTION_POLICY, if encryption feature is off, it's better to return EOPNOTSUPP instead of ENODATA, so let's add ext4_has_feature_encrypt() to do the check for that. This makes it so that all fscrypt ioctls consistently check for the encryption feature, and makes ext4 consistent with f2fs in this regard. Signed-off-by: Chao Yu <yuchao0@huawei.com> [EB - removed unneeded braces, updated the documentation, and added more explanation to commit message] Signed-off-by: Eric Biggers <ebiggers@google.com>
This commit is contained in:
parent
ba13f2c8d7
commit
0642ea2409
|
@ -562,7 +562,8 @@ FS_IOC_GET_ENCRYPTION_POLICY_EX can fail with the following errors:
|
||||||
or this kernel is too old to support FS_IOC_GET_ENCRYPTION_POLICY_EX
|
or this kernel is too old to support FS_IOC_GET_ENCRYPTION_POLICY_EX
|
||||||
(try FS_IOC_GET_ENCRYPTION_POLICY instead)
|
(try FS_IOC_GET_ENCRYPTION_POLICY instead)
|
||||||
- ``EOPNOTSUPP``: the kernel was not configured with encryption
|
- ``EOPNOTSUPP``: the kernel was not configured with encryption
|
||||||
support for this filesystem
|
support for this filesystem, or the filesystem superblock has not
|
||||||
|
had encryption enabled on it
|
||||||
- ``EOVERFLOW``: the file is encrypted and uses a recognized
|
- ``EOVERFLOW``: the file is encrypted and uses a recognized
|
||||||
encryption policy version, but the policy struct does not fit into
|
encryption policy version, but the policy struct does not fit into
|
||||||
the provided buffer
|
the provided buffer
|
||||||
|
|
|
@ -1113,6 +1113,8 @@ long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
case EXT4_IOC_GET_ENCRYPTION_POLICY:
|
case EXT4_IOC_GET_ENCRYPTION_POLICY:
|
||||||
|
if (!ext4_has_feature_encrypt(sb))
|
||||||
|
return -EOPNOTSUPP;
|
||||||
return fscrypt_ioctl_get_policy(filp, (void __user *)arg);
|
return fscrypt_ioctl_get_policy(filp, (void __user *)arg);
|
||||||
|
|
||||||
case FS_IOC_GET_ENCRYPTION_POLICY_EX:
|
case FS_IOC_GET_ENCRYPTION_POLICY_EX:
|
||||||
|
|
Loading…
Reference in New Issue