From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1kmlkn-0004yL-LE for mharc-grub-devel@gnu.org; Tue, 08 Dec 2020 17:46:41 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36842) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kmlki-0004oE-K5 for grub-devel@gnu.org; Tue, 08 Dec 2020 17:46:36 -0500 Received: from mail-ot1-x32c.google.com ([2607:f8b0:4864:20::32c]:43413) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kmlkX-0000jg-ML for grub-devel@gnu.org; Tue, 08 Dec 2020 17:46:36 -0500 Received: by mail-ot1-x32c.google.com with SMTP id q25so323087otn.10 for ; Tue, 08 Dec 2020 14:46:18 -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=cz8TWUShThds6WtJGOb4x5pEIBTucJuRZhM+GQIgKiU=; b=0LT8ZnjMuqASjH3jL3NOZ4c8VRq/Bgt1n5yvg/mMeGmdw7nybfjS1HPCenuU5d1hK9 XvzRnPA+rfI+1pRoc6wI2P/fvbso+fmTnJFoPFXflECwPh4JlBV2INEm1NxRVwgY0IEh L077n7j8q01jSRqtTBTMVirWAmYla2b4Ci5M/CurAWtG73UTAUd0K9wFuKNKHpWKMUVW YwVnCtHjTM3xjSc1nQheNWEHvwSgHbpHECePBHSriYXXi2YiLuGd4r2LnKmi7+mdpKja kUOAuRICXv1kuZJRtT6vkvfA5+h+zA1EzkshVorAaNVl87oSCbiKmwVD9aPlHWU64226 vYQQ== 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=cz8TWUShThds6WtJGOb4x5pEIBTucJuRZhM+GQIgKiU=; b=AUf98VThsRNhjJzvMmnyf9eeen+c4/tLCIfW87F6UGEElbNf/JG2asemWko2aYIYfd qHcqIMCrUfPCIa6mVvqu4Zwsb7FG3+g55+wPtnZpaWGLt78Vbq/cKDtXQed0EXw+AIGI niGZyXxyKzN6JIQTUm80mjiDrXHuQWRgzPJEsA09VXvwzMjJwtjfGC88U895j776ZSq1 R9s1VnfaMJ7vzioDDNDJoG3yuI7iHfL9NBa2Fx2rhLsxHsHGg6WgAHQYapjFXOxmGzqU gxsn6Avo5oX8kb3sadolV7k3prf3AA348CFTTMXx0vmq/5F6b0agTvCSI5fCSgItU2vE mlyg== X-Gm-Message-State: AOAM533UYg/2QGkka5b24fUp5w63kGub6/kEocgopGdTRVd/hnLow/sg 60vsHL80y68pdGFxH1CgjGcqQy7uYJk33g== X-Google-Smtp-Source: ABdhPJynaQEgptNLAwozI0Hd559f+7+SYAbmloyDme9IChynZKJRinHyLC9DV7WPMtyS8U+YVL9nvA== X-Received: by 2002:a05:6830:1e1c:: with SMTP id s28mr289077otr.82.1607467577654; Tue, 08 Dec 2020 14:46:17 -0800 (PST) Received: from crass-HP-ZBook-15-G2.attlocal.net ([136.49.211.192]) by smtp.gmail.com with ESMTPSA id v8sm45538otp.10.2020.12.08.14.46.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Dec 2020 14:46:17 -0800 (PST) From: Glenn Washburn To: grub-devel@gnu.org Cc: Patrick Steinhardt , Daniel Kiper , Glenn Washburn Subject: [PATCH v8 06/18] luks2: Add idx member to struct grub_luks2_keyslot/segment/digest Date: Tue, 8 Dec 2020 16:45:37 -0600 Message-Id: <56d4c397a1752b66376a3faf5e10776cb66894e8.1607466704.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=2607:f8b0:4864:20::32c; envelope-from=development@efficientek.com; helo=mail-ot1-x32c.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: Tue, 08 Dec 2020 22:46:36 -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 local 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 | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/grub-core/disk/luks2.c b/grub-core/disk/luks2.c index 9b19d35c1..67b1823d3 100644 --- a/grub-core/disk/luks2.c +++ b/grub-core/disk/luks2.c @@ -65,6 +65,8 @@ typedef struct grub_luks2_header grub_luks2_header_t; struct grub_luks2_keyslot { + /* The integer key to the associative array of keyslots */ + grub_uint64_t idx; grub_int64_t key_size; grub_int64_t priority; struct @@ -103,6 +105,7 @@ typedef struct grub_luks2_keyslot grub_luks2_keyslot_t; struct grub_luks2_segment { + grub_uint64_t idx; grub_uint64_t offset; const char *size; const char *encryption; @@ -112,6 +115,7 @@ typedef struct grub_luks2_segment grub_luks2_segment_t; struct grub_luks2_digest { + grub_uint64_t idx; /* Both keyslots and segments are interpreted as bitfields here */ grub_uint64_t keyslots; grub_uint64_t segments; @@ -261,12 +265,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->idx, &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); @@ -278,11 +281,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->idx, &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->idx))) break; } if (i == size) @@ -295,12 +299,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->idx, &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->idx))) break; } if (i == size) -- 2.27.0