From: Glenn Washburn Date: Tue, 8 Dec 2020 22:45:43 +0000 (-0600) Subject: luks2: grub_cryptodisk_t->total_sectors is the max number of device native sectors X-Git-Tag: grub-2.06-rc1~152 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7ed69b1d1c7a0fff237d1cb425ccf33dd284799d;p=thirdparty%2Fgrub.git luks2: grub_cryptodisk_t->total_sectors is the max number of device native sectors We need to convert the sectors from the size of the underlying device to the cryptodisk sector size; segment.size is in bytes which need to be converted to cryptodisk sectors as well. Also, removed an empty statement. Signed-off-by: Glenn Washburn Reviewed-by: Daniel Kiper --- diff --git a/grub-core/disk/luks2.c b/grub-core/disk/luks2.c index b9f27d9a5..53f61f6c8 100644 --- a/grub-core/disk/luks2.c +++ b/grub-core/disk/luks2.c @@ -429,7 +429,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; @@ -615,9 +615,10 @@ luks2_recover_key (grub_disk_t source, 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_sectors = grub_disk_native_sectors (source) - crypt->offset_sectors; + crypt->total_sectors = (grub_disk_native_sectors (source) >> (crypt->log_sector_size - source->log_sector_size)) + - crypt->offset_sectors; else - crypt->total_sectors = grub_strtoull (segment.size, NULL, 10); + crypt->total_sectors = grub_strtoull (segment.size, NULL, 10) >> crypt->log_sector_size; ret = luks2_decrypt_key (candidate_key, source, crypt, &keyslot, (const grub_uint8_t *) passphrase, grub_strlen (passphrase));