[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: |
Glenn Washburn |
Subject: |
Re: [PATCH 06/17] luks2: grub_cryptodisk_t->total_length is the max number of device native sectors. |
Date: |
Thu, 30 Jul 2020 16:03:47 -0500 |
On Thu, 30 Jul 2020 17:21:16 +0200
Patrick Steinhardt <ps@pks.im> wrote:
> 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.
I'm adding an extra patch to the patch set to change the name of "disk"
to "source" like it is in luks.c for clarity. Since we're getting the
size of the source disk in source disk sector sizes, we need to convert
it to cryptodisk sector sizes, which is what offset and total_length
are in. I'll add a comment.
- [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
- [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