|
|
4210fa |
From f14119502ee3301e1ae80b5ab7fbe1ba46580e23 Mon Sep 17 00:00:00 2001
|
|
|
4210fa |
From: Peter Jones <pjones@redhat.com>
|
|
|
4210fa |
Date: Wed, 1 Oct 2014 22:47:20 -0400
|
|
|
4210fa |
Subject: [PATCH 65/74] Don't append an empty cert list to MokListRT if
|
|
|
4210fa |
vendor_cert_size is 0.
|
|
|
4210fa |
|
|
|
4210fa |
Signed-off-by: Peter Jones <pjones@redhat.com>
|
|
|
4210fa |
---
|
|
|
4210fa |
shim.c | 63 ++++++++++++++++++++++++++++++++++-----------------------------
|
|
|
4210fa |
1 file changed, 34 insertions(+), 29 deletions(-)
|
|
|
4210fa |
|
|
|
4210fa |
diff --git a/shim.c b/shim.c
|
|
|
4210fa |
index 4baf8b1..a282ee3 100644
|
|
|
4210fa |
--- a/shim.c
|
|
|
4210fa |
+++ b/shim.c
|
|
|
4210fa |
@@ -1698,37 +1698,42 @@ EFI_STATUS mirror_mok_list()
|
|
|
4210fa |
if (efi_status != EFI_SUCCESS)
|
|
|
4210fa |
DataSize = 0;
|
|
|
4210fa |
|
|
|
4210fa |
- FullDataSize = DataSize
|
|
|
4210fa |
- + sizeof (*CertList)
|
|
|
4210fa |
- + sizeof (EFI_GUID)
|
|
|
4210fa |
- + vendor_cert_size
|
|
|
4210fa |
- ;
|
|
|
4210fa |
- FullData = AllocatePool(FullDataSize);
|
|
|
4210fa |
- if (!FullData) {
|
|
|
4210fa |
- perror(L"Failed to allocate space for MokListRT\n");
|
|
|
4210fa |
- return EFI_OUT_OF_RESOURCES;
|
|
|
4210fa |
- }
|
|
|
4210fa |
- p = FullData;
|
|
|
4210fa |
+ if (vendor_cert_size) {
|
|
|
4210fa |
+ FullDataSize = DataSize
|
|
|
4210fa |
+ + sizeof (*CertList)
|
|
|
4210fa |
+ + sizeof (EFI_GUID)
|
|
|
4210fa |
+ + vendor_cert_size
|
|
|
4210fa |
+ ;
|
|
|
4210fa |
+ FullData = AllocatePool(FullDataSize);
|
|
|
4210fa |
+ if (!FullData) {
|
|
|
4210fa |
+ perror(L"Failed to allocate space for MokListRT\n");
|
|
|
4210fa |
+ return EFI_OUT_OF_RESOURCES;
|
|
|
4210fa |
+ }
|
|
|
4210fa |
+ p = FullData;
|
|
|
4210fa |
|
|
|
4210fa |
- if (efi_status == EFI_SUCCESS && DataSize > 0) {
|
|
|
4210fa |
- CopyMem(p, Data, DataSize);
|
|
|
4210fa |
- p += DataSize;
|
|
|
4210fa |
+ if (efi_status == EFI_SUCCESS && DataSize > 0) {
|
|
|
4210fa |
+ CopyMem(p, Data, DataSize);
|
|
|
4210fa |
+ p += DataSize;
|
|
|
4210fa |
+ }
|
|
|
4210fa |
+ CertList = (EFI_SIGNATURE_LIST *)p;
|
|
|
4210fa |
+ p += sizeof (*CertList);
|
|
|
4210fa |
+ CertData = (EFI_SIGNATURE_DATA *)p;
|
|
|
4210fa |
+ p += sizeof (EFI_GUID);
|
|
|
4210fa |
+
|
|
|
4210fa |
+ CertList->SignatureType = EFI_CERT_X509_GUID;
|
|
|
4210fa |
+ CertList->SignatureListSize = vendor_cert_size
|
|
|
4210fa |
+ + sizeof (*CertList)
|
|
|
4210fa |
+ + sizeof (*CertData)
|
|
|
4210fa |
+ -1;
|
|
|
4210fa |
+ CertList->SignatureHeaderSize = 0;
|
|
|
4210fa |
+ CertList->SignatureSize = vendor_cert_size + sizeof (EFI_GUID);
|
|
|
4210fa |
+
|
|
|
4210fa |
+ CertData->SignatureOwner = SHIM_LOCK_GUID;
|
|
|
4210fa |
+ CopyMem(p, vendor_cert, vendor_cert_size);
|
|
|
4210fa |
+ } else {
|
|
|
4210fa |
+ FullDataSize = DataSize;
|
|
|
4210fa |
+ FullData = Data;
|
|
|
4210fa |
}
|
|
|
4210fa |
- CertList = (EFI_SIGNATURE_LIST *)p;
|
|
|
4210fa |
- p += sizeof (*CertList);
|
|
|
4210fa |
- CertData = (EFI_SIGNATURE_DATA *)p;
|
|
|
4210fa |
- p += sizeof (EFI_GUID);
|
|
|
4210fa |
-
|
|
|
4210fa |
- CertList->SignatureType = EFI_CERT_X509_GUID;
|
|
|
4210fa |
- CertList->SignatureListSize = vendor_cert_size
|
|
|
4210fa |
- + sizeof (*CertList)
|
|
|
4210fa |
- + sizeof (*CertData)
|
|
|
4210fa |
- -1;
|
|
|
4210fa |
- CertList->SignatureHeaderSize = 0;
|
|
|
4210fa |
- CertList->SignatureSize = vendor_cert_size + sizeof (EFI_GUID);
|
|
|
4210fa |
-
|
|
|
4210fa |
- CertData->SignatureOwner = SHIM_LOCK_GUID;
|
|
|
4210fa |
- CopyMem(p, vendor_cert, vendor_cert_size);
|
|
|
4210fa |
|
|
|
4210fa |
efi_status = uefi_call_wrapper(RT->SetVariable, 5, L"MokListRT",
|
|
|
4210fa |
&shim_lock_guid,
|
|
|
4210fa |
--
|
|
|
4210fa |
1.9.3
|
|
|
4210fa |
|