diff options
author | Tom Caputi <[email protected]> | 2018-06-18 15:47:12 -0400 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2018-08-15 09:49:19 -0700 |
commit | 1fff937a4c9d7b745540387d232c5ab2ba856fea (patch) | |
tree | d5806c401cc4d014e9a853f81196ff5c5103a044 /module/zfs/dsl_crypt.c | |
parent | d9c460a0b659c044d4397b7405712f2c9450d3c4 (diff) |
Check encrypted dataset + embedded recv earlier
This patch fixes a bug where attempting to receive a send stream
with embedded data into an encrypted dataset would not cleanup
that dataset when the error was reached. The check was moved into
dmu_recv_begin_check(), preventing this issue.
Reviewed-by: Jorgen Lundman <[email protected]>
Reviewed by: Matthew Ahrens <[email protected]>
Reviewed-by: Brian Behlendorf <[email protected]>
Reviewed-by: Richard Elling <[email protected]>
Signed-off-by: Tom Caputi <[email protected]>
Closes #7650
Diffstat (limited to 'module/zfs/dsl_crypt.c')
-rw-r--r-- | module/zfs/dsl_crypt.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/module/zfs/dsl_crypt.c b/module/zfs/dsl_crypt.c index 38e6123d3..f0878c934 100644 --- a/module/zfs/dsl_crypt.c +++ b/module/zfs/dsl_crypt.c @@ -1715,12 +1715,16 @@ dmu_objset_clone_crypt_check(dsl_dir_t *parentdd, dsl_dir_t *origindd) int -dmu_objset_create_crypt_check(dsl_dir_t *parentdd, dsl_crypto_params_t *dcp) +dmu_objset_create_crypt_check(dsl_dir_t *parentdd, dsl_crypto_params_t *dcp, + boolean_t *will_encrypt) { int ret; uint64_t pcrypt, crypt; dsl_crypto_params_t dummy_dcp = { 0 }; + if (will_encrypt != NULL) + *will_encrypt = B_FALSE; + if (dcp == NULL) dcp = &dummy_dcp; @@ -1758,10 +1762,13 @@ dmu_objset_create_crypt_check(dsl_dir_t *parentdd, dsl_crypto_params_t *dcp) return (0); } + if (will_encrypt != NULL) + *will_encrypt = B_TRUE; + /* * We will now definitely be encrypting. Check the feature flag. When * creating the pool the caller will check this for us since we won't - * technically have the fetaure activated yet. + * technically have the feature activated yet. */ if (parentdd != NULL && !spa_feature_is_enabled(parentdd->dd_pool->dp_spa, |