Blame SOURCES/cryptsetup-2.3.7-Reenc-keyslot-must-have-key_size-1.patch

33f49e
From 7eeb45537af1db8a29b4e2956545ccde8ad13d32 Mon Sep 17 00:00:00 2001
33f49e
From: Milan Broz <gmazyland@gmail.com>
33f49e
Date: Sun, 2 Jan 2022 16:57:31 +0100
33f49e
Subject: [PATCH 12/28] Reenc keyslot must have key_size == 1.
33f49e
33f49e
---
33f49e
 lib/luks2/luks2_keyslot_reenc.c | 10 ++++++++--
33f49e
 1 file changed, 8 insertions(+), 2 deletions(-)
33f49e
33f49e
diff --git a/lib/luks2/luks2_keyslot_reenc.c b/lib/luks2/luks2_keyslot_reenc.c
33f49e
index 1956fe27..9da7007d 100644
33f49e
--- a/lib/luks2/luks2_keyslot_reenc.c
33f49e
+++ b/lib/luks2/luks2_keyslot_reenc.c
33f49e
@@ -230,7 +230,7 @@ static int reenc_keyslot_dump(struct crypt_device *cd, int keyslot)
33f49e
 
33f49e
 static int reenc_keyslot_validate(struct crypt_device *cd, json_object *jobj_keyslot)
33f49e
 {
33f49e
-	json_object *jobj_mode, *jobj_area, *jobj_type, *jobj_shift_size, *jobj_hash, *jobj_sector_size, *jobj_direction;
33f49e
+	json_object *jobj_mode, *jobj_area, *jobj_type, *jobj_shift_size, *jobj_hash, *jobj_sector_size, *jobj_direction, *jobj_key_size;
33f49e
 	const char *mode, *type, *direction;
33f49e
 	uint32_t sector_size;
33f49e
 	uint64_t shift_size;
33f49e
@@ -250,12 +250,18 @@ static int reenc_keyslot_validate(struct crypt_device *cd, json_object *jobj_key
33f49e
 	    !json_object_object_get_ex(jobj_area, "type", &jobj_type))
33f49e
 		return -EINVAL;
33f49e
 
33f49e
+	jobj_key_size = json_contains(cd, jobj_keyslot, "", "reencrypt keyslot", "key_size", json_type_int);
33f49e
 	jobj_mode = json_contains(cd, jobj_keyslot, "", "reencrypt keyslot", "mode", json_type_string);
33f49e
 	jobj_direction = json_contains(cd, jobj_keyslot, "", "reencrypt keyslot", "direction", json_type_string);
33f49e
 
33f49e
-	if (!jobj_mode || !jobj_direction)
33f49e
+	if (!jobj_mode || !jobj_direction || !jobj_key_size)
33f49e
 		return -EINVAL;
33f49e
 
33f49e
+	if (!validate_json_uint32(jobj_key_size) || crypt_jobj_get_uint32(jobj_key_size) != 1) {
33f49e
+		log_dbg(cd, "Illegal reencrypt key size.");
33f49e
+		return -EINVAL;
33f49e
+	}
33f49e
+
33f49e
 	mode = json_object_get_string(jobj_mode);
33f49e
 	type = json_object_get_string(jobj_type);
33f49e
 	direction = json_object_get_string(jobj_direction);
33f49e
-- 
33f49e
2.27.0
33f49e