File mokutil-fix-hash-list-size.patch of Package mokutil

From bf19feea5cbc44e6c50d14814d00c902073d8d92 Mon Sep 17 00:00:00 2001
From: Gary Ching-Pang Lin <glin@suse.com>
Date: Wed, 12 Feb 2014 11:38:24 +0800
Subject: [PATCH 1/2] Fix the signature list size calculation

While merging the hashes into the previous request, the list size
mistakenly included the signature list header, and this made the
request invalid.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
---
 src/mokutil.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/mokutil.c b/src/mokutil.c
index dbec25b..b706c80 100644
--- a/src/mokutil.c
+++ b/src/mokutil.c
@@ -1374,6 +1374,9 @@ issue_hash_request (const char *hash_str, MokRequest req,
 
 	old_req.VariableName = req_name;
 	old_req.VendorGuid = SHIM_LOCK_GUID;
+
+	list_size = sizeof(EFI_SIGNATURE_LIST) + sizeof(efi_guid_t) + hash_size;
+
 	if (read_variable (&old_req) == EFI_SUCCESS) {
 		int i;
 		list_size += old_req.DataSize;
@@ -1388,13 +1391,12 @@ issue_hash_request (const char *hash_str, MokRequest req,
 			if (efi_guidcmp (mok_list[i].header->SignatureType,
 					 hash_type) == 0) {
 				merge_ind = i;
+				list_size -= sizeof(EFI_SIGNATURE_LIST);
 				break;
 			}
 		}
 	}
 
-	list_size += sizeof(EFI_SIGNATURE_LIST) + sizeof(efi_guid_t) + hash_size;
-
 	new_list = malloc (list_size);
 	if (!new_list) {
 		fprintf (stderr, "Failed to allocate space for %s\n", req_name);
-- 
1.8.4.5


From 0c8e542eaaa1f3f8be2198806a5bc370813b4d81 Mon Sep 17 00:00:00 2001
From: Gary Ching-Pang Lin <glin@suse.com>
Date: Wed, 12 Feb 2014 15:24:23 +0800
Subject: [PATCH 2/2] Update the list size after deleting a hash

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
---
 src/mokutil.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/mokutil.c b/src/mokutil.c
index b706c80..935cb94 100644
--- a/src/mokutil.c
+++ b/src/mokutil.c
@@ -501,6 +501,7 @@ delete_data_from_list (efi_guid_t type, void *data, uint32_t data_size,
 				start += sizeof(EFI_SIGNATURE_LIST) + sig_size * del_ind;
 				end = start + sig_size;
 				total -= sig_size;
+				list[i].header->SignatureListSize -= sig_size;
 				remain += sig_list_size - sizeof(EFI_SIGNATURE_LIST) -
 					  (del_ind + 1) * sig_size;
 			}
-- 
1.8.4.5

openSUSE Build Service is sponsored by