Commit Graph

1510 Commits

Author SHA1 Message Date
Ard Biesheuvel
4dabdb22b4 CryptLib: undefine va_arg and friends before redefining them
Upstream GNU-EFI contains changes to efistdarg.h resulting in the va_start,
va_arg and va_end macros to be #defined unconditionally. Make sure we #undef
them before overriding the definitions.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
2014-08-12 10:54:05 -04:00
Ard Biesheuvel
a30276e095 CryptLib: undefine va_arg and friends before redefining them
Upstream GNU-EFI contains changes to efistdarg.h resulting in the va_start,
va_arg and va_end macros to be #defined unconditionally. Make sure we #undef
them before overriding the definitions.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
2014-08-12 10:54:05 -04:00
Steve Langasek
5fc0e7f624 releasing package shim version 0.4-0ubuntu5 2014-08-04 12:11:22 +02:00
Peter Jones
2220be4e6a Replace build instructions in README with something not completely wrong.
These were really, really out of date.
2014-07-21 16:15:07 -04:00
Peter Jones
81ee561dde Replace build instructions in README with something not completely wrong.
These were really, really out of date.
2014-07-21 16:15:07 -04:00
Gary Ching-Pang Lin
f9368474dd Update openssl to 0.9.8za
Also update to Tiano Cryptlib r15638
2014-07-14 09:03:36 -04:00
Gary Ching-Pang Lin
76f8050ff6 Update openssl to 0.9.8za
Also update to Tiano Cryptlib r15638
2014-07-14 09:03:36 -04:00
Gary Ching-Pang Lin
875eb1b9d5 Simplify the checking of SB and DB states
MokSBState and MokDBState are just 1 byte variables, so a UINT8
local variable is sufficient to include the content.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>

Conflicts:
	shim.c
2014-06-25 10:58:23 -04:00
Gary Ching-Pang Lin
e5f161147d Simplify the checking of SB and DB states
MokSBState and MokDBState are just 1 byte variables, so a UINT8
local variable is sufficient to include the content.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>

Conflicts:
	shim.c
2014-06-25 10:58:23 -04:00
Peter Jones
9ea3d9b401 Make sure we default to assuming we're locked down.
If "SecureBoot" exists but "SetupMode" does not, assume "SetupMode" says
we're not in Setup Mode.

Signed-off-by: Peter Jones <pjones@redhat.com>
2014-06-25 10:55:56 -04:00
Peter Jones
eb4cb6a509 Make sure we default to assuming we're locked down.
If "SecureBoot" exists but "SetupMode" does not, assume "SetupMode" says
we're not in Setup Mode.

Signed-off-by: Peter Jones <pjones@redhat.com>
2014-06-25 10:55:56 -04:00
Gary Ching-Pang Lin
7a72592b75 Check the secure variables with the lib functions
There are functions defined in lib to check the secure variables.
Use the functions to shun the duplicate code.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>

Conflicts:
	shim.c
2014-06-25 10:55:12 -04:00
Gary Ching-Pang Lin
868b372115 Check the secure variables with the lib functions
There are functions defined in lib to check the secure variables.
Use the functions to shun the duplicate code.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>

Conflicts:
	shim.c
2014-06-25 10:55:12 -04:00
Peter Jones
3b41442227 Explain the logic in secure_mode() better.
I was getting confused reading it, and I wrote it, so clearly it needs
more commentry.

Signed-off-by: Peter Jones <pjones@redhat.com>
2014-06-25 10:46:52 -04:00
Peter Jones
86173dba42 Explain the logic in secure_mode() better.
I was getting confused reading it, and I wrote it, so clearly it needs
more commentry.

Signed-off-by: Peter Jones <pjones@redhat.com>
2014-06-25 10:46:52 -04:00
Gary Ching-Pang Lin
fe8527aaa6 Free the string from DevicePathToStr
Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>

Conflicts:
	shim.c
2014-06-25 10:33:25 -04:00
Gary Ching-Pang Lin
c36d88cb16 Free the string from DevicePathToStr
Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>

Conflicts:
	shim.c
2014-06-25 10:33:25 -04:00
Gary Ching-Pang Lin
e50cfe371f Silence the functions of shim protocol
When grub2 invokes the functions of shim protocol in gfx mode,
OutputString in shim could distort the screen.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>

Conflicts:
	shim.c

(modified by pjones to include some newer Prints that weren't there when
Gary did the initial work here.)
2014-06-25 10:30:38 -04:00
Gary Ching-Pang Lin
4bfb13d803 Silence the functions of shim protocol
When grub2 invokes the functions of shim protocol in gfx mode,
OutputString in shim could distort the screen.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>

Conflicts:
	shim.c

(modified by pjones to include some newer Prints that weren't there when
Gary did the initial work here.)
2014-06-25 10:30:38 -04:00
Gary Ching-Pang Lin
d8d7464f2c Remove the duplicate calls in lib/console.c
Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2014-06-25 10:15:31 -04:00
Gary Ching-Pang Lin
8bd7bad4b7 Remove the duplicate calls in lib/console.c
Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2014-06-25 10:15:31 -04:00
Gary Ching-Pang Lin
95c6743e4c No newline for console_notify
The newlines are for Print(), not console_notify().

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>

Conflicts:
	shim.c
2014-06-25 10:12:43 -04:00
Gary Ching-Pang Lin
dc8fc734b8 No newline for console_notify
The newlines are for Print(), not console_notify().

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>

Conflicts:
	shim.c
2014-06-25 10:12:43 -04:00
Gary Ching-Pang Lin
ea1c89b047 Exclude ca.crt while signing EFI images
If ca.crt was added into the certificate database, ca.crt would be the first
certificate in the signature. Because shim couldn't verify ca.crt with the
embedded shim.cer, it failed to load MokManager.efi.signed and
fallback.efi.signed.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2014-06-25 10:03:08 -04:00
Gary Ching-Pang Lin
09283f08f0 Exclude ca.crt while signing EFI images
If ca.crt was added into the certificate database, ca.crt would be the first
certificate in the signature. Because shim couldn't verify ca.crt with the
embedded shim.cer, it failed to load MokManager.efi.signed and
fallback.efi.signed.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2014-06-25 10:03:08 -04:00
Gary Ching-Pang Lin
dcc523811b MokManager: handle the error status from ReadKeyStroke
On some machines, even though the key event was signaled, ReadKeyStroke
still got EFI_NOT_READY. This commit handles the error status to avoid
console_get_keystroke from returning unexpected keys.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>

Conflicts:
	MokManager.c
2014-06-25 10:02:18 -04:00
Gary Ching-Pang Lin
22254e2633 MokManager: handle the error status from ReadKeyStroke
On some machines, even though the key event was signaled, ReadKeyStroke
still got EFI_NOT_READY. This commit handles the error status to avoid
console_get_keystroke from returning unexpected keys.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>

Conflicts:
	MokManager.c
2014-06-25 10:02:18 -04:00
Gary Ching-Pang Lin
38fe58d33a MokManager: delete the BS+NV variables the right way
LibDeleteVariable assumes that the variable is RT+NV and it
won't work on a BS+NV variable.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2014-06-25 09:57:10 -04:00
Gary Ching-Pang Lin
53a8f8721c MokManager: delete the BS+NV variables the right way
LibDeleteVariable assumes that the variable is RT+NV and it
won't work on a BS+NV variable.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2014-06-25 09:57:10 -04:00
Gary Ching-Pang Lin
c902256046 Remove grubpath in generate_path()
The variable is not used anymore.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2014-06-25 09:56:27 -04:00
Gary Ching-Pang Lin
78aaad3003 Remove grubpath in generate_path()
The variable is not used anymore.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2014-06-25 09:56:27 -04:00
Gary Ching-Pang Lin
b8070380ee Check the first 4 bytes of the certificate
A non-DER encoding x509 certificate may be mistakenly enrolled into
db or MokList. This commit checks the first 4 bytes of the certificate
to ensure that it's DER encoding.

This commit also removes the iteration of the x509 signature list.
Per UEFI SPEC, each x509 signature list contains only one x509 certificate.
Besides, the size of certificate is incorrect. The size of the header must
be substracted from the signature size.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2014-06-25 09:55:49 -04:00
Gary Ching-Pang Lin
5f18e2e364 Check the first 4 bytes of the certificate
A non-DER encoding x509 certificate may be mistakenly enrolled into
db or MokList. This commit checks the first 4 bytes of the certificate
to ensure that it's DER encoding.

This commit also removes the iteration of the x509 signature list.
Per UEFI SPEC, each x509 signature list contains only one x509 certificate.
Besides, the size of certificate is incorrect. The size of the header must
be substracted from the signature size.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2014-06-25 09:55:49 -04:00
Gary Ching-Pang Lin
da49ac6d69 Fetch the netboot image from the same device
The previous strategy is to locate the first available PXE_BASE_CODE
protocol and to fetch the second stage image from it, and this may
cause shim to fetch the wrong second stage image, i.e. grub.efi.

Consider the machine with the following boot order:
1. PXE Boot
2. Hard Drive

Assume that the EFI image, e.g. bootx64.efi, in the PXE server is
broken, then "PXE Boot" will fail and fallback to "Hard Drive". While
shim.efi in "Hard Drive" is loaded, it will find the PXE protocol is
available and fetch grub.efi from the PXE server, not grub.efi in the
disk.

This commit checks the DeviceHandle from Loaded Image. If the device
supports PXE, then shim fetches grub.efi with the PXE protocol. Otherwise,
shim loads grub.efi from the disk.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2014-06-25 09:53:23 -04:00
Gary Ching-Pang Lin
f500a8742c Fetch the netboot image from the same device
The previous strategy is to locate the first available PXE_BASE_CODE
protocol and to fetch the second stage image from it, and this may
cause shim to fetch the wrong second stage image, i.e. grub.efi.

Consider the machine with the following boot order:
1. PXE Boot
2. Hard Drive

Assume that the EFI image, e.g. bootx64.efi, in the PXE server is
broken, then "PXE Boot" will fail and fallback to "Hard Drive". While
shim.efi in "Hard Drive" is loaded, it will find the PXE protocol is
available and fetch grub.efi from the PXE server, not grub.efi in the
disk.

This commit checks the DeviceHandle from Loaded Image. If the device
supports PXE, then shim fetches grub.efi with the PXE protocol. Otherwise,
shim loads grub.efi from the disk.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2014-06-25 09:53:23 -04:00
Gary Ching-Pang Lin
8bf83b55dc [fallback] Try to boot the first boot option anyway
Some UEFI implementations never care the boot options, so the
restored boot options could be just ignored and this results in
endless reboot. To avoid this situation, this commit makes
fallback.efi to load the first matched boot option even if there
is no boot option to be restored. It may not be perfect, but at
least the bootloader is loaded...

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2014-05-13 13:30:07 -04:00
Gary Ching-Pang Lin
0ba09477af [fallback] Try to boot the first boot option anyway
Some UEFI implementations never care the boot options, so the
restored boot options could be just ignored and this results in
endless reboot. To avoid this situation, this commit makes
fallback.efi to load the first matched boot option even if there
is no boot option to be restored. It may not be perfect, but at
least the bootloader is loaded...

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2014-05-13 13:30:07 -04:00
Gary Ching-Pang Lin
30cead3b40 [fallback] Fix the data size for boot option comparison
Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2014-05-13 13:24:12 -04:00
Gary Ching-Pang Lin
4aac8a1179 [fallback] Fix the data size for boot option comparison
Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2014-05-13 13:24:12 -04:00
Gary Ching-Pang Lin
ec7eddbf05 [fallback] Avoid duplicate old BootOrder
set_boot_order() already copies the old BootOrder to the variable,
bootorder. Besides, we can adjust BootOrder when adding the newly
generated boot option. So, we don't have to copy the old one again
in update_boot_order(). This avoid the duplicate entries in BootOrder.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2014-05-13 13:23:41 -04:00
Gary Ching-Pang Lin
382a0b66e6 [fallback] Avoid duplicate old BootOrder
set_boot_order() already copies the old BootOrder to the variable,
bootorder. Besides, we can adjust BootOrder when adding the newly
generated boot option. So, we don't have to copy the old one again
in update_boot_order(). This avoid the duplicate entries in BootOrder.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2014-05-13 13:23:41 -04:00
Peter Jones
a63d665fb8 Get rid of SectionCache in generate_hash(), it is unused.
Signed-off-by: Peter Jones <pjones@redhat.com>
2014-04-11 15:07:45 -04:00
Peter Jones
5103c3b368 Get rid of SectionCache in generate_hash(), it is unused.
Signed-off-by: Peter Jones <pjones@redhat.com>
2014-04-11 15:07:45 -04:00
Peter Jones
16a8356350 Kees' patch missed the offset adjustment to PEHdr.
In read_header, we adjust context->PEHdr's address by doshdr->e_lfanew.
If we're going to recompute that address, we have to adjust it here
too.

Signed-off-by: Peter Jones <pjones@redhat.com>
2014-04-11 15:05:24 -04:00
Peter Jones
a876037a0d Kees' patch missed the offset adjustment to PEHdr.
In read_header, we adjust context->PEHdr's address by doshdr->e_lfanew.
If we're going to recompute that address, we have to adjust it here
too.

Signed-off-by: Peter Jones <pjones@redhat.com>
2014-04-11 15:05:24 -04:00
Kees Cook
47a9d2c908 additional bounds-checking on section sizes
This adds additional bounds-checking on the section sizes. Also adds
-Wsign-compare to the Makefile and replaces some signed variables with
unsigned counteparts for robustness.

Signed-off-by: Kees Cook <kees@ubuntu.com>
2014-04-11 14:41:22 -04:00
Kees Cook
5495694c04 additional bounds-checking on section sizes
This adds additional bounds-checking on the section sizes. Also adds
-Wsign-compare to the Makefile and replaces some signed variables with
unsigned counteparts for robustness.

Signed-off-by: Kees Cook <kees@ubuntu.com>
2014-04-11 14:41:22 -04:00
Peter Jones
cf90edfff5 Allow fallback to use the system's LoadImage/StartImage .
Track use of the system's LoadImage(), and when the next StartImage()
call is for an image the system verified, allow that to count as
participating, since it has been verified by the system's db.

Signed-off-by: Peter Jones <pjones@redhat.com>
2014-02-14 17:48:01 -05:00
Peter Jones
06495f692f Allow fallback to use the system's LoadImage/StartImage .
Track use of the system's LoadImage(), and when the next StartImage()
call is for an image the system verified, allow that to count as
participating, since it has been verified by the system's db.

Signed-off-by: Peter Jones <pjones@redhat.com>
2014-02-14 17:48:01 -05:00
Peter Jones
a5d135bd2d Add a failure case to the test plan and fix an ordering error.
Signed-off-by: Peter Jones <pjones@redhat.com>
2014-02-14 17:48:01 -05:00