Package: release.debian.org Severity: normal Tags: bookworm User: release.debian....@packages.debian.org Usertags: pu Control: affects -1 + src:cryptsetup
Dear Release Team, [ Reason ] It was discovered that the upstream patch mitigating #1028250 was incomplete: `cryptsetup luksFormat` still caused OOM on some memory constrained systems. This was fixed upstream in a new MR, which is backported in sid in 2:2.6.1-4. Unfortunately the version (like -3) is barred from entering testing due to a dependency on libargon2-1-udeb ≥0~20190702+dfsg, hence the request to go via t-p-u instead. See https://bugs.debian.org/1032235#107 . [ Impact ] Running `cryptsetup luksFormat` might OOM on systems with ≤1G RAM when the memory pressure exceeds 50%. Concretely, that means one might not be able to relying use the “encrypted LVM” partitioning scheme from the graphical installer on such systems. [ Tests ] * DEP-8 tests, incl. full upstream test suite and cryptroot tests. * Comparison of memory costs between releases from d-i depending on the amount of RAM: https://bugs.debian.org/1028250#78 . [ Risks ] The change only affets systems with <2G RAM, and among those only the ones without swap area. That includes low-memory rescue systems and d-i, but not “normal systems”. [ Checklist ] [x] *all* changes are documented in the d/changelog [x] I reviewed all changes and I approve them [x] attach debdiff against the package in testing [x] the issue is verified as fixed in unstable [ Changes ] Backport upstream MR https://gitlab.com/cryptsetup/cryptsetup/-/merge_requests/498 : + 7893c33d: Check for physical memory available also in PBKDF benchmark. + 6721d3a8: Use only half of detected free memory on systems without swap. [ Other info ] CC'ing kibi for d-i-ack. -- Guilhem.
diffstat for cryptsetup-2.6.1 cryptsetup-2.6.1 changelog | 14 + patches/Check-for-physical-memory-available-also-in-PBKDF-benchma.patch | 74 ++++++++++ patches/Use-only-half-of-detected-free-memory-on-systems-without-.patch | 43 +++++ patches/series | 2 4 files changed, 133 insertions(+) diff -Nru cryptsetup-2.6.1/debian/changelog cryptsetup-2.6.1/debian/changelog --- cryptsetup-2.6.1/debian/changelog 2023-03-26 19:18:59.000000000 +0200 +++ cryptsetup-2.6.1/debian/changelog 2023-04-21 00:54:29.000000000 +0200 @@ -1,3 +1,17 @@ +cryptsetup (2:2.6.1-4~deb12u1) bookworm; urgency=medium + + * Rebuild for Bookworm. + + -- Guilhem Moulin <guil...@debian.org> Fri, 21 Apr 2023 00:54:29 +0200 + +cryptsetup (2:2.6.1-4) unstable; urgency=medium + + * Backport upstream MR !498, see #1028250: + + 7893c33d: Check for physical memory available also in PBKDF benchmark. + + 6721d3a8: Use only half of detected free memory on systems without swap. + + -- Guilhem Moulin <guil...@debian.org> Thu, 20 Apr 2023 23:46:08 +0200 + cryptsetup (2:2.6.1-3~deb12u1) bookworm; urgency=medium * Rebuild for Bookworm. diff -Nru cryptsetup-2.6.1/debian/patches/Check-for-physical-memory-available-also-in-PBKDF-benchma.patch cryptsetup-2.6.1/debian/patches/Check-for-physical-memory-available-also-in-PBKDF-benchma.patch --- cryptsetup-2.6.1/debian/patches/Check-for-physical-memory-available-also-in-PBKDF-benchma.patch 1970-01-01 01:00:00.000000000 +0100 +++ cryptsetup-2.6.1/debian/patches/Check-for-physical-memory-available-also-in-PBKDF-benchma.patch 2023-04-21 00:54:29.000000000 +0200 @@ -0,0 +1,74 @@ +From: Milan Broz <gmazyl...@gmail.com> +Date: Mon, 3 Apr 2023 13:31:16 +0200 +Subject: Check for physical memory available also in PBKDF benchmark. + +Origin: https://gitlab.com/cryptsetup/cryptsetup/-/commit/7893c33d71cde09e240234c484c6c468f22c2fe7 +Bug: https://gitlab.com/cryptsetup/cryptsetup/-/issues/802#note_1328592911 +Bug-Debian: https://bugs.debian.org/1028250 +--- + lib/internal.h | 1 + + lib/utils_benchmark.c | 9 +++++++++ + lib/utils_pbkdf.c | 4 ++-- + 3 files changed, 12 insertions(+), 2 deletions(-) + +diff --git a/lib/internal.h b/lib/internal.h +index 98095fa..f261cae 100644 +--- a/lib/internal.h ++++ b/lib/internal.h +@@ -89,6 +89,7 @@ int crypt_benchmark_pbkdf_internal(struct crypt_device *cd, + struct crypt_pbkdf_type *pbkdf, + size_t volume_key_size); + const char *crypt_get_cipher_spec(struct crypt_device *cd); ++uint32_t pbkdf_adjusted_phys_memory_kb(void); + + /* Device backend */ + struct device; +diff --git a/lib/utils_benchmark.c b/lib/utils_benchmark.c +index 728e4df..a0326ce 100644 +--- a/lib/utils_benchmark.c ++++ b/lib/utils_benchmark.c +@@ -101,6 +101,7 @@ int crypt_benchmark_pbkdf(struct crypt_device *cd, + { + int r, priority; + const char *kdf_opt; ++ uint32_t memory_kb; + + if (!pbkdf || (!password && password_size)) + return -EINVAL; +@@ -113,6 +114,14 @@ int crypt_benchmark_pbkdf(struct crypt_device *cd, + + log_dbg(cd, "Running %s(%s) benchmark.", pbkdf->type, kdf_opt); + ++ memory_kb = pbkdf_adjusted_phys_memory_kb(); ++ if (memory_kb < pbkdf->max_memory_kb) { ++ log_dbg(cd, "Not enough physical memory detected, " ++ "PBKDF max memory decreased from %dkB to %dkB.", ++ pbkdf->max_memory_kb, memory_kb); ++ pbkdf->max_memory_kb = memory_kb; ++ } ++ + crypt_process_priority(cd, &priority, true); + r = crypt_pbkdf_perf(pbkdf->type, pbkdf->hash, password, password_size, + salt, salt_size, volume_key_size, pbkdf->time_ms, +diff --git a/lib/utils_pbkdf.c b/lib/utils_pbkdf.c +index d8f41c7..b2d4fa0 100644 +--- a/lib/utils_pbkdf.c ++++ b/lib/utils_pbkdf.c +@@ -61,7 +61,7 @@ const struct crypt_pbkdf_type *crypt_get_pbkdf_type_params(const char *pbkdf_typ + return NULL; + } + +-static uint32_t adjusted_phys_memory(void) ++uint32_t pbkdf_adjusted_phys_memory_kb(void) + { + uint64_t free_kb, memory_kb = crypt_getphysmemory_kb(); + +@@ -258,7 +258,7 @@ int init_pbkdf_type(struct crypt_device *cd, + } + + if (cd_pbkdf->max_memory_kb) { +- memory_kb = adjusted_phys_memory(); ++ memory_kb = pbkdf_adjusted_phys_memory_kb(); + if (cd_pbkdf->max_memory_kb > memory_kb) { + log_dbg(cd, "Not enough physical memory detected, " + "PBKDF max memory decreased from %dkB to %dkB.", diff -Nru cryptsetup-2.6.1/debian/patches/series cryptsetup-2.6.1/debian/patches/series --- cryptsetup-2.6.1/debian/patches/series 2023-03-26 19:18:59.000000000 +0200 +++ cryptsetup-2.6.1/debian/patches/series 2023-04-21 00:54:29.000000000 +0200 @@ -1,2 +1,4 @@ Try-to-avoid-OOM-killer-on-low-memory-systems-without-swa.patch Print-warning-when-keyslot-requires-more-memory-than-avai.patch +Check-for-physical-memory-available-also-in-PBKDF-benchma.patch +Use-only-half-of-detected-free-memory-on-systems-without-.patch diff -Nru cryptsetup-2.6.1/debian/patches/Use-only-half-of-detected-free-memory-on-systems-without-.patch cryptsetup-2.6.1/debian/patches/Use-only-half-of-detected-free-memory-on-systems-without-.patch --- cryptsetup-2.6.1/debian/patches/Use-only-half-of-detected-free-memory-on-systems-without-.patch 1970-01-01 01:00:00.000000000 +0100 +++ cryptsetup-2.6.1/debian/patches/Use-only-half-of-detected-free-memory-on-systems-without-.patch 2023-04-21 00:54:29.000000000 +0200 @@ -0,0 +1,43 @@ +From: Milan Broz <gmazyl...@gmail.com> +Date: Mon, 17 Apr 2023 13:41:17 +0200 +Subject: Use only half of detected free memory on systems without swap. + +As tests shows, limiting used Argon2 memory to free memory on +systems without swap is still not enough. +Use just half of it, this should bring needed margin while +still use Argon2. + +Note, for very-low memory constrained systems user should +avoid memory-hard PBKDF (IOW manually select PBKDF2), we +do not do this automatically. + +Origin: https://gitlab.com/cryptsetup/cryptsetup/-/commit/6721d3a8b29b13fe88aeeaefe09d457e99d1c6fa +Bug: https://gitlab.com/cryptsetup/cryptsetup/-/issues/802#note_1328592911 +Bug-Debian: https://bugs.debian.org/1028250 +--- + lib/utils_pbkdf.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/lib/utils_pbkdf.c b/lib/utils_pbkdf.c +index b2d4fa0..7399bd2 100644 +--- a/lib/utils_pbkdf.c ++++ b/lib/utils_pbkdf.c +@@ -76,10 +76,17 @@ uint32_t pbkdf_adjusted_phys_memory_kb(void) + memory_kb /= 2; + + /* +- * Never use more that available free space on system without swap. ++ * Never use more that half of available free memory on system without swap. + */ + if (!crypt_swapavailable()) { + free_kb = crypt_getphysmemoryfree_kb(); ++ ++ /* ++ * Using exactly free memory causes OOM too, use only half of the value. ++ * Ignore small values (< 64MB), user should use PBKDF2 in such environment. ++ */ ++ free_kb /= 2; ++ + if (free_kb > (64 * 1024) && free_kb < memory_kb) + return free_kb; + }
signature.asc
Description: PGP signature