Commit Graph

1510 Commits

Author SHA1 Message Date
Mathieu Trudel-Lapierre
5998f019f8 New upstream release. 2016-09-22 10:15:26 -04:00
Mathieu Trudel-Lapierre
62f0afa2ec Import upstream version 0.9+1474479173.6c180c6 2016-09-21 20:29:42 -04:00
Mathieu Trudel-Lapierre
6c180c6004 shim: verify Extended Key Usage flags
For starters; don't allow the "module signing" OID; which ought to
only ever be used for signing kernel modules, not signing EFI binaries.

Signed-off-by: Mathieu Trudel-Lapierre <mathieu.trudel-lapierre@canonical.com>
2016-09-21 13:32:53 -04:00
Mathieu Trudel-Lapierre
8af6e22814 MokManager: list Extended Key Usage OIDs
Signed-off-by: Mathieu Trudel-Lapierre <mathieu.trudel-lapierre@canonical.com>
2016-09-21 13:32:53 -04:00
Helen Koike
e3ef28acdf [ Helen Koike ]
* debian/copyright: add OpenSSL license 
[ Mathieu Trudel-Lapierre ]
* debian/copyright: patches should be BSD, like the rest of the upstream
  code.
2016-09-20 09:47:26 -04:00
Steve Langasek
dd00e8761d Merge git into history 2016-09-19 15:42:43 -07:00
Steve Langasek
d7e4fd12a1 Merging shared upstream rev into target branch. 2016-09-19 15:36:28 -07:00
Steve Langasek
6b1d02e112 Prepared upstream tree for merging into target branch. 2016-09-19 15:36:28 -07:00
Steve Langasek
6af9d134b8 New upstream release (fix-up commit) 2016-09-19 15:36:20 -07:00
Steve Langasek
1442bd7097 Import upstream version 0.9+1465500757.14a5905 2016-09-19 15:07:08 -07:00
Helen Koike
879d307f86 debian/copyright: add OpenSSL license 2016-09-15 11:22:31 -03:00
Gary Lin
903674a2c4 MokManager: free new_data after use
new_data in write_db() wasn't freed after SetVariable.

Signed-off-by: Gary Lin <glin@suse.com>
2016-09-09 12:07:26 -04:00
Gary Lin
e21068b499 MokManager: Try APPEND_WRITE first
Try to append the MOK/MOKX list first and then fallback to the normal
SetVariable if the firmware doesn't support EFI_VARIABLE_APPEND_WRITE.

Signed-off-by: Gary Lin <glin@suse.com>
2016-09-09 12:07:26 -04:00
Gary Lin
5597a493e2 MokManager: Remove the usage of APPEND_WRITE
We got the bug report about the usage of APPEND_WRITE that may cause the
failure when writing a variable in Lenovo machines. Although
EFI_VARIABLE_APPEND_WRITE already exists in the UEFI spec for years,
unfortunately, some vendors just ignore it and never implement the
attribute. This commit removes the usage of EFI_VARIABLE_APPEND_WRITE to
make MokManager work on those machines.

https://github.com/rhinstaller/shim/issues/55

Signed-off-by: Gary Lin <glin@suse.com>
2016-09-09 12:07:26 -04:00
Peter Jones
af13b3efc9 Fix up a merge error in 467878f3e0.
In the branch I wrote the code on, "size" was a thing.  On this branch
it isn't.

Signed-off-by: Peter Jones <pjones@redhat.com>
2016-09-09 12:07:26 -04:00
Peter Jones
2de084689f verify_buffer: check that the value of cert->Hdr.dwLength is reasonable
Signed-off-by: Peter Jones <pjones@redhat.com>
2016-09-09 11:16:17 -04:00
Peter Jones
b8e27b3cfe Minor formatting fix
Signed-off-by: Peter Jones <pjones@redhat.com>
2016-09-06 15:19:08 -04:00
Sachin Agrawal
d241bbbdbf Use authenticode signature length from WIN_CERTIFICATE structure.
Authenticode Certificate length is available in Certificate Table
(inside PE header) and also in signature header(WIN_CERTIFICATE) itself.
Code in 'check_backlist()' method uses length from signature header,
whereas, AuthenticodeVerify() call inside 'verify_buffer()' method uses
the length in signature header. This causes a security vulnerability issue :

Good Scenario : Assume shim1.crt is used for signing grub.efi and
shim1.crt is embedded inside shim.efi. Also, assume shim1.crt got
compromised and therefore it was added in 'dbx' database. Now, when
shim.efi will attempt to load grub.efi, it will fail loading with
log message "Binary is blacklisted" because 'check_blacklist' call
will detect the presence of 'shim1.crt' in 'dbx'.

Vulnerable Scenario : Similar as above. Add 'shim1.crt' in dbx database.
Also, tamper the earlier signed grub.efi file by placing 0x0000 in the
WIN_CERTIFICATE.dwLength.
(Open grub.efi/vmlinuz signed binary with hex editor.
 Go to 0x128 address and read out the address from 0x128 until
 0x12B in little Indian order from right to left.
 Jump to the address from 0x128 address area.
 First 8bytes are the signature header area which consist of
 signature size(4bytes), revision(2bytes) and type(2bytes).
 So tamper the first 4 bytes for signature size and save the binary.
)
With this tampered grub.efi, shim.efi loads it successfully because
'check_blacklist()' call fails to detect the presence of shim1.crt in 'dbx'
database.


Signed-off-by: Sachin Agrawal <sachin.agrawal@intel.com>
2016-09-06 15:06:51 -04:00
Gary Lin
04d581c303 Update the CryptLib
Update to the edk2 commit 8ff7187cfd998d2b6db43075a4a7908281b6da00

Signed-off-by: Gary Lin <glin@suse.com>
2016-09-06 15:05:36 -04:00
Gary Lin
8dcfecc6c7 Update to openssl 1.0.2h
Signed-off-by: Gary Lin <glin@suse.com>
2016-09-06 15:05:36 -04:00
Gary Lin
d8b0e8e0ce Update the openssl update script to 1.0.2h
Signed-off-by: Gary Lin <glin@suse.com>
2016-09-06 15:05:36 -04:00
Gary Lin
0297aa3cf3 Update openssl to 1.0.2g
Signed-off-by: Gary Lin <glin@suse.com>
2016-09-06 15:05:36 -04:00
Gary Lin
7b9281af14 Update the CryptLib
Update to the edk2 commit 5e2318dd37a51948aaf845c7d920b11f47cdcfe6

Signed-off-by: Gary Lin <glin@suse.com>
2016-09-06 15:05:36 -04:00
Gary Lin
e769628e0d Update the openssl b_print patch
Signed-off-by: Gary Lin <glin@suse.com>
2016-09-06 15:05:36 -04:00
Gary Lin
afaf0a4205 Amend the CryptLib update scripts for openssl 1.0.2g
Also update the path to the openssl headers.

Signed-off-by: Gary Lin <glin@suse.com>
2016-09-06 15:05:36 -04:00
Gary Lin
e571428e21 Update to openssl to 1.0.2e
Also update Cryptlib to edk2 r19218
- Undefine NO_BUILTIN_VA_FUNCS in Cryptlib/OpenSSL/ for x86_64 to use
  the gcc builtins and remove all EFIAPI from the functions
- Move the most of defines into the headers instead of Makefile
- Remove the global variable 'timeval'
- Remove the unused code: crypto/pqueue/* and crypto/ts/*
- Include bn.h in MokManager.c due to the changes in openssl

Signed-off-by: Gary Lin <glin@suse.com>
2016-09-06 15:05:34 -04:00
Benjamin Antin
7052e75307 Don't close file twice in should_use_fallback error path
When fallback.efi is not present, the should_use_fallback error path
attempts to close a file that has already been closed, resulting in a
hang. This issue only affects certain systems.

This is a regression from version 0.8 and was introduced by commit
4794822.

Signed-off-by: Benjamin Antin <ben.antin@endlessm.com>
2016-09-06 14:57:33 -04:00
Gary Lin
cc1fe3c669 shim: remove unused variable
Fix the compilation error from gcc:

shim.c: In function ‘handle_image’:
shim.c:1121:15: error: unused variable ‘size’ [-Werror=unused-variable]
  unsigned int size;
               ^~~~

Signed-off-by: Gary Lin <glin@suse.com>
2016-09-06 14:56:36 -04:00
Morris
937503156b fix: filter objcopy version
see comments here:
  d9a4c912c0
2016-09-06 14:53:43 -04:00
Lans Zhang
9249fc2849 Fix the size of MokDBState
MokDBState is a 8-bit unsigned integer. Looks like a typo here.

Signed-off-by: Lans Zhang <jia.zhang@windriver.com>
2016-09-06 14:50:52 -04:00
Gary Ching-Pang Lin
3d79bcb265 Add the optional HTTPBoot support
This commit adds the basic support for HTTPBoot, i.e. to fetch
the next stage loader with the HTTP protocol.

It requires gnu-efi >= 3.0.3 to support the URI device path and
Ip4Config2 or Ip6Config protocol support in the UEFI implementation.

To build shim.efi with HTTPBoot support:
make ENABLE_HTTPBOOT=1 shim.efi

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2016-09-06 14:49:52 -04:00
Gary Ching-Pang Lin
8438ae7a01 Add HTTP and IpConfig headers
Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2016-09-06 14:49:52 -04:00
Gary Ching-Pang Lin
24c5904bec Make translate_slashes() public
Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2016-09-06 14:49:52 -04:00
Peter Jones
467878f3e0 read_header/handle_image: treat uninitialized file alignment as PAGE_SIZE 2016-09-06 14:44:50 -04:00
Peter Jones
47f3a65eda Improve BOOT${ARCH}.CSV support.
Signed-off-by: Peter Jones <pjones@redhat.com>
2016-09-06 14:39:15 -04:00
Peter Jones
6cbcfb727e Make LIB_PATH and EFI_PATH per-arch.
Signed-off-by: Peter Jones <pjones@redhat.com>
2016-09-06 14:39:15 -04:00
Peter Jones
edc16fdb82 Add some more documentation for how to use fallback.efi
Signed-off-by: Peter Jones <pjones@redhat.com>
2016-09-06 14:39:15 -04:00
Peter Jones
6f04092060 Make fallback and mokmanager know about multi-arch.
On baytrail, we've got 32-bit firmware, 32-bit efi utilities, and 64-bit
kernel.  So since most distros will want 32+64 EFI media booting a
64-bit kernel, we have to name them better on the filesystem.

Signed-off-by: Peter Jones <pjones@redhat.com>
2016-09-06 14:39:15 -04:00
Mathieu Trudel-Lapierre
cffaa5078d releasing package shim version 0.9+1465500757.14a5905-0ubuntu1 2016-07-26 16:49:50 -04:00
Mathieu Trudel-Lapierre
9fa1d28f0d debian/copyright: update copyright for patches. 2016-07-26 16:48:29 -04:00
Mathieu Trudel-Lapierre
7fbc200d47 * debian/patches/unused-variable: remove unused variable size.
* debian/patches/binutils-version-matching: revert d9a4c912 to correctly
  match objcopy's version on Ubuntu.
2016-07-26 14:37:29 -04:00
Mathieu Trudel-Lapierre
d191cf2c9e Update bug tags for closed bugs upstream. 2016-07-26 13:48:37 -04:00
Mathieu Trudel-Lapierre
beb4623938 Apply patches again 2016-07-26 13:31:49 -04:00
Mathieu Trudel-Lapierre
110c669fd6 * Refreshed patches.
- Remaining patches:
    + second-stage-path
    + sbsigntool-not-pesign
2016-07-26 12:20:13 -04:00
Mathieu Trudel-Lapierre
1854cb28d1 New upstream release. 2016-07-26 12:03:25 -04:00
Mathieu Trudel-Lapierre
d3819813b8 Import upstream version 0.9+1465500757.14a5905 2016-07-26 12:02:18 -04:00
Peter Jones
a8b6d058f0 shim: make the PE loader less overzealous on rejections 2016-06-09 15:32:37 -04:00
Peter Jones
14a59055aa shim: make the PE loader less overzealous on rejections 2016-06-09 15:32:37 -04:00
Peter Jones
08ede98fbc Work around binutils version string weirdness.
Nick Clifton wrote to me and explained:

Subject: SHIM - objcopy version check broken by RHEL 7.3 binutils
Hi Peter,

  We (the tools group) have run across a small problem with the shim
  package for RHEL 7.3, whilst testing out a new version of the
  binutils.  It complains that it needs a version of objcopy that is
  >= 2.23, despite the fact that the version is actually 2.25.1.

  I tracked the problem down to an extraneous space at the end of the
  version string being produced by objcopy:

    "GNU objcopy version 2.25.1-8.el7 "

  The Makefile in the shim package uses this rule to test the version of
  objcopy:

    OBJCOPY_GTE224  = $(shell expr `$(OBJCOPY) --version |grep ^"GNU objcopy" | sed 's/^.* //g' | cut -f1-2 -d.` \>= 2.24)

  But, because of that extra space, the sed expression clips the entire
  line and so the test fails.

  The extra space is there because normally the version number would be
  followed by a date.  For example:

    "GNU objcopy version 2.23.52.0.1-56.el7 20130226"

  So in this case the sed will extract the date, not the version number,
  but the test will still pass.

  I could fix the binutils to remove the space, although it would be a
  bit messy and it would not fix the problem when a date is appended to
  the version number.  Instead, I would like to propose a small patch to
  the shim Makefile.  If you change the line to:

    OBJCOPY_GTE224  = $(shell expr `$(OBJCOPY) --version |grep ^"GNU objcopy" | sed 's/^.version //g' | cut -f1-2 -d.` \>= 2.24)

  then the test will work as intended, with or without an extra space at
  the end of the version and with or without a date appended.

  Would it be possible to have this change added to the shim package ?

Cheers

Signed-off-by: Peter Jones <pjones@redhat.com>
2016-05-18 10:33:38 -04:00
Peter Jones
d9a4c912c0 Work around binutils version string weirdness.
Nick Clifton wrote to me and explained:

Subject: SHIM - objcopy version check broken by RHEL 7.3 binutils
Hi Peter,

  We (the tools group) have run across a small problem with the shim
  package for RHEL 7.3, whilst testing out a new version of the
  binutils.  It complains that it needs a version of objcopy that is
  >= 2.23, despite the fact that the version is actually 2.25.1.

  I tracked the problem down to an extraneous space at the end of the
  version string being produced by objcopy:

    "GNU objcopy version 2.25.1-8.el7 "

  The Makefile in the shim package uses this rule to test the version of
  objcopy:

    OBJCOPY_GTE224  = $(shell expr `$(OBJCOPY) --version |grep ^"GNU objcopy" | sed 's/^.* //g' | cut -f1-2 -d.` \>= 2.24)

  But, because of that extra space, the sed expression clips the entire
  line and so the test fails.

  The extra space is there because normally the version number would be
  followed by a date.  For example:

    "GNU objcopy version 2.23.52.0.1-56.el7 20130226"

  So in this case the sed will extract the date, not the version number,
  but the test will still pass.

  I could fix the binutils to remove the space, although it would be a
  bit messy and it would not fix the problem when a date is appended to
  the version number.  Instead, I would like to propose a small patch to
  the shim Makefile.  If you change the line to:

    OBJCOPY_GTE224  = $(shell expr `$(OBJCOPY) --version |grep ^"GNU objcopy" | sed 's/^.version //g' | cut -f1-2 -d.` \>= 2.24)

  then the test will work as intended, with or without an extra space at
  the end of the version and with or without a date appended.

  Would it be possible to have this change added to the shim package ?

Cheers

Signed-off-by: Peter Jones <pjones@redhat.com>
2016-05-18 10:33:38 -04:00