[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 06/17] luks2: grub_cryptodisk_t->total_length is the max numb
From: |
Patrick Steinhardt |
Subject: |
Re: [PATCH 06/17] luks2: grub_cryptodisk_t->total_length is the max number of device native sectors. |
Date: |
Thu, 30 Jul 2020 17:21:16 +0200 |
On Wed, Jul 29, 2020 at 04:50:11PM -0500, development@efficientek.com wrote:
> From: Glenn Washburn <development@efficientek.com>
>
> 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.
>
> 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 e3ff7c83d..632309e3c 100644
> --- a/grub-core/disk/luks2.c
> +++ b/grub-core/disk/luks2.c
> @@ -416,7 +416,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;
> @@ -602,9 +602,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;
Oops, thanks for catching this. Could you maybe add a comment wrt to the
magic going on with `(crypt->log_sector_size - disk->log_sector_size)`?
I didn't think too hard about it and am in a hurry, but the conversion
isn't that obvious to me.
> 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.25.1
>
signature.asc
Description: PGP signature
- [PATCH 00/17] Fixes and improvements for cryptodisks+luks2 and a few other things., development, 2020/07/29
- [PATCH 01/17] configure: Add Ubuntu dejavu font path., development, 2020/07/29
- [PATCH 02/17] cryptodisk: Fix cipher IV mode 'plain64' always being set as 'plain'., development, 2020/07/29
- [PATCH 03/17] cryptodisk: Incorrect calculation of start sector for grub_disk_read in grub_cryptodisk_read., development, 2020/07/29
- [PATCH 04/17] cryptodisk: Add more verbosity when reading/writing cryptodisks., development, 2020/07/29
- [PATCH 06/17] luks2: grub_cryptodisk_t->total_length is the max number of device native sectors., development, 2020/07/29
- Re: [PATCH 06/17] luks2: grub_cryptodisk_t->total_length is the max number of device native sectors.,
Patrick Steinhardt <=
- [PATCH 05/17] luks: Add support for LUKS2 in (proc)/luks_script, development, 2020/07/29
- [PATCH 07/17] cryptodisk, luks: Allow special processing for comparing UUIDs., development, 2020/07/29
- [PATCH 08/17] cryptodisk: Unregister cryptomount command when removing module., development, 2020/07/29
- [PATCH 12/17] fs: Allow number of blocks in block list to be optional, where length will be defaulted to the length of the device., development, 2020/07/29
- [PATCH 11/17] cryptodisk: Rename total_length field in grub_cryptodisk_t to total_sectors., development, 2020/07/29