From bd0768a42a2d99d62eba6c8e108809e62dcb6c61 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Wed, 3 Jan 2024 15:55:16 +0100 Subject: [PATCH] Respect CRYPT_ACTIVATE_SHARED in reencryption. --- lib/luks2/luks2.h | 2 +- lib/luks2/luks2_reencrypt.c | 5 +++-- lib/setup.c | 4 +++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/luks2/luks2.h b/lib/luks2/luks2.h index 08f6df5b..a92c693a 100644 --- a/lib/luks2/luks2.h +++ b/lib/luks2/luks2.h @@ -494,7 +494,7 @@ int LUKS2_reencrypt_check_device_size(struct crypt_device *cd, struct luks2_hdr *hdr, uint64_t check_size, uint64_t *dev_size, - bool activation, + bool device_exclusive_check, bool dynamic); int LUKS2_reencrypt_digest_verify(struct crypt_device *cd, diff --git a/lib/luks2/luks2_reencrypt.c b/lib/luks2/luks2_reencrypt.c index 456501c8..905e1396 100644 --- a/lib/luks2/luks2_reencrypt.c +++ b/lib/luks2/luks2_reencrypt.c @@ -4331,7 +4331,7 @@ int LUKS2_reencrypt_data_offset(struct luks2_hdr *hdr, bool blockwise) /* internal only */ int LUKS2_reencrypt_check_device_size(struct crypt_device *cd, struct luks2_hdr *hdr, - uint64_t check_size, uint64_t *dev_size, bool activation, bool dynamic) + uint64_t check_size, uint64_t *dev_size, bool device_exclusive_check, bool dynamic) { int r; uint64_t data_offset, real_size = 0; @@ -4340,7 +4340,8 @@ int LUKS2_reencrypt_check_device_size(struct crypt_device *cd, struct luks2_hdr (LUKS2_get_segment_by_flag(hdr, "backup-moved-segment") || dynamic)) check_size += reencrypt_data_shift(hdr); - r = device_check_access(cd, crypt_data_device(cd), activation ? DEV_EXCL : DEV_OK); + r = device_check_access(cd, crypt_data_device(cd), + device_exclusive_check ? DEV_EXCL : DEV_OK); if (r) return r; diff --git a/lib/setup.c b/lib/setup.c index f4c3db7e..f3cbf5f3 100644 --- a/lib/setup.c +++ b/lib/setup.c @@ -5092,7 +5092,9 @@ static int _open_and_activate_reencrypt_device(struct crypt_device *cd, log_dbg(cd, "Entering clean reencryption state mode."); if (r >= 0) - r = LUKS2_reencrypt_check_device_size(cd, hdr, minimal_size, &device_size, true, dynamic_size); + r = LUKS2_reencrypt_check_device_size(cd, hdr, minimal_size, &device_size, + !(flags & CRYPT_ACTIVATE_SHARED), + dynamic_size); if (r >= 0) r = LUKS2_activate_multi(cd, name, vks, device_size >> SECTOR_SHIFT, flags);