From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1kiZg3-0004US-O5 for mharc-grub-devel@gnu.org; Fri, 27 Nov 2020 04:04:27 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:32832) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kiZg1-0004T3-Op for grub-devel@gnu.org; Fri, 27 Nov 2020 04:04:25 -0500 Received: from mail-lf1-x129.google.com ([2a00:1450:4864:20::129]:38180) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kiZg0-0005PH-60 for grub-devel@gnu.org; Fri, 27 Nov 2020 04:04:25 -0500 Received: by mail-lf1-x129.google.com with SMTP id s27so6035866lfp.5 for ; Fri, 27 Nov 2020 01:04:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=efficientek-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/HaF1rSbwGKIK/d3AhYhrzf0ZsEsgzMiias651E1f5A=; b=HOL3qTyiwEmGn2ui8AdsyDcrBa5qDsOp7YuNb7SSyTEf4zLbRNGJcvgRsLmsDMOXo1 YqRbqqfHgkJGfdXRtOk3ZFYA9znCUoNS1zM3EMAUesCYipmKRlkGCG9/qt/fpGZBjYXG 5TGOEQ70i3P+K7/WE680beF62A5s9asNVTJ7cbN1iAJ5QROlz8o0YCgX2JraaOfzlrKK 4ZQfhMW24SbUCMjKiiL51SY4VIe2oqPW3Um3MW8893z6N3ZwPIbip+f1PjrEWJIewM0E /CjrN38efAzQou5cUESNbzAQ8YMSNDOD+bdVOd/4PqxSUWP/2QBNCTrGDeoO/+Amu6/B mU1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/HaF1rSbwGKIK/d3AhYhrzf0ZsEsgzMiias651E1f5A=; b=HVrI2UHIZWOSUDCYGn9V5zUoL4ENXfu3St5hbUMG4a+aXhHn2iQF1mnaPqySZ1lVqW OL7XjMRAvhXMP5K4DxoDClYxtRY742V1yXdMV07m9G6vHBVgy/veMMZPgUucW6SfB9sV S6KJ3JFN7WlCszYnZV5eW2xlLKekTLzNSZMi2oHX/ldkMYo1gf/FAp5EHIwYyGUa4pez QwGUbs0RFO0IW5/8L9rAK32WmwdCP/sjTxgR8CIEW+xa12uIO2izfzG8JA0SKJNQ3QPK ki1TRNGhN3CXe5ldemIcXqhRKaVjfA/jvMlXA0J0NI9YtDDL8+J2OWJzw8PO+9dsNhL4 q7KQ== X-Gm-Message-State: AOAM530B9bUn+71nqKfjw4aeMGMqpkVc6qUN7lypeCPxpw/MKSiwemT4 Rhjz7TgMU5H77oGuVkUqBICkDtfsGud+mA== X-Google-Smtp-Source: ABdhPJxsT6bRaYRux7eDZCBh/HGLEFZ3eKMO3Pmk4aMEQi/mB5sek1Bvce6fxDHiQhbc2UAJ4wPD3g== X-Received: by 2002:ac2:5466:: with SMTP id e6mr2952297lfn.17.1606467862098; Fri, 27 Nov 2020 01:04:22 -0800 (PST) Received: from localhost.localdomain ([136.49.211.192]) by smtp.gmail.com with ESMTPSA id g2sm880675lja.87.2020.11.27.01.04.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Nov 2020 01:04:21 -0800 (PST) From: Glenn Washburn To: grub-devel@gnu.org Cc: Patrick Steinhardt , Daniel Kiper , Glenn Washburn Subject: [PATCH v6 01/12] luks2: Add slot_key member to struct grub_luks2_keyslot/segment/digest Date: Fri, 27 Nov 2020 03:03:33 -0600 Message-Id: <6262aefe9f1fe7e21d1c34518a70cbd3cc15573b.1606467382.git.development@efficientek.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a00:1450:4864:20::129; envelope-from=development@efficientek.com; helo=mail-lf1-x129.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 27 Nov 2020 09:04:26 -0000 This allows code using these structs to know the named key associated with these json data structures. In the future we can use these to provide better error messages to the user. Get rid of idx variable in luks2_get_keyslot which was overloaded to be used for both keyslot and segment slot keys. Signed-off-by: Glenn Washburn --- grub-core/disk/luks2.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/grub-core/disk/luks2.c b/grub-core/disk/luks2.c index d96764a02..ab2c31dcd 100644 --- a/grub-core/disk/luks2.c +++ b/grub-core/disk/luks2.c @@ -65,6 +65,7 @@ typedef struct grub_luks2_header grub_luks2_header_t; struct grub_luks2_keyslot { + grub_uint64_t slot_key; grub_int64_t key_size; grub_int64_t priority; struct @@ -103,6 +104,7 @@ typedef struct grub_luks2_keyslot grub_luks2_keyslot_t; struct grub_luks2_segment { + grub_uint64_t slot_key; grub_uint64_t offset; const char *size; const char *encryption; @@ -112,6 +114,7 @@ typedef struct grub_luks2_segment grub_luks2_segment_t; struct grub_luks2_digest { + grub_uint64_t slot_key; /* Both keyslots and segments are interpreted as bitfields here */ grub_uint64_t keyslots; grub_uint64_t segments; @@ -259,12 +262,11 @@ luks2_get_keyslot (grub_luks2_keyslot_t *k, grub_luks2_digest_t *d, grub_luks2_s { grub_json_t keyslots, keyslot, digests, digest, segments, segment; grub_size_t i, size; - grub_uint64_t idx; /* Get nth keyslot */ if (grub_json_getvalue (&keyslots, root, "keyslots") || grub_json_getchild (&keyslot, &keyslots, keyslot_idx) || - grub_json_getuint64 (&idx, &keyslot, NULL) || + grub_json_getuint64 (&k->slot_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, keyslot_idx); @@ -276,11 +278,12 @@ luks2_get_keyslot (grub_luks2_keyslot_t *k, grub_luks2_digest_t *d, grub_luks2_s for (i = 0; i < size; i++) { if (grub_json_getchild (&digest, &digests, i) || + grub_json_getuint64 (&d->slot_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); - if ((d->keyslots & (1 << idx))) + if ((d->keyslots & (1 << k->slot_key))) break; } if (i == size) @@ -293,12 +296,12 @@ luks2_get_keyslot (grub_luks2_keyslot_t *k, grub_luks2_digest_t *d, grub_luks2_s for (i = 0; i < size; i++) { if (grub_json_getchild (&segment, &segments, i) || - grub_json_getuint64 (&idx, &segment, NULL) || + grub_json_getuint64 (&s->slot_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); - if ((d->segments & (1 << idx))) + if ((d->segments & (1 << s->slot_key))) break; } if (i == size) -- 2.27.0