Commit Graph

334 Commits

Author SHA1 Message Date
Peter Jones
e75294e569 Don't print things on the screen by default when everything works.
There's no point to this text, and it generally confuses people.

Signed-off-by: Peter Jones <pjones@redhat.com>
2013-09-16 09:27:08 -04:00
Peter Jones
b32a3ce14c Don't print that fallback isn't found in should_use_fallback()
The call can simply fail if it isn't found - which will be the case on
removeable install media.

Signed-off-by: Peter Jones <pjones@redhat.com>
2013-09-16 09:27:08 -04:00
Peter Jones
928886457e Fix some pointer casting issues.
This also fixes the size of an empty vendor_cert or dbx_cert.

Signed-off-by: Peter Jones <shim-owner@fedoraproject.org>
2013-06-11 14:59:48 -04:00
Peter Jones
d141608bf8 Bump version to 0.4
Since I've finally merged in the "sections" branch, best to increment
the version number.

Signed-off-by: Peter Jones <pjones@redhat.com>
2013-06-10 17:51:57 -04:00
Peter Jones
ff1409c37b Make DBX be included in build if the environment is set right.
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-06-10 17:51:57 -04:00
Peter Jones
f80edcbe7d Make .vendor_cert get the right flags set.
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-06-10 17:36:23 -04:00
Peter Jones
63bdfd8501 add a .gitignore
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-06-10 17:36:22 -04:00
Peter Jones
c682b514bf Move embedded certificates to their own section.
With this change, the embedded certificate and dbx lists (vendor_cert,
vendor_cert_size, vendor_dbx, and vendor_dbx_size) wind up being in a
section named .vendor_cert, and so will look something like:
------
fenchurch:~/devel/github.com/shim$ objdump -h shim.efi

shim.efi:     file format pei-x86-64

Sections:
Idx Name          Size      VMA               LMA               File off  Algn
  0 .eh_frame     000174a8  0000000000005000  0000000000005000  00000400  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  1 .text         000aa7e1  000000000001d000  000000000001d000  00017a00  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .reloc        0000000a  00000000000c8000  00000000000c8000  000c2200  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  3 .data         00031228  00000000000c9000  00000000000c9000  000c2400  2**5
                  CONTENTS, ALLOC, LOAD, DATA
  4 .vendor_cert  00000375  00000000000fb000  00000000000fb000  000f3800  2**0
                  CONTENTS, READONLY
  5 .dynamic      000000f0  00000000000fc000  00000000000fc000  000f3c00  2**3
                  CONTENTS, ALLOC, LOAD, DATA
  6 .rela         0002afa8  00000000000fd000  00000000000fd000  000f3e00  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  7 .dynsym       0000f1f8  0000000000128000  0000000000128000  0011ee00  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
------

This simplifies a security audit, because it means that different
versions of shim with substantially the same code with different keys
will be more easily comperable, and therefore logic differences may be
more easily identified.

This also means that if there's a trusted build you want to use, you can
remove the certificates, implant new ones, and have it signed, and the
code sections won't change.

Signed-off-by: Peter Jones <pjones@redhat.com>
2013-06-10 17:35:33 -04:00
Peter Jones
6b4255de12 vendor_cert_size's size in the binary should be 4, not -4.
The thing about subtraction is that the minuend needs to be before the
subtrahend in the text.

Signed-off-by: Peter Jones <pjones@redhat.com>
2013-06-10 17:35:33 -04:00
Peter Jones
1de10962e7 Remove FALLBACK_OBJS during clean as well.
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-06-10 17:34:55 -04:00
Peter Jones
acf2e8ed1a Make sure all the Makefiles use the same arguments for mmx/sse/ms_abi.
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-06-10 16:38:05 -04:00
Peter Jones
6cd79ef950 EFI_PXE_BASE_CODE_DHCPV6_PACKET is in gnu-efi-3.0t 2013-05-31 15:34:11 -04:00
Peter Jones
632503aa07 Don't use MMX and SSE registers, they aren't initialized.
GCC 4.8.0 will try to use these by default, and you'll wind up looping
across the (uninitialized!) trap handler for uninitialized instructions.

Signed-off-by: Peter Jones <pjones@redhat.com>
2013-05-31 15:34:11 -04:00
Peter Jones
8e7e92beb8 Bump version to 0.3
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-05-16 11:03:32 -04:00
Peter Jones
aa55fcf149 Use MS ABI instead of terrible wrappers.
This means that we now require gnu-efi 3.0s

Signed-off-by: Peter Jones <pjones@redhat.com>
2013-05-16 10:21:15 -04:00
Peter Jones
5bb3e64ed8 Use the correct define on Open.
The value here doesn't actually change any, but we should still use the
right name.

Signed-off-by: Peter Jones <pjones@redhat.com>
2013-05-15 13:38:44 -04:00
Peter Jones
c9d11306e4 Add some error messages when things don't work.
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-05-15 13:38:27 -04:00
Peter Jones
2e7fc28d92 Remove some unnecessary code.
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-05-15 13:38:00 -04:00
Peter Jones
35b0b55b3e Fix some minor type errors.
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-05-15 13:37:15 -04:00
Peter Jones
40cf2a423d Pass parameters correctly when booting.
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-05-14 13:10:52 -04:00
Peter Jones
8807e36aae [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
4f80140b53 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
39baf6dff7 Don't update BootOrder until all csv files are processed 2013-04-30 09:46:23 -04:00
Gary Ching-Pang Lin
117b1214d8 Reset the system after restoring the boot entries 2013-04-30 09:46:23 -04:00
Gary Ching-Pang Lin
17266fd057 Fix crash due to memory allocation 2013-04-30 09:46:23 -04:00
Peter Jones
404e126344 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
e172354b7e 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
6d6b022169 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
eb9f7f1c23 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
8f6eace189 Add StrCSpn()
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-04-30 09:46:22 -04:00
Gary Ching-Pang Lin
0283024e0e 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
4a3013c76c Get rid of extra label.
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-04-26 12:12:48 -04:00
Peter Jones
155a76bb86 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
6e1bd3dcb7 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
4a88de5816 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
92a136d823 Add support for deleting specific keys 2013-01-03 12:20:22 +08:00
Gary Ching-Pang Lin
a05c7c57d9 MOK doesn't include the signature owner 2012-12-27 11:42:54 +08:00
Gary Ching-Pang Lin
262d671419 Add a general function for password matching 2012-12-27 11:42:54 +08:00
Gary Ching-Pang Lin
a64ab2ec6b Reboot the system after enrolling/erasing keys 2012-12-27 11:42:45 +08:00
Gary Ching-Pang Lin
4895ca3919 Clear the screen before erasing keys 2012-12-20 12:55:59 +08:00
Gary Ching-Pang Lin
09e2c93956 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
8d311bc7e7 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
ef8c9962a8 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
e4d55afe6a 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
064c0eed5f 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
4ad234f175 Merge branch 'mok' into netboot
Conflicts:
	shim.c
2012-11-01 15:29:23 -04:00
Matthew Garrett
20f6cde679 Add comments 2012-11-01 15:26:36 -04:00
Matthew Garrett
28a3e57c9a Merge branch 'mok' into netboot
Conflicts:
	Makefile
	shim.c
2012-11-01 10:45:22 -04:00
Matthew Garrett
201574d1be 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
058c0368ad 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