Commit Graph

1510 Commits

Author SHA1 Message Date
Matthew Garrett
964f56b310 Measure state and second stage into TPM
Add support for measuring the MOK database and secure boot state into a
TPM, and do the same for the second stage loader. This avoids a hole in
TPM measurement between the firmware and the second stage loader.
2016-05-11 11:11:05 -04:00
Matthew Garrett
22b58f2455 Measure state and second stage into TPM
Add support for measuring the MOK database and secure boot state into a
TPM, and do the same for the second stage loader. This avoids a hole in
TPM measurement between the firmware and the second stage loader.
2016-05-11 11:11:05 -04:00
Ivan Hu
dd66e12d73 shim: dealing with only one string on loadoption
The second stage set is not working after commit
3322257e61 for those which load option
only have one string.

Signed-off-by: Ivan Hu <ivan.hu@canonical.com>
2016-05-11 11:10:17 -04:00
Ivan Hu
085d56c464 shim: dealing with only one string on loadoption
The second stage set is not working after commit
3322257e61 for those which load option
only have one string.

Signed-off-by: Ivan Hu <ivan.hu@canonical.com>
2016-05-11 11:10:17 -04:00
Mathieu Trudel-Lapierre
e9f7a5148b shim: mirror MokSBState in runtime so the kernel can make use of it.
Signed-off-by: Mathieu Trudel-Lapierre <mathieu.trudel-lapierre@canonical.com>
2016-03-22 11:14:31 -04:00
Mathieu Trudel-Lapierre
8f1bd605d0 shim: mirror MokSBState in runtime so the kernel can make use of it.
Signed-off-by: Mathieu Trudel-Lapierre <mathieu.trudel-lapierre@canonical.com>
2016-03-22 11:14:31 -04:00
Peter Jones
000261ca88 Don't test for the 0 character on the wrong half of the UCS2-LE char.
Signed-off-by: Peter Jones <pjones@redhat.com>
2015-11-17 11:41:12 -05:00
Peter Jones
99257c6c30 Don't test for the 0 character on the wrong half of the UCS2-LE char.
Signed-off-by: Peter Jones <pjones@redhat.com>
2015-11-17 11:41:12 -05:00
Peter Jones
4d70bbd894 shim: check for EFI\BOOT\BOOT${ARCH}.EFI as well as the leading \ version
I found a machine whose BDS gives us relative paths, yay!  The rest of
the code still works without that leading slash, so just make it one
more item we let through our StrnCaseCmp() filter.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-11-17 11:40:29 -05:00
Peter Jones
edeb313e6e shim: check for EFI\BOOT\BOOT${ARCH}.EFI as well as the leading \ version
I found a machine whose BDS gives us relative paths, yay!  The rest of
the code still works without that leading slash, so just make it one
more item we let through our StrnCaseCmp() filter.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-11-17 11:40:29 -05:00
Peter Jones
b7e59fd987 shim: fix resource leak on should_use_fallback() error path
ExitBootServices() and Exit() should both clean these up anyway, but we
should do the right thing nonetheless.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-11-17 11:40:23 -05:00
Peter Jones
4794822464 shim: fix resource leak on should_use_fallback() error path
ExitBootServices() and Exit() should both clean these up anyway, but we
should do the right thing nonetheless.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-11-17 11:40:23 -05:00
Peter Jones
d4fee90cdc shim: rebuild shim.o if headers change
Signed-off-by: Peter Jones <pjones@redhat.com>
2015-11-17 11:40:09 -05:00
Peter Jones
7cb2179b53 shim: rebuild shim.o if headers change
Signed-off-by: Peter Jones <pjones@redhat.com>
2015-11-17 11:40:09 -05:00
Peter Jones
6d5258995a shim: if generate_path() gets a full path, just return it.
We decide if it's a full path by if it starts with \\EFI\\.  That's
quite lazy, but we can't just check \\ like you'd hope, because we need
to stay compatible with what we've set as DEFAULT_LOADER in the past,
and I don't feel like writing the full path traversal file test.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-11-17 11:40:01 -05:00
Peter Jones
2e65561938 shim: if generate_path() gets a full path, just return it.
We decide if it's a full path by if it starts with \\EFI\\.  That's
quite lazy, but we can't just check \\ like you'd hope, because we need
to stay compatible with what we've set as DEFAULT_LOADER in the past,
and I don't feel like writing the full path traversal file test.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-11-17 11:40:01 -05:00
Peter Jones
b0d44f447d shim: fix a wrong-abi call to Stall() and ResetSystem()
Woops.  The net outcome of these is going to be a sleep of unknown
duration, followed by either a) ResetSystem() with some random selection
of warm/cold boot, or b) ResetSystem() returning an error and shim
returning error from efi_main().

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-11-17 11:39:54 -05:00
Peter Jones
cf5f75fa14 shim: fix a wrong-abi call to Stall() and ResetSystem()
Woops.  The net outcome of these is going to be a sleep of unknown
duration, followed by either a) ResetSystem() with some random selection
of warm/cold boot, or b) ResetSystem() returning an error and shim
returning error from efi_main().

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-11-17 11:39:54 -05:00
Peter Jones
07d5f9700e shim: handle BDS's li->LoadOptions and Shell's li->LoadOptions .
Load options are a giant pain in the ass, because the shell is a giant
piece of junk.  If we're invoked from the EFI shell, we get something
like this:

00000000 5c 00 45 00 36 00 49 00 5c 00 66 00 65 00 64 00 |\.E.F.I.\.f.e.d.|
00000010 6f 00 72 00 61 00 5c 00 73 00 68 00 69 00 6d 00 |o.r.a.\.s.h.i.m.|
00000020 78 00 36 00 34 00 2e 00 64 00 66 00 69 00 20 00 |x.6.4...e.f.i. .|
00000030 5c 00 45 00 46 00 49 00 5c 00 66 00 65 00 64 00 |\.E.F.I.\.f.e.d.|
00000040 6f 00 72 00 61 00 5c 00 66 00 77 00 75 00 70 00 |o.r.a.\.f.w.u.p.|
00000050 64 00 61 00 74 00 65 00 2e 00 65 00 66 00 20 00 |d.a.t.e.e.f.i. .|
00000060 00 00 66 00 73 00 30 00 3a 00 5c 00 00 00       |..f.s.0.:.\...|

which is just some paths rammed together separated by a UCS-2 NUL. But
if we're invoked from BDS, we get something more like:

00000000 01 00 00 00 62 00 4c 00 69 00 6e 00 75 00 78 00 |....b.L.i.n.u.x.|
00000010 20 00 46 00 69 00 72 00 6d 00 77 00 61 00 72 00 | .F.i.r.m.w.a.r.|
00000020 65 00 20 00 55 00 70 00 64 00 61 00 74 00 65 00 |e. .U.p.d.a.t.e.|
00000030 72 00 00 00 40 01 2a 00 01 00 00 00 00 08 00 00 |r.....*.........|
00000040 00 00 00 00 00 40 06 00 00 00 00 00 1a 9e 55 bf |.....@........U.|
00000050 04 57 f2 4f b4 4a ed 26 4a 40 6a 94 02 02 04 04 |.W.O.:.&J@j.....|
00000060 34 00 5c 00 45 00 46 00 49 00 5c 00 66 00 65 00 |4.\.E.F.I.f.e.d.|
00000070 64 00 6f 00 72 00 61 00 5c 00 73 00 68 00 69 00 |o.r.a.\.s.h.i.m.|
00000080 6d 00 78 00 36 00 34 00 2e 00 65 00 66 00 69 00 |x.6.4...e.f.i...|
00000090 00 00 7f ff 40 00 20 00 5c 00 66 00 77 00 75 00 |...... .\.f.w.u.|
000000a0 70 00 78 00 36 00 34 00 2e 00 65 00 66 00 69 00 |p.x.6.4...e.f.i.|
000000b0 00 00                                           |..|

which is clearly an EFI_LOAD_OPTION filled in halfway reasonably.  In
short, the UEFI shell is still a useless piece of junk.

So anyway, try to determine which one we've got and handle it
appropriately.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-11-17 11:39:34 -05:00
Peter Jones
3322257e61 shim: handle BDS's li->LoadOptions and Shell's li->LoadOptions .
Load options are a giant pain in the ass, because the shell is a giant
piece of junk.  If we're invoked from the EFI shell, we get something
like this:

00000000 5c 00 45 00 36 00 49 00 5c 00 66 00 65 00 64 00 |\.E.F.I.\.f.e.d.|
00000010 6f 00 72 00 61 00 5c 00 73 00 68 00 69 00 6d 00 |o.r.a.\.s.h.i.m.|
00000020 78 00 36 00 34 00 2e 00 64 00 66 00 69 00 20 00 |x.6.4...e.f.i. .|
00000030 5c 00 45 00 46 00 49 00 5c 00 66 00 65 00 64 00 |\.E.F.I.\.f.e.d.|
00000040 6f 00 72 00 61 00 5c 00 66 00 77 00 75 00 70 00 |o.r.a.\.f.w.u.p.|
00000050 64 00 61 00 74 00 65 00 2e 00 65 00 66 00 20 00 |d.a.t.e.e.f.i. .|
00000060 00 00 66 00 73 00 30 00 3a 00 5c 00 00 00       |..f.s.0.:.\...|

which is just some paths rammed together separated by a UCS-2 NUL. But
if we're invoked from BDS, we get something more like:

00000000 01 00 00 00 62 00 4c 00 69 00 6e 00 75 00 78 00 |....b.L.i.n.u.x.|
00000010 20 00 46 00 69 00 72 00 6d 00 77 00 61 00 72 00 | .F.i.r.m.w.a.r.|
00000020 65 00 20 00 55 00 70 00 64 00 61 00 74 00 65 00 |e. .U.p.d.a.t.e.|
00000030 72 00 00 00 40 01 2a 00 01 00 00 00 00 08 00 00 |r.....*.........|
00000040 00 00 00 00 00 40 06 00 00 00 00 00 1a 9e 55 bf |.....@........U.|
00000050 04 57 f2 4f b4 4a ed 26 4a 40 6a 94 02 02 04 04 |.W.O.:.&J@j.....|
00000060 34 00 5c 00 45 00 46 00 49 00 5c 00 66 00 65 00 |4.\.E.F.I.f.e.d.|
00000070 64 00 6f 00 72 00 61 00 5c 00 73 00 68 00 69 00 |o.r.a.\.s.h.i.m.|
00000080 6d 00 78 00 36 00 34 00 2e 00 65 00 66 00 69 00 |x.6.4...e.f.i...|
00000090 00 00 7f ff 40 00 20 00 5c 00 66 00 77 00 75 00 |...... .\.f.w.u.|
000000a0 70 00 78 00 36 00 34 00 2e 00 65 00 66 00 69 00 |p.x.6.4...e.f.i.|
000000b0 00 00                                           |..|

which is clearly an EFI_LOAD_OPTION filled in halfway reasonably.  In
short, the UEFI shell is still a useless piece of junk.

So anyway, try to determine which one we've got and handle it
appropriately.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-11-17 11:39:34 -05:00
Peter Jones
db90de78c0 Add a utility hexdump() call we can use when we need it.
This is mostly for debugging, so it's not a real problem if it's not
used right now.  I just like having it handy.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-11-17 11:39:28 -05:00
Peter Jones
2a6ebdae2f Add a utility hexdump() call we can use when we need it.
This is mostly for debugging, so it's not a real problem if it's not
used right now.  I just like having it handy.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-11-17 11:39:28 -05:00
Peter Jones
0470d800d5 MokManager: Fix a -Wsign-compare bug on i?86
My favorite part of -Wsign-compare is how it shows different results on
different arches for no obvious reason.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-11-17 11:39:21 -05:00
Peter Jones
1c0b567fd9 MokManager: Fix a -Wsign-compare bug on i?86
My favorite part of -Wsign-compare is how it shows different results on
different arches for no obvious reason.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-11-17 11:39:21 -05:00
Peter Jones
82e8358fa1 Fix unsigned int overflow on our i386 debug hook test.
Signed-off-by: Peter Jones <pjones@redhat.com>
2015-11-17 11:39:16 -05:00
Peter Jones
e22b8561d7 Fix unsigned int overflow on our i386 debug hook test.
Signed-off-by: Peter Jones <pjones@redhat.com>
2015-11-17 11:39:16 -05:00
Gary Ching-Pang Lin
775fdb9f4f Cryptlib: Define the va functions for EFIAPI
It turned out that my previous crash fix(*) was wrong.
We actually always used the gcc built-in va functions instead of
the "real" va functions for EFIAPI, and we are just lucky that
ERR_add_error_data didn't crash before.

This commit copies the va functions from MdePkg/Include/Base.h
in edk2 and introdues NO_BUILTIN_VA_FUNCS for x86_64, so that all
the x86_64 build will adopt the new va functions. For safety,
I also added EFIAPI to all the functions which use va_* to avoid
the potential trouble.

(*) a7f4b26cc3

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-11-09 09:50:50 -05:00
Gary Ching-Pang Lin
5a49bad020 Cryptlib: Define the va functions for EFIAPI
It turned out that my previous crash fix(*) was wrong.
We actually always used the gcc built-in va functions instead of
the "real" va functions for EFIAPI, and we are just lucky that
ERR_add_error_data didn't crash before.

This commit copies the va functions from MdePkg/Include/Base.h
in edk2 and introdues NO_BUILTIN_VA_FUNCS for x86_64, so that all
the x86_64 build will adopt the new va functions. For safety,
I also added EFIAPI to all the functions which use va_* to avoid
the potential trouble.

(*) a7f4b26cc3

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-11-09 09:50:50 -05:00
Linn Crosetto
11a4d912bd Fix recursive reference for RELEASE
Building 0.9 with GNU Make 4.0 fails with the following error:

Makefile:4: *** Recursive variable 'RELEASE' references itself (eventually).  Stop.

Change RELEASE to simply-expanded.

Signed-off-by: Linn Crosetto <linn@hpe.com>
2015-09-18 14:49:34 -04:00
Linn Crosetto
e22a7b5b77 Fix recursive reference for RELEASE
Building 0.9 with GNU Make 4.0 fails with the following error:

Makefile:4: *** Recursive variable 'RELEASE' references itself (eventually).  Stop.

Change RELEASE to simply-expanded.

Signed-off-by: Linn Crosetto <linn@hpe.com>
2015-09-18 14:49:34 -04:00
Gary Ching-Pang Lin
a4af142590 Specify the gnu89 standard
According to the gcc5 porting guideline (*), gcc5 defaults to
-std=gnu11 instead of -std=gnu89. Append -std=gnu89 to CFLAGS
to avoid the potential problems.

(*) https://gcc.gnu.org/gcc-5/porting_to.html

Based on the patch from Cristian Rodriguez <crrodriguez@opensuse.org>

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-07-28 11:46:38 -04:00
Gary Ching-Pang Lin
16f8f0087a Specify the gnu89 standard
According to the gcc5 porting guideline (*), gcc5 defaults to
-std=gnu11 instead of -std=gnu89. Append -std=gnu89 to CFLAGS
to avoid the potential problems.

(*) https://gcc.gnu.org/gcc-5/porting_to.html

Based on the patch from Cristian Rodriguez <crrodriguez@opensuse.org>

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-07-28 11:46:38 -04:00
Gary Ching-Pang Lin
63b1c7e07e Openssl: Add EFIAPI for ERR_add_error_vdata
Without declaring EFIAPI for ERR_add_error_vdata, shim would crash
while verifying the loaded image.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-07-28 11:46:38 -04:00
Gary Ching-Pang Lin
a7f4b26cc3 Openssl: Add EFIAPI for ERR_add_error_vdata
Without declaring EFIAPI for ERR_add_error_vdata, shim would crash
while verifying the loaded image.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-07-28 11:46:38 -04:00
Gary Ching-Pang Lin
5ce38c90cf Update openssl to 1.0.2d
Also update Cryptlib to edk2 r17731

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-07-28 11:46:38 -04:00
Gary Ching-Pang Lin
4ac84f8673 Update openssl to 1.0.2d
Also update Cryptlib to edk2 r17731

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-07-28 11:46:38 -04:00
Peter Jones
69ba24ff72 Typo on aarch64 :/
Signed-off-by: Peter Jones <pjones@redhat.com>
2015-06-30 14:54:43 -04:00
Peter Jones
db142ce288 Typo on aarch64 :/
Signed-off-by: Peter Jones <pjones@redhat.com>
2015-06-30 14:54:43 -04:00
Peter Jones
a16796b99c 0.9
Signed-off-by: Peter Jones <pjones@redhat.com>
2015-06-30 14:20:12 -04:00
Peter Jones
c340e8ce10 0.9
Signed-off-by: Peter Jones <pjones@redhat.com>
2015-06-30 14:20:12 -04:00
Peter Jones
403afdad02 Improve our debuginfo path print
Signed-off-by: Peter Jones <pjones@redhat.com>
2015-06-30 14:19:57 -04:00
Peter Jones
70ce2c4204 Improve our debuginfo path print
Signed-off-by: Peter Jones <pjones@redhat.com>
2015-06-30 14:19:57 -04:00
Peter Jones
b4cd19405f Make sure our build-id notes wind up at a reasonable place.
Signed-off-by: Peter Jones <pjones@redhat.com>
2015-06-29 20:03:36 -04:00
Peter Jones
60577689ba Make sure our build-id notes wind up at a reasonable place.
Signed-off-by: Peter Jones <pjones@redhat.com>
2015-06-29 20:03:36 -04:00
Peter Jones
c55b17d281 Only be verbose the first time secure_mode() is called.
It's annoying to find out we're not in SB mode over and over.  Really it
is.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-06-29 14:41:21 -04:00
Peter Jones
0abed15aa8 Only be verbose the first time secure_mode() is called.
It's annoying to find out we're not in SB mode over and over.  Really it
is.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-06-29 14:41:21 -04:00
Peter Jones
fef725de4d Add a conditional point for a debugger to attach.
Signed-off-by: Peter Jones <pjones@redhat.com>
2015-06-29 14:41:21 -04:00
Peter Jones
a031960750 Add a conditional point for a debugger to attach.
Signed-off-by: Peter Jones <pjones@redhat.com>
2015-06-29 14:41:21 -04:00
Peter Jones
15b5aae395 More incorrect unsigned vs signed fixups from yours truly.
Woops.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-06-29 14:41:21 -04:00
Peter Jones
abe6ed8b57 More incorrect unsigned vs signed fixups from yours truly.
Woops.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-06-29 14:41:21 -04:00