mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-04-12 22:51:46 +03:00
ZVOL: Add encryption key check for block cloning
Somehow during block cloning porting from file systems was missed the check for identical encryption keys. As result, blocks cloned between unrelated ZVOLs produced authentication errors on later reads. Having same or different encryption root does not matter. This patch copies dmu_objset_crypto_key_equal() call from FS side. Reviewed-by: Ameer Hamza <ahamza@ixsystems.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Alexander Motin <alexander.motin@TrueNAS.com> Closes #18315
This commit is contained in:
parent
06b0abfe62
commit
15e37e0919
@ -663,10 +663,26 @@ zvol_clone_range(zvol_state_t *zv_src, uint64_t inoff, zvol_state_t *zv_dst,
|
||||
error = SET_ERROR(EXDEV);
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
* Block cloning from an unencrypted dataset into an encrypted
|
||||
* dataset and vice versa is not supported.
|
||||
*/
|
||||
if (inos->os_encrypted != outos->os_encrypted) {
|
||||
error = SET_ERROR(EXDEV);
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
* Cloning across encrypted datasets is possible only if they
|
||||
* share the same master key.
|
||||
*/
|
||||
if (inos != outos && inos->os_encrypted &&
|
||||
!dmu_objset_crypto_key_equal(inos, outos)) {
|
||||
error = SET_ERROR(EXDEV);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (zv_src->zv_volblocksize != zv_dst->zv_volblocksize) {
|
||||
error = SET_ERROR(EINVAL);
|
||||
goto out;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user