Commit Graph

166 Commits

Author SHA1 Message Date
Peter Jones
073f3b3caf Fix some minor type errors.
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-05-15 13:37:15 -04:00
Peter Jones
a41306e8f4 Pass parameters correctly when booting.
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-05-14 13:10:52 -04:00
Peter Jones
3fa9a53425 [fallback] Try to execute the first new boot option.
I'm told rebooting is sometimes unreliable when called here, and we'll
get bootx64.efi loaded anyway.  I'll just assume that's true and try to
load the first option, since it's clearly what we'd prefer happens next.

Signed-off-by: Peter Jones <pjones@redhat.com>
2013-05-02 14:58:44 -04:00
Peter Jones
f0e4df7d5f Explain byte order handling better.
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-04-30 14:21:41 -04:00
Gary Ching-Pang Lin
8adfd201fe Don't update BootOrder until all csv files are processed 2013-04-30 09:46:23 -04:00
Gary Ching-Pang Lin
f7fbcdce36 Reset the system after restoring the boot entries 2013-04-30 09:46:23 -04:00
Gary Ching-Pang Lin
4665fcab62 Fix crash due to memory allocation 2013-04-30 09:46:23 -04:00
Peter Jones
82a9c9fdb6 Get rid of extra "continue".
It's confusing, and it doesn't actually accomplish anything when applied
to *either* loop.

Signed-off-by: Peter Jones <pjones@redhat.com>
2013-04-30 09:46:22 -04:00
Peter Jones
1a75bb9fc2 Fix error checking on AllocateZeroPool() in update_boot_order()
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-04-30 09:46:22 -04:00
Peter Jones
a24d3ba3bd Make shim use fallback when appropriate.
If we're called as /BOOT/EFI/BOOT*.EFI, and /BOOT/EFI/FALLBACK.EFI exists,
give it a shot.

Signed-off-by: Peter Jones <pjones@redhat.com>
2013-04-30 09:46:22 -04:00
Peter Jones
3ce517fdbb Add a fallback loader for when shim is invoked as BOOTX64.EFI
If shim is invoked as \EFI\BOOT\BOOT*.EFI and a file exists named
\EFI\BOOT\FALLBACK.EFI, try it instead of our second stage.  So don't
put fallback.efi on your install media in \EFI\BOOT, because that won't
do whatever it is you're hoping for, unless you're hoping not to start
the installer.

So here's the process for using this:
in /EFI/fedora/ (or whichever directory you happen to own), you put:
  shim.efi
  grub.efi
  boot.csv - format is: shim.efi,Nice Label,cmdline arguments,comments
           - filenames refer only to files in this directory, with no
	     leading characters such as L"./" or L"/EFI/fedora/"
           - note that while this is CSV, the character encoding is
	     UCS-2

and if /EFI/BOOT/BOOTX64.EFI doesn't already exist, then in /EFI/BOOT:
  shim.efi as BOOTX64.EFI
  fallback.efi

Signed-off-by: Peter Jones <pjones@redhat.com>
2013-04-30 09:46:22 -04:00
Peter Jones
1f41bdc79d Add StrCSpn()
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-04-30 09:46:22 -04:00
Gary Ching-Pang Lin
9754732ca1 Adopt the UEFI shell style LoadOptions
The previous commit, 14d4b8e, caused shim failed to parse the name
of the 2nd stage loader in UEFI shell. Amend parsing of the name the
2nd stage loader to be compatible with UEFI shell.

To create an boot entry for elilo.efi:

 # efibootmgr -c -L "shim elilo" -l "efi\\shim.efi" -u "shim.efi elilo.efi"
2013-04-30 09:45:45 -04:00
Peter Jones
53ba265dcb Get rid of extra label.
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-04-26 12:12:48 -04:00
Peter Jones
4df3d7c3ef Don't put the directory in the file path twice.
Sometimes when we're creating paths, the ImagePath can contain the
directory name already.  If that happens, don't add it in again.

Signed-off-by: Peter Jones <pjones@redhat.com>
2013-04-26 11:44:28 -04:00
Peter Jones
2cead91ea2 UEFI Shell sticks the UCS2 of li->FilePath in li->LoadOptions. Ignore it.
If li->LoadOptions tells us to execute our own binary, it's clearly not
what we want to do for the second stage.  So simply ignore that case.

Signed-off-by: Peter Jones <pjones@redhat.com>
2013-04-26 11:44:15 -04:00
Gary Ching-Pang Lin
4bab48ce88 Make sure the menu shows when the callback fails
Since Pause() doesn't clear the key from the input queue, the next
ReadKeyStroke reads the queued key instead of the new one. If the
user presses "Enter", MokManager exits directly without showing
the menu again.
2013-01-03 12:20:30 +08:00
Gary Ching-Pang Lin
990dcdb6a6 Add support for deleting specific keys 2013-01-03 12:20:22 +08:00
Gary Ching-Pang Lin
0c6a8a7501 MOK doesn't include the signature owner 2012-12-27 11:42:54 +08:00
Gary Ching-Pang Lin
5abe73ab81 Add a general function for password matching 2012-12-27 11:42:54 +08:00
Gary Ching-Pang Lin
510dafda53 Reboot the system after enrolling/erasing keys 2012-12-27 11:42:45 +08:00
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