mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-23 02:44:41 +03:00
Fix 'zfs change-key' with unencrypted child
Currently, when you call 'zfs change-key' on an encrypted dataset that has an unencrypted child, the code will trigger a VERIFY. This VERIFY is leftover from before we allowed unencrypted datasets to exist underneath encrypted ones. This patch fixes the issue by simply replacing the VERIFY with an early return when recursing through datasets. Reviewed by: Jason King <jason.brian.king@gmail.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Igor Kozhukhov <igor@dilos.org> Signed-off-by: Tom Caputi <tcaputi@datto.com> Closes #9524
This commit is contained in:
committed by
Brian Behlendorf
parent
d46f0deb03
commit
bae11ba8dc
@@ -1430,6 +1430,7 @@ spa_keystore_change_key_sync_impl(uint64_t rddobj, uint64_t ddobj,
|
||||
uint64_t new_rddobj, dsl_wrapping_key_t *wkey, boolean_t skip,
|
||||
dmu_tx_t *tx)
|
||||
{
|
||||
int ret;
|
||||
zap_cursor_t *zc;
|
||||
zap_attribute_t *za;
|
||||
dsl_pool_t *dp = dmu_tx_pool(tx);
|
||||
@@ -1448,12 +1449,15 @@ spa_keystore_change_key_sync_impl(uint64_t rddobj, uint64_t ddobj,
|
||||
return;
|
||||
}
|
||||
|
||||
ret = dsl_dir_get_encryption_root_ddobj(dd, &curr_rddobj);
|
||||
VERIFY(ret == 0 || ret == ENOENT);
|
||||
|
||||
/*
|
||||
* Stop recursing if this dsl dir didn't inherit from the root
|
||||
* or if this dd is a clone.
|
||||
*/
|
||||
VERIFY0(dsl_dir_get_encryption_root_ddobj(dd, &curr_rddobj));
|
||||
if (!skip && (curr_rddobj != rddobj || dsl_dir_is_clone(dd))) {
|
||||
if (ret == ENOENT ||
|
||||
(!skip && (curr_rddobj != rddobj || dsl_dir_is_clone(dd)))) {
|
||||
dsl_dir_rele(dd, FTAG);
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user