diff options
Diffstat (limited to 'debian/patches/CVE-2014-3677.patch')
| -rw-r--r-- | debian/patches/CVE-2014-3677.patch | 75 |
1 files changed, 0 insertions, 75 deletions
diff --git a/debian/patches/CVE-2014-3677.patch b/debian/patches/CVE-2014-3677.patch deleted file mode 100644 index 4d05f05c..00000000 --- a/debian/patches/CVE-2014-3677.patch +++ /dev/null @@ -1,75 +0,0 @@ -diff --git a/MokManager.c b/MokManager.c -index 50cb9d7..73d8ff4 100644 ---- a/MokManager.c -+++ b/MokManager.c -@@ -100,8 +100,18 @@ static UINT32 count_keys(void *Data, UINTN DataSize) - EFI_GUID HashType = EFI_CERT_SHA256_GUID; - UINTN dbsize = DataSize; - UINT32 MokNum = 0; -+ void *end = Data + DataSize; - - while ((dbsize > 0) && (dbsize >= CertList->SignatureListSize)) { -+ -+ /* Use ptr arithmetics to ensure bounded access. Do not allow 0 -+ * SignatureListSize that will cause endless loop. -+ */ -+ if ((void *)(CertList + 1) > end || CertList->SignatureListSize == 0) { -+ console_notify(L"Invalid MOK detected! Ignoring MOK List."); -+ return 0; -+ } -+ - if ((CompareGuid (&CertList->SignatureType, &CertType) != 0) && - (CompareGuid (&CertList->SignatureType, &HashType) != 0)) { - console_notify(L"Doesn't look like a key or hash"); -@@ -137,6 +147,7 @@ static MokListNode *build_mok_list(UINT32 num, void *Data, UINTN DataSize) { - EFI_GUID HashType = EFI_CERT_SHA256_GUID; - UINTN dbsize = DataSize; - UINTN count = 0; -+ void *end = Data + DataSize; - - list = AllocatePool(sizeof(MokListNode) * num); - -@@ -146,6 +157,11 @@ static MokListNode *build_mok_list(UINT32 num, void *Data, UINTN DataSize) { - } - - while ((dbsize > 0) && (dbsize >= CertList->SignatureListSize)) { -+ /* CertList out of bounds? */ -+ if ((void *)(CertList + 1) > end || CertList->SignatureListSize == 0) { -+ FreePool(list); -+ return NULL; -+ } - if ((CompareGuid (&CertList->SignatureType, &CertType) != 0) && - (CompareGuid (&CertList->SignatureType, &HashType) != 0)) { - dbsize -= CertList->SignatureListSize; -@@ -165,10 +181,22 @@ static MokListNode *build_mok_list(UINT32 num, void *Data, UINTN DataSize) { - Cert = (EFI_SIGNATURE_DATA *) (((UINT8 *) CertList) + - sizeof (EFI_SIGNATURE_LIST) + CertList->SignatureHeaderSize); - -+ /* Cert out of bounds? */ -+ if ((void *)(Cert + 1) > end || CertList->SignatureSize <= sizeof(EFI_GUID)) { -+ FreePool(list); -+ return NULL; -+ } -+ - list[count].MokSize = CertList->SignatureSize - sizeof(EFI_GUID); - list[count].Mok = (void *)Cert->SignatureData; - list[count].Type = CertList->SignatureType; - -+ /* MOK out of bounds? */ -+ if (list[count].MokSize > end - (void *)list[count].Mok) { -+ FreePool(list); -+ return NULL; -+ } -+ - count++; - dbsize -= CertList->SignatureListSize; - CertList = (EFI_SIGNATURE_LIST *) ((UINT8 *) CertList + -@@ -449,6 +477,8 @@ static EFI_STATUS list_keys (void *KeyList, UINTN KeyListSize, CHAR16 *title) - } - - MokNum = count_keys(KeyList, KeyListSize); -+ if (MokNum == 0) -+ return 0; - keys = build_mok_list(MokNum, KeyList, KeyListSize); - - if (!keys) { |
