From a617c23cccc5c95ff2b5f9437ab96ee4db37e88d Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sat, 18 Mar 2023 14:02:56 +0100 Subject: [PATCH] Disable reencryption for DAX devices. Device-mapper is not capable to stack DAX/non-DAX devices in mapping table, so online reencryption cannot work. Fixes: #760 --- lib/luks2/luks2_reencrypt.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/luks2/luks2_reencrypt.c b/lib/luks2/luks2_reencrypt.c index 61110a52..43173f15 100644 --- a/lib/luks2/luks2_reencrypt.c +++ b/lib/luks2/luks2_reencrypt.c @@ -3852,6 +3852,11 @@ int crypt_reencrypt_init_by_keyring(struct crypt_device *cd, if (params && (params->flags & CRYPT_REENCRYPT_INITIALIZE_ONLY) && (params->flags & CRYPT_REENCRYPT_RESUME_ONLY)) return -EINVAL; + if (device_is_dax(crypt_data_device(cd)) > 0) { + log_err(cd, _("Reencryption is not supported for DAX (persistent memory) devices.")); + return -EINVAL; + } + r = keyring_get_passphrase(passphrase_description, &passphrase, &passphrase_size); if (r < 0) { log_err(cd, _("Failed to read passphrase from keyring (error %d)."), r); @@ -3881,6 +3886,11 @@ int crypt_reencrypt_init_by_passphrase(struct crypt_device *cd, if (params && (params->flags & CRYPT_REENCRYPT_INITIALIZE_ONLY) && (params->flags & CRYPT_REENCRYPT_RESUME_ONLY)) return -EINVAL; + if (device_is_dax(crypt_data_device(cd)) > 0) { + log_err(cd, _("Reencryption is not supported for DAX (persistent memory) devices.")); + return -EINVAL; + } + return reencrypt_init_by_passphrase(cd, name, passphrase, passphrase_size, keyslot_old, keyslot_new, cipher, cipher_mode, params); }