Commit Graph

740 Commits

Author SHA1 Message Date
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
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
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
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
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
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
db142ce288 Typo on aarch64 :/
Signed-off-by: Peter Jones <pjones@redhat.com>
2015-06-30 14:54:43 -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
70ce2c4204 Improve our debuginfo path print
Signed-off-by: Peter Jones <pjones@redhat.com>
2015-06-30 14:19:57 -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
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
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
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
Peter Jones
f7c34e9b5f Don't print anything or delay when start_image() succeeds.
Signed-off-by: Peter Jones <pjones@redhat.com>
2015-06-29 14:41:21 -04:00
Peter Jones
6d4803a1c0 MokManager: Nerf SHA-1 again for actual hashes and signatures.
Nobody should be deploying SHA-1.  No hardware deploys it, and the rate
of change on https://en.wikipedia.org/wiki/SHA-1#Attacks is wildly
uninspiring.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-06-16 11:46:14 -04:00
Gary Ching-Pang Lin
0807ec7cec MokManager: fix comparison between signed and unsigned integer
Patch from Johannes Segitz <jsegitz@suse.com>
2015-06-16 11:46:14 -04:00
Gary Ching-Pang Lin
efa9c47690 MokManager: Discard the list contains an invalid signature
Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-06-16 11:46:14 -04:00
Gary Ching-Pang Lin
439f031711 MokManager: Support SHA224, SHA384, and SHA512
Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-06-16 11:46:14 -04:00
Gary Ching-Pang Lin
7db9f7c71c MokManager: Add more key list safe checks
Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-06-16 11:46:14 -04:00
Gary Ching-Pang Lin
ab9d755484 MokManager: fix the return value and type
There are some functions that the return value and the type
didn't match.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-06-16 11:41:32 -04:00
Gary Ching-Pang Lin
8bd6b9cd5a MokManager: Support SHA1 hash in MOK
Add SHA1 hash support and amend the code to make it easier to support
other SHA digests.
2015-06-16 11:41:32 -04:00
Gary Ching-Pang Lin
cd15cc0efc MokManager: fix the hash list counting in delete
match_hash() requests the number of keys in a list and it was
mistakenly replaced with the size of the Mok node. This would
made MokManager to remove the whole Mok node instead of one
hash.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-06-16 11:41:32 -04:00
Gary Ching-Pang Lin
8449925662 MokManager: calculate the variable size correctly
MokSize of the hash signature list includes the owner GUID,
so we should not add the 16bytes compensation.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-06-16 11:41:32 -04:00
Gary Ching-Pang Lin
7cb3ee9213 Make shim to check MokXAuth for MOKX reset
Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-06-16 11:41:32 -04:00
Gary Ching-Pang Lin
b8d1bc6e98 Verify the EFI images with MOK blacklist
Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-06-16 11:41:32 -04:00
Gary Ching-Pang Lin
9a811c3233 Copy the MOK blacklist to a RT variable
Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-06-16 11:41:32 -04:00
Gary Ching-Pang Lin
6068f51099 MokManager: Write the hash list properly
also return to the previous entry in the list

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-06-16 11:41:32 -04:00
Gary Ching-Pang Lin
de2acfb43e MokManager: Match all hashes in the list
Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-06-16 11:41:32 -04:00
Gary Ching-Pang Lin
c0fd34674b MokManager: delete the hash properly
Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-06-16 11:41:32 -04:00
Gary Ching-Pang Lin
a462c735fa MokManager: show the hash list properly
Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-06-16 11:41:32 -04:00
Gary Ching-Pang Lin
64c5066ce0 Support MOK blacklist
The new blacklist, MokListX, stores the keys and hashes that are
banned.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-06-16 11:41:32 -04:00
Peter Jones
7bb0d6f71d Fix console_print_box*() parameters.
When we made lib build with the correct CFLAGS, it inherited
-Werror=sign-compare, and I fixed up some parameters on
console_print_box() and console_print_box_at() to avoid sign comparison
errors.

The fixups were *completely wrong*, as some behavior relies on negative
values.  So this fixes them in a completely different way, by casting
appropriately to signed types where we're doing comparisons.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-06-16 11:41:32 -04:00
Peter Jones
7ad94952cd Ensure that apps launched by shim get correct BS->Exit() behavior
Right now applications run by shim get our wrapper for Exit(), but it
doesn't do as much cleanup as it should - shim itself also exits, but
currently is not doing all the cleanup it should be doing.

This changes it so all of shim's cleanup is also performed.

Based on a patch and lots of review from Gary Lin.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-06-11 13:25:56 -04:00
Peter Jones
a0e830769d Don't leave in_protocol==1 when shim_verify() isn't enforcing.
Right now if shim_verify() sees secure_mode()==0, it exits with
EFI_SUCCESS, but accidentally leaves in_protocol=1.  This means any
other call will have supressed error/warning messages.

That's wrong, so don't do it.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-06-11 13:20:09 -04:00
Peter Jones
0b394a9480 Only run MokManager if asked or a security violation occurs.
Don't run MokManager on any random error from start_image(second_stage);
only try it if it /is/ the second stage, or if start_image gave us
EFI_SECURITY_VIOLATION.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-06-04 10:19:30 -04:00
Gary Ching-Pang Lin
929b5b762b Make the build failed with objcopy < 2.24
The wildcard support was introduced in objcopy since binutils 2.24.
However, objcopy < 2.24 never issues any warning message with the
wildcard and a faulty binary will be generated. This commit makes
the build failed as a notification for the usage of binutils < 2.24.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-05-12 13:52:22 -04:00
Gary Ching-Pang Lin
3285f53941 Update Cryptlib and openssl
Update Cryptlib to r16559 and openssl to 0.9.8zf

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2015-05-12 13:51:02 -04:00
Matthew Garrett
d7cbd4e392 Explicitly request sysv-style ELF hash sections
We depend on there being a .hash section in the binary, and that's not
the case on distributions that default to building with gnu-style ELF
hashes. Explicitly request sysv-style hashes in order to avoid building
broken binaries.

Signed-off-by: Matthew Garrett <mjg59@coreos.com>
2015-04-15 13:30:52 -04:00
Peter Jones
d51739a416 gcc 5.0 changes some include bits, so copy what arm does on x86.
Basically they messed around with stdarg some and now we need to do it
the other way.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-04-13 19:55:25 -04:00
Peter Jones
605be9f179 Make lib/ use the right CFLAGS.
Signed-off-by: Peter Jones <pjones@redhat.com>
2015-04-13 19:55:25 -04:00
Peter Jones
7fdbd9d48a Make lib/ build right with the cflags it should be using...
... but isn't.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-04-13 19:55:25 -04:00
Laszlo Ersek
6b2510522f Fix length of allocated buffer for boot option comparison.
The following commit:

  commit 4aac8a1179
  Author: Gary Ching-Pang Lin <glin@suse.com>
  Date:   Thu Mar 6 10:57:02 2014 +0800

    [fallback] Fix the data size for boot option comparison

corrected the data size used for comparison, but also reduced the
allocation so it doesn't include the trailing UTF16LE '\0\0' at the
end of the string, with the result that the trailer of the buffer
containing the string is overwritten, which OVMF detects as memory
corruption.

Increase the size of the storage buffer in a few places to correct
this problem.

Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Gary Ching-Pang Lin <glin@suse.com>
2015-04-13 19:55:25 -04:00
Richard W.M. Jones
90c65f72f8 fallback: Fix comparison between signed and unsigned in debugging code.
fallback.c: In function ‘update_boot_order’:
fallback.c:334:17: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]
  for (j = 0 ; j < size / sizeof (CHAR16); j++)
                   ^
fallback.c: In function ‘add_to_boot_list’:
fallback.c:402:16: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]
  for (i = 0; i < s; i++) {
                  ^

Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
2015-04-13 19:55:25 -04:00
Peter Jones
5195d7d31b Don't install our protocols if we're not in secure mode.
System services haven't been hooked if we're not in secure mode, so
do_exit() will never be called.  In this case shim never gets control
once grub exits, which means if booting fails and the firmware tries
another boot option, it'll attempt to talk to the shim protocol we
installed.

This is wrong, because it is allowed to have been cleared from ram at
this time, since the task it's under has exited.

So just don't install the protocols when we're not enforcing.

This version also has a message and a 2-second stall after calling
start_image(), so that we can tell if we are on the expected return path
of our execution flow.
2015-04-13 19:55:25 -04:00
Peter Jones
d01421eb5a Align the sections we're loading, and check for validity /after/ discarding.
Turns out a) the codegen on aarch64 generates code that has real
alignment needs, and b) if we check the length of discardable sections
before discarding them, we error for no reason.

So do the error checking in the right order, and always enforce some
alignment because we know we have to.

Signed-off-by: Peter Jones <pjones@redhat.com>
2015-04-13 19:55:25 -04:00
Gary Ching-Pang Lin
361716dd4a Add nostdinc to the CFLAGS for lib
We don't need the headers from the standard include path.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2014-12-11 09:48:50 -05:00
Peter Jones
4316fbd2a2 Bump version to 0.8 2014-10-13 16:41:51 -04:00
Peter Jones
c0949c0a79 Correctly reject bad tftp addresses earlier, rather than later.
This check is for end == NULL but was meant to be *end == '\0'.  Without
this change, we'll pass a plausibly bad address (i.e. one with no ']' at
the end) to Mtftp(... READ_FILE ...), which should fail correctly, but
our error messaging will be inconsistent.

Signed-off-by: Peter Jones <pjones@redhat.com>
2014-10-02 01:01:54 -04:00
Peter Jones
6a115d038a Use -Werror=sign-compare .
I'm going to have to fix any errors that have this anyway, so may as
well do it here properly.

Signed-off-by: Peter Jones <pjones@redhat.com>
2014-10-02 01:01:54 -04:00
Peter Jones
c622b677d6 Make another integer compare be signed/unsigned safe as well.
Signed-off-by: Peter Jones <pjones@redhat.com>
2014-10-02 01:01:54 -04:00