From bf19feea5cbc44e6c50d14814d00c902073d8d92 Mon Sep 17 00:00:00 2001 From: Gary Ching-Pang Lin 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 --- 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 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 --- 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