[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[CRYPTO-LUKS v1 18/19] luks2: Fix use of incorrect index and some error
From: |
Glenn Washburn |
Subject: |
[CRYPTO-LUKS v1 18/19] luks2: Fix use of incorrect index and some error messages. |
Date: |
Fri, 31 Jul 2020 07:01:59 -0500 |
Signed-off-by: Glenn Washburn <development@efficientek.com>
---
grub-core/disk/luks2.c | 35 ++++++++++++++++++-----------------
1 file changed, 18 insertions(+), 17 deletions(-)
diff --git a/grub-core/disk/luks2.c b/grub-core/disk/luks2.c
index 58bb4b9ef..09584c84c 100644
--- a/grub-core/disk/luks2.c
+++ b/grub-core/disk/luks2.c
@@ -257,54 +257,55 @@ luks2_parse_digest (grub_luks2_digest_t *out, const
grub_json_t *digest)
static grub_err_t
luks2_get_keyslot (grub_luks2_keyslot_t *k, grub_luks2_digest_t *d,
grub_luks2_segment_t *s,
- const grub_json_t *root, grub_size_t i)
+ const grub_json_t *root, grub_size_t keyslot_idx)
{
grub_json_t keyslots, keyslot, digests, digest, segments, segment;
- grub_size_t j, size;
- grub_uint64_t idx;
+ grub_size_t i, size;
+ grub_uint64_t keyslot_key, digest_key, segment_key;
/* Get nth keyslot */
if (grub_json_getvalue (&keyslots, root, "keyslots") ||
- grub_json_getchild (&keyslot, &keyslots, i) ||
- grub_json_getuint64 (&idx, &keyslot, NULL) ||
+ grub_json_getchild (&keyslot, &keyslots, keyslot_idx) ||
+ grub_json_getuint64 (&keyslot_key, &keyslot, NULL) ||
grub_json_getchild (&keyslot, &keyslot, 0) ||
luks2_parse_keyslot (k, &keyslot))
- return grub_error (GRUB_ERR_BAD_ARGUMENT, "Could not parse keyslot
%"PRIuGRUB_SIZE, i);
+ return grub_error (GRUB_ERR_BAD_ARGUMENT, "Could not parse keyslot index
%"PRIuGRUB_SIZE, keyslot_idx);
/* Get digest that matches the keyslot. */
if (grub_json_getvalue (&digests, root, "digests") ||
grub_json_getsize (&size, &digests))
return grub_error (GRUB_ERR_BAD_ARGUMENT, "Could not get digests");
- for (j = 0; j < size; j++)
+ for (i = 0; i < size; i++)
{
if (grub_json_getchild (&digest, &digests, i) ||
+ grub_json_getuint64 (&digest_key, &digest, NULL) ||
grub_json_getchild (&digest, &digest, 0) ||
luks2_parse_digest (d, &digest))
- return grub_error (GRUB_ERR_BAD_ARGUMENT, "Could not parse digest
%"PRIuGRUB_SIZE, i);
+ return grub_error (GRUB_ERR_BAD_ARGUMENT, "Could not parse digest index
%"PRIuGRUB_SIZE, i);
- if ((d->keyslots & (1 << idx)))
+ if ((d->keyslots & (1 << keyslot_key)))
break;
}
- if (j == size)
- return grub_error (GRUB_ERR_FILE_NOT_FOUND, "No digest for keyslot
%"PRIuGRUB_SIZE);
+ if (i == size)
+ return grub_error (GRUB_ERR_FILE_NOT_FOUND, "No digest for keyslot
\"%"PRIuGRUB_UINT64_T"\"", keyslot_key);
/* Get segment that matches the digest. */
if (grub_json_getvalue (&segments, root, "segments") ||
grub_json_getsize (&size, &segments))
return grub_error (GRUB_ERR_BAD_ARGUMENT, "Could not get segments");
- for (j = 0; j < size; j++)
+ for (i = 0; i < size; i++)
{
if (grub_json_getchild (&segment, &segments, i) ||
- grub_json_getuint64 (&idx, &segment, NULL) ||
+ grub_json_getuint64 (&segment_key, &segment, NULL) ||
grub_json_getchild (&segment, &segment, 0) ||
luks2_parse_segment (s, &segment))
- return grub_error (GRUB_ERR_BAD_ARGUMENT, "Could not parse segment
%"PRIuGRUB_SIZE, i);
+ return grub_error (GRUB_ERR_BAD_ARGUMENT, "Could not parse segment
index %"PRIuGRUB_SIZE, i);
- if ((d->segments & (1 << idx)))
+ if ((d->segments & (1 << segment_key)))
break;
}
- if (j == size)
- return grub_error (GRUB_ERR_FILE_NOT_FOUND, "No segment for digest
%"PRIuGRUB_SIZE);
+ if (i == size)
+ return grub_error (GRUB_ERR_FILE_NOT_FOUND, "No segment for digest
\"%"PRIuGRUB_UINT64_T"\"", digest_key);
return GRUB_ERR_NONE;
}
--
2.25.1
- [CRYPTO-LUKS v1 09/19] cryptodisk: Unregister cryptomount command when removing module., (continued)
- [CRYPTO-LUKS v1 09/19] cryptodisk: Unregister cryptomount command when removing module., Glenn Washburn, 2020/07/31
- [CRYPTO-LUKS v1 10/19] fs: Fix block lists not being able to address to end of disk sometimes., Glenn Washburn, 2020/07/31
- [CRYPTO-LUKS v1 11/19] cryptodisk: Properly handle non-512 byte sized sectors., Glenn Washburn, 2020/07/31
- [CRYPTO-LUKS v1 12/19] cryptodisk: Rename total_length field in grub_cryptodisk_t to total_sectors., Glenn Washburn, 2020/07/31
- [CRYPTO-LUKS v1 13/19] fs: Allow number of blocks in block list to be optional, where length will be defaulted to the length of the device., Glenn Washburn, 2020/07/31
- [CRYPTO-LUKS v1 14/19] loopback: Add procfs entry 'loopbacks' to output configured loopback devices., Glenn Washburn, 2020/07/31
- [CRYPTO-LUKS v1 15/19] cryptodisk, luks2: Add header line to procfs entry and crypto and source device names., Glenn Washburn, 2020/07/31
- [CRYPTO-LUKS v1 16/19] cryptodisk: Add a couple comments noting the usage of a couple fields in grub_cryptodisk_t as is done for grub_disk_t., Glenn Washburn, 2020/07/31
- [CRYPTO-LUKS v1 17/19] luks2: Ensure that bit fields of grub_luks2_digest_t in luks2_parse_digest are initialized before returning., Glenn Washburn, 2020/07/31
- [CRYPTO-LUKS v1 18/19] luks2: Fix use of incorrect index and some error messages.,
Glenn Washburn <=
- [CRYPTO-LUKS v1 19/19] cryptodisk: Rename offset in grub_cryptodisk_t to offset_sectors to improve readability., Glenn Washburn, 2020/07/31
- Re: [CRYPTO-LUKS v1 00/19] Fixes and improvements for cryptodisks+luks2 and a few other things., Patrick Steinhardt, 2020/07/31