From e0cacef52e6f5c467592a8a7d573bf1575ebc5ad Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Wed, 6 Dec 2017 13:41:32 +0100 Subject: [PATCH] Align legacy keyslot temporary device according to keyslot alignment. For some strange filesystems (nfs) we get big block size (1MB). For temporary keyslot devices this mapping does not make sense and can cause problem with detached headers that are smaller (contains exactly the slot size). --- lib/luks1/keyencryption.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/luks1/keyencryption.c b/lib/luks1/keyencryption.c index 64896b17..d30a8b18 100644 --- a/lib/luks1/keyencryption.c +++ b/lib/luks1/keyencryption.c @@ -67,7 +67,7 @@ static int LUKS_endec_template(char *src, size_t srcLength, } }; int r, devfd = -1; - size_t bsize, alignment; + size_t bsize, keyslot_alignment, alignment; log_dbg("Using dmcrypt to access keyslot area."); @@ -76,7 +76,11 @@ static int LUKS_endec_template(char *src, size_t srcLength, if (!bsize || !alignment) return -EINVAL; - dmd.size = size_round_up(srcLength, bsize) / SECTOR_SIZE; + if (bsize > LUKS_ALIGN_KEYSLOTS) + keyslot_alignment = LUKS_ALIGN_KEYSLOTS; + else + keyslot_alignment = bsize; + dmd.size = size_round_up(srcLength, keyslot_alignment) / SECTOR_SIZE; if (mode == O_RDONLY) dmd.flags |= CRYPT_ACTIVATE_READONLY;