[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 04/10] luks2: grub_cryptodisk_t->total_length is the max number o
From: |
Glenn Washburn |
Subject: |
[PATCH 04/10] luks2: grub_cryptodisk_t->total_length is the max number of device native sectors |
Date: |
Sat, 3 Oct 2020 16:45:57 -0500 |
The total_length field is named confusingly because length usually refers to
bytes, whereas in this case its really the total number of sectors on the
device. Also counter-intuitively, grub_disk_get_size returns the total
number of device native sectors sectors. We need to convert the sectors from
the size of the underlying device to the cryptodisk sector size. And
segment.size is in bytes which need to be converted to cryptodisk sectors.
Also, removed an empty statement.
Signed-off-by: Glenn Washburn <development@efficientek.com>
---
grub-core/disk/luks2.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/grub-core/disk/luks2.c b/grub-core/disk/luks2.c
index 7917e02cd..8e99a1820 100644
--- a/grub-core/disk/luks2.c
+++ b/grub-core/disk/luks2.c
@@ -424,7 +424,7 @@ luks2_decrypt_key (grub_uint8_t *out_key,
grub_uint8_t salt[GRUB_CRYPTODISK_MAX_KEYLEN];
grub_uint8_t *split_key = NULL;
grub_size_t saltlen = sizeof (salt);
- char cipher[32], *p;;
+ char cipher[32], *p;
const gcry_md_spec_t *hash;
gcry_err_code_t gcry_ret;
grub_err_t ret;
@@ -611,9 +611,10 @@ luks2_recover_key (grub_disk_t disk,
crypt->log_sector_size = sizeof (unsigned int) * 8
- __builtin_clz ((unsigned int) segment.sector_size) - 1;
if (grub_strcmp (segment.size, "dynamic") == 0)
- crypt->total_length = grub_disk_get_size (disk) - crypt->offset;
+ crypt->total_length = (grub_disk_get_size (disk) >>
(crypt->log_sector_size - disk->log_sector_size))
+ - crypt->offset;
else
- crypt->total_length = grub_strtoull (segment.size, NULL, 10);
+ crypt->total_length = grub_strtoull (segment.size, NULL, 10) >>
crypt->log_sector_size;
ret = luks2_decrypt_key (candidate_key, disk, crypt, &keyslot,
(const grub_uint8_t *) passphrase, grub_strlen
(passphrase));
--
2.27.0
- [PATCH 00/10] Cryptodisk fixes for v2.06 redux, Glenn Washburn, 2020/10/03
- [PATCH 01/10] luks2: Fix use of incorrect index and some grub_error() messages., Glenn Washburn, 2020/10/03
- [PATCH 02/10] luks2: Improve readability in luks2_get_keyslot., Glenn Washburn, 2020/10/03
- [PATCH 03/10] luks2: Use more intuitive keyslot key instead of index when naming keyslot., Glenn Washburn, 2020/10/03
- [PATCH 05/10] cryptodisk: Fix cipher IV mode 'plain64' always being set as 'plain'., Glenn Washburn, 2020/10/03
- [PATCH 04/10] luks2: grub_cryptodisk_t->total_length is the max number of device native sectors,
Glenn Washburn <=
- [PATCH 06/10] cryptodisk: Properly handle non-512 byte sized sectors., Glenn Washburn, 2020/10/03
- [PATCH 08/10] cryptodisk: Rename total_length field in grub_cryptodisk_t to total_sectors., Glenn Washburn, 2020/10/03
- [PATCH 07/10] cryptodisk: Replace some literals with constants in grub_cryptodisk_endecrypt., Glenn Washburn, 2020/10/03
- [PATCH 09/10] cryptodisk: Rename offset in grub_cryptodisk_t to offset_sectors., Glenn Washburn, 2020/10/03
- [PATCH 10/10] luks2: Rename source disk variabled named 'disk' to 'source' as in luks.c., Glenn Washburn, 2020/10/03
- [PATCH v2 00/10] Cryptodisk fixes for v2.06 redux, Glenn Washburn, 2020/10/03