From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1kh4Kd-0008Do-Uw for mharc-grub-devel@gnu.org; Mon, 23 Nov 2020 00:24:07 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:40540) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kh4Kb-0008CD-8L for grub-devel@gnu.org; Mon, 23 Nov 2020 00:24:05 -0500 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]:40103) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kh4KZ-0006Sa-LC for grub-devel@gnu.org; Mon, 23 Nov 2020 00:24:05 -0500 Received: by mail-wr1-x42c.google.com with SMTP id m6so17312236wrg.7 for ; Sun, 22 Nov 2020 21:24:03 -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=OhuMi83oN38Sn0aJqtzWZEdp3oa2p0xhBzDLN/H6EGd3gJ/NMjdxDgPC/YHFjcmrvr ShYN9JDdUSGfHho0KDEisyCdkrbwJKsP/Xnmots1exH4WHBBE5MDbUV3DUd+nFcYmxOu KKNL4vV5Q95P+fjyj4dMFZ7fpaFQ6ZzntpYbhzcntKVM9Iw9ezsP3xPIN8kYcj7jWBcs D8i+nTcEAcY7uuRXf8gj/RcMUzxLGNewfjG4WOSvNzLEdOMSOOM/YW4pjophDVxE4HLp JgeK3IBG9LKV7D/PQg7bZ/NltbbYHFuhw/G/Y1MsXZkUD4K0DB9lUd2bE0mv/RjhfoOv 3MHw== 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=lVHifJIDEyIsgfPSdIY25mUcewlnZ3wqCgy1QuAywFNrPth8lVCyqT0vSZZtK3Ngn8 M9puOdSfrFzzicIyuy1VNSCjpV8GWx4IrN6z5DpbQvPTmDpwispqUMIlZOhNe8/ArNX6 qPJ9Kw72tjF1xeLZZ5CEfWWp2L79QeRtvNEHlSnZ5dbpF/nX8PY5VY1D9XLYe6QmV7iB 1P+qepEHE5De1ADHsTzuhWLKlgvPnBMYFo3n9i43JHeTesLogPkCbq47+tUqCfqOfzhn IbJbW0AqpRltJaZj7GUIiSF3aylExbuwYK9XR7ORXIi17HEKaDOVkc2gV36Cg5AqVkKK SqZQ== X-Gm-Message-State: AOAM532fSCN9y2M9U+TwZGjM9pAhk+R7roRgx/zh/9EOv6juVnEhk5x9 YGJUntQLA3JSJTabtrexj0ZGnE95jscf9w== X-Google-Smtp-Source: ABdhPJw2NNIIwVXsSE6PB0ci2zpO1uBycEdA6cEiYcpE9ZYTa+mG8V/p4m6z92o+oHbxAeFvMys8kg== X-Received: by 2002:adf:f349:: with SMTP id e9mr28251697wrp.110.1606109041887; Sun, 22 Nov 2020 21:24:01 -0800 (PST) Received: from localhost.localdomain ([136.49.211.192]) by smtp.gmail.com with ESMTPSA id f16sm11631780wmh.7.2020.11.22.21.23.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Nov 2020 21:24:01 -0800 (PST) From: Glenn Washburn To: grub-devel@gnu.org Cc: Patrick Steinhardt , Daniel Kiper , Glenn Washburn Subject: [PATCH v5 01/11] luks2: Add slot_key member to struct grub_luks2_keyslot/segment/digest Date: Sun, 22 Nov 2020 23:23:14 -0600 Message-Id: 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::42c; envelope-from=development@efficientek.com; helo=mail-wr1-x42c.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: Mon, 23 Nov 2020 05:24:05 -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