Commit Graph

65 Commits

Author SHA1 Message Date
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
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
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
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
fa448727ef Merge branch 'mok' of github.com:mjg59/shim into mok 2012-10-23 15:45:04 -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
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
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
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
d8e330b953 Add draft version of Neil's netboot code 2012-10-12 20:14:14 -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
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
32b08c73d8 Fall back to MokManager if grub failed to validate
If we can't verify grub, fall back to MokManager. This permits shipping a
copy of shim and MokManager without distributing a key, letting
distributions provide their own for user installation.
2012-10-06 17:20:30 -04:00
Gary Ching-Pang Lin
000e235101 Use LibDeleteVariable in gnu-efi 2012-10-02 11:55:44 +08:00
Gary Ching-Pang Lin
ce2384495c Make sure the variables are not broken 2012-09-21 16:44:56 +08:00
Gary Ching-Pang Lin
03953e08bc Reject the binary when there is no key in MokList 2012-09-21 15:10:31 +08:00
Gary Ching-Pang Lin
b3ff35663b Check the MOK list correctly 2012-09-20 10:28:00 +08:00
Gary Ching-Pang Lin
5d4b6ba037 Abandon the variable, MokMgmt 2012-09-19 14:54:35 +08:00
Gary Ching-Pang Lin
ed2ecf8655 Copy the MOK list to a RT variable
The RT variable, MokListRT, is a copy of MokList so that the
runtime applications can synchronize the key list without touching
the BS variable.
2012-09-11 17:43:44 +08:00
Gary Ching-Pang Lin
28c581335e Use the machine owner keys to verify images 2012-09-11 16:39:12 +08:00
Gary Ching-Pang Lin
1395a9916b Always try StartImage first 2012-09-11 16:37:02 +08:00
Gary Ching-Pang Lin
5f00e44f9a Only launch MokManager when necessary 2012-09-11 16:34:25 +08:00
Gary Ching-Pang Lin
19e957f489 Retrieve attributes of variables
We have to make sure the machine owner key is stored in a BS
variable.
2012-09-11 16:31:05 +08:00
Gary Ching-Pang Lin
1fe0d49c9b Merge branch 'master' into mok-prototype3
Conflicts:
	shim.c
2012-09-07 18:22:34 +08:00
Gary Ching-Pang Lin
0d7c3dbde5 Load MokManager for MOK management 2012-09-07 18:11:45 +08:00
Gary Ching-Pang Lin
e235c85af1 Make the image loading process more generic 2012-09-07 17:43:21 +08:00
Peter Jones
3c2f1d6c3d Break out of our db checking loop at the appropriate time.
The break in check_db_cert is at the wrong level due to a typo in
indentation, and as a result only the last cert in the list can
correctly match.  Rectify that.

Signed-off-by: Peter Jones <pjones@redhat.com>
2012-09-06 12:13:44 -04:00
Matthew Garrett
3682a89543 Use the file size, not the image size field, for verification. 2012-09-06 12:13:44 -04:00
Peter Jones
178b5681b8 Allow specification of vendor_cert through a build command line option.
This allows you to specify the vendor_cert as a file on the command line
during build.
2012-09-06 12:13:44 -04:00
Matthew Garrett
590b34492d Handle slightly stranger device paths 2012-07-13 00:30:22 -04:00
Matthew Garrett
d3ee0bed5e Make path generation more sensible 2012-07-11 10:58:15 -04:00
Matthew Garrett
8c173876d1 Make sure ImageBase is set appropriately in the loaded_image protocol 2012-07-11 10:57:46 -04:00
Matthew Garrett
85bbd2c4cc Re-add whitelisting - needed for protocol validation 2012-07-05 16:39:25 -04:00
Matthew Garrett
cc1116ced6 Check whether secure boot is enabled before performing verify call 2012-07-05 12:51:12 -04:00
Matthew Garrett
96b0c2f981 Fix up blacklist checking
This was not quite as bugfree as would be hoped for.
2012-07-02 14:43:18 -04:00
Matthew Garrett
f9435d9664 Remove whitelisting - the firmware will handle it via LoadImage/StartImage 2012-07-02 13:49:32 -04:00
Matthew Garrett
6d3e62ef2f Fix type of buffersize 2012-07-02 11:54:21 -04:00