Commit Graph

145 Commits

Author SHA1 Message Date
Gary Ching-Pang Lin
10f0f58b03 Clear the screen before erasing keys 2012-12-20 12:55:59 +08:00
Gary Ching-Pang Lin
14d4b8e5ca Get the second stage loader from the Load Options
This commit replaces the 2nd stage loader path with the first
argument in the Load Options and moves the rest arguments (if any)
to the Load Options for the 2nd stage loader.

For example, to make shim to load elilo.efi, just create a new
boot entry with efibootmgr:

 # efibootmgr -c -L "shim elilo" -l "efi\\shim.efi" -u "elilo.efi"
2012-12-10 16:34:35 +08:00
Matthew Garrett
9c0c64ebde Remove debug code
secure_mode() was altered to always return true for debug purposes, and this
accidentally got committed to mainline. Fix that.
2012-11-27 23:52:27 -05:00
Matthew Garrett
6d50f87a06 Sign MokManager with a locally-generated key
shim needs to verify that MokManager hasn't been modified, but we want to
be able to support configurations where shim is shipped without a vendor
certificate. This patch adds support for generating a certificate at build
time, incorporating the public half into shim and signing MokManager with
the private half. It uses pesign and nss, but still requires openssl for
key generation. Anyone using sbsign will need to figure this out for
themselves.
2012-11-26 13:43:50 -05:00
Matthew Garrett
2fd180a92d Don't fail if there's no network devices
findNetboot() would continue blindly even if no PXE-capable devices were
found. Fix that.
2012-11-01 16:03:24 -04:00
Matthew Garrett
5c9cf018c7 Bump version
This seems pretty much functionally complete, so let's call it 0.2.
2012-11-01 15:32:12 -04:00
Matthew Garrett
821eca49e9 Merge branch 'mok' into netboot
Conflicts:
	shim.c
2012-11-01 15:29:23 -04:00
Matthew Garrett
0aee67a800 Add comments 2012-11-01 15:26:36 -04:00
Matthew Garrett
5c9470f288 Merge branch 'mok' into netboot
Conflicts:
	Makefile
	shim.c
2012-11-01 10:45:22 -04:00
Matthew Garrett
cb385f1937 Fix AuthenticodeVerify loop
Cert needs to be modified inside the Index loop, not outside it. This is unlikely to
ever trigger since there will typically only be one X509 certificate per
EFI_SIGNATURE_LIST, but fix it anyway.
2012-11-01 10:39:31 -04:00
Matthew Garrett
7a47160208 Fix signature checking
We could potentially find a valid signature and then fail to validate it
due to not breaking out of the outer while loop.
2012-11-01 10:31:14 -04:00
Matthew Garrett
53feaa0152 Fix double free
load_image() didn't allocate PathName, don't have it free it.
2012-11-01 10:12:20 -04:00
Matthew Garrett
24a602b614 Fix up some types
Type-checking the UEFI calls picked up a couple of problems. Fix them up.
2012-11-01 09:46:51 -04:00
Matthew Garrett
da1e6d751b Add documentation of the Mok variables
Brief overview of the function and format of the various variables used
by Shim and MokManager.
2012-10-30 16:14:02 -04:00
Matthew Garrett
4f54460442 Merge branch 'mok' of github.com:mjg59/shim into mok 2012-10-30 15:59:40 -04:00
Gary Ching-Pang Lin
054dc6d29e Check the vendor blacklist correctly 2012-10-30 10:35:36 -04:00
Gary Ching-Pang Lin
6fc35f2eaa Initialize the size of vendor dbx as 0
The size of vendor dbx must be 0 if there is no vendor dbx provided
or the functions of db check will crash.
2012-10-30 10:35:36 -04:00
Matthew Garrett
0e3ff89ac7 Clean up password setting
Permit clearing of the password, and avoid a case where choosing not to set
a password would result in an error message on exit. Fix the same problem
with MokSB.
2012-10-24 01:14:50 -04:00
Matthew Garrett
cccc613733 Improve signature validation enable/disable
The logic used in checking the signature validation password was a bit
ugly. Improve that so it behaves rather more as expected.
2012-10-24 01:05:45 -04:00
Matthew Garrett
bceadba4c2 Boot unsigned binaries if we're not in secure mode
read_header would fail if the binary was unsigned, even if we weren't then
going to verify the signature. Move that check to the verify function
instead.
2012-10-24 00:10:29 -04:00
Matthew Garrett
9913079b32 Miscellaneous small fixups
Fixes for some small bugs noticed during review
2012-10-24 00:09:08 -04:00
Matthew Garrett
67a1cc49a9 Add another missing screen clearing
Another case where we were drawing text over existing text.
2012-10-23 23:46:44 -04:00
Matthew Garrett
fa448727ef Merge branch 'mok' of github.com:mjg59/shim into mok 2012-10-23 15:45:04 -04:00
Matthew Garrett
631773c28f Fix password hash calculation
This was hardcoded, rather than being based on the actual password length,
resulting in incorrect hashes being generated.
2012-10-23 15:43:29 -04:00
Matthew Garrett
eb4c59b0c8 Update image validation enable/disable
Update this to match the new mokutil behaviour
2012-10-23 15:43:10 -04:00
Matthew Garrett
35e185edd9 Delete MokList properly
A cut and paste error meant that attempts to delete MokList were instead
appending a zero-length addition.
2012-10-23 13:01:48 -04:00
Matthew Garrett
4e3721a0b5 Clean up checks for MokManager entry
Add a helper function and tidy up the calls for getting into MokManager
2012-10-23 13:01:25 -04:00
Matthew Garrett
59f2e0a289 Fix key database parsing
The pointer to the certificate needs to be incremented by the size of the
entire certificate, not just the certificate data.
2012-10-23 13:00:40 -04:00
Peter Jones
e0b78774d9 Support a vendor-specific DBX list.
In some rare corner cases, it's useful to add a blacklist of things that
were allowed by a copy of shim that was never signed by the UEFI signing
service.  In these cases it's okay for them to go into a local dbx,
rather than taking up precious flash.

Signed-off-by: Peter Jones <pjones@redhat.com>
2012-10-23 11:47:41 -04:00
Matthew Garrett
cdde65912a Clear screen before prompting
We were drawing prompts on top of existing text, which was less than
ideal.
2012-10-18 17:43:53 -04:00
Matthew Garrett
82408dddba Don't print SHA1 sum when calculating file fingerprints
There's no point in printing the SHA1 of a SHA256...
2012-10-18 17:43:53 -04:00
Matthew Garrett
077c2525ab Clean up timeout counter handling
Reduce menu redrawing by only redrawing the invalidated section of the menu
during the timeout countdown.
2012-10-18 17:43:53 -04:00
Matthew Garrett
801c0faaf7 Add MOK password auth
Add support for setting an MOK password. The OS passes down a password hash.
MokManager then presents an option for setting a password. Selecting it
prompts the user for the same password again. If they match, the hash is
enrolled into a boot services variable and MokManager will prompt for the
password whenever it's started.
2012-10-18 17:43:53 -04:00
Matthew Garrett
310ec753fa Pause on callback failures
If a callback returns any kind of failure, wait for a keypress in order to
give the user an opportunity to read any failure messages.
2012-10-18 17:43:53 -04:00
Matthew Garrett
7127b1abc9 Skip signature checking if insecure
If we're configured to run untrusted code, print a message and skip the
validation checks.
2012-10-18 17:43:53 -04:00
Matthew Garrett
c1faa462e0 Add support for disabling signature verification
Provide a mechanism for a physically present end user to disable signature
verification. This is handled by the OS passing down a variable that
contains a UINT32 and a SHA256 hash. If this variable is present, MokManager
prompts the user to choose whether to enable or disable signature validation
(depending on the value of the UINT32). They are then asked to type the
passphrase that matches the hash. This then saves a boot services variable
which is checked by shim, and if set will skip verification of signatures.
2012-10-18 17:41:52 -04:00
Matthew Garrett
ed63bf1c0e Add section headers
Provide a little more contextual information when people are in shim
menus.
2012-10-13 01:07:43 -04:00
Matthew Garrett
d8e330b953 Add draft version of Neil's netboot code 2012-10-12 20:14:14 -04:00
Gary Ching-Pang Lin
1b3512adf0 Reallocate the DevPath space for the volume label
The size of the DevPath string array was not sufficient to append
the volume label. This patch extends the size for the label and
re-enables the menu freeing.
2012-10-12 20:09:33 -04:00
Matthew Garrett
f0bd2e3ec0 Remove LoadImage/StartImage support
Some systems will show an error dialog if LoadImage() returned
EFI_ACCESS_DENIED, which then requires physical user interaction to skip.
Let's just remove the LoadImage/StartImage code, since the built-in code
is theoretically equivalent.
2012-10-12 19:55:20 -04:00
Matthew Garrett
0848fab98d Switch to using db format for MokList and MokNew
Using the same format as the UEFI key databases makes it easier for the
kernel to parse and extract keys from MOK, and also permits MOK to contain
multiple key or hash types. Additionally, add support for enrolling hashes.
2012-10-12 19:55:20 -04:00
Matthew Garrett
7f99a97c6b Split out hashing
We want to be able to generate hashes, so split out the hash generation
function from the verification function
2012-10-11 12:24:36 -04:00
Matthew Garrett
cce85ed460 Add missing header define 2012-10-11 12:13:18 -04:00
Matthew Garrett
0e054ee1ce Add SHA1 support
In theory vendors could blacklist binaries with SHA1, so make sure we
calculate and check that hash as well.
2012-10-11 11:30:41 -04:00
Matthew Garrett
c48993f8b0 Add menu header
Add a basic header to the menu to make it clearer what's going on.
Define SHIM_VENDOR in order to override the default.
2012-10-11 09:55:14 -04:00
Matthew Garrett
f031aeca57 Clear screen on exit 2012-10-11 09:45:14 -04:00
Matthew Garrett
bb47e3138e Add timeout support
We should time out if there aren't any keypresses at the top level menu
within a reasonable timeframe.
2012-10-11 09:44:27 -04:00
Matthew Garrett
4a6f5c6f87 Fix whitespace 2012-10-11 09:26:16 -04:00
Gary Ching-Pang Lin
20b954b004 Remove unnecessary newline
The newline character shouldn't be present in the menu item string
2012-10-11 09:24:06 -04:00
Gary Ching-Pang Lin
948cedb3c6 Pass the size of MokNew to the key enrollment function
The size of MokNew was missing and it caused crash when enrolling new MOKs
with mokutil
2012-10-11 09:24:06 -04:00