summaryrefslogtreecommitdiff
path: root/shim.c
AgeCommit message (Collapse)Author
2013-10-01Make verbose stuff use console_notifyPeter Jones
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-10-01Include shim's vendor_cert in MokListRTPeter Jones
There needs to be some way to communicate to the kernel that it's a trusted key, and since this mechanism already exists, it's by far the easiest.
2013-10-01Harden shim against non-participating bootloaders.Peter Jones
It works like this: during startup of shim, we hook into the system's ExitBootServices() and StartImage(). If the system's StartImage() is called, we automatically unhook, because we're chainloading to something the system can verify. When shim's verify is called, we record what kind of certificate the image was verified against. If the call /succeeds/, we remove our hooks. If ExitBootServices() is called, we check how the bootloader verified whatever it is loading. If it was verified by its hash, we unhook everything and call the system's EBS(). If it was verified by certificate, we check if it has called shim_verify(). If it has, we unhook everything and call the system's EBS() If the bootloader has not verified anything, and is itself verified by a certificate, we display a security violation warning and halt the machine.
2013-10-01Make vendor_cert/vendor_dbx actually replaceable by an external tool.Peter Jones
This moves them both to be computed at runtime from a pointer+offset rather than just a pointer, so that their real address can be entirely derived from the section they're in. This means you can replace the whole .vendor_cert section with a new one with certs that don't have the same size.
2013-09-26integrate security overrideGary Ching-Pang Lin
2013-09-26Merge variable retrieving functionsGary Ching-Pang Lin
2013-09-26Merge signature.h into efiauthenticated.h and guid.hGary Ching-Pang Lin
Conflicts: shim.c
2013-09-26Free unused memory spaceGary Ching-Pang Lin
2013-09-26Correct the certificate count of the signature listGary Ching-Pang Lin
2013-09-26Since different distros name grub*.efi differently, make it compile-time.Peter Jones
Basically, if you don't want grub.efi, you do: make 'DEFAULT_LOADER=\\\\grubx64.efi' Signed-off-by: Peter Jones <pjones@redhat.com>
2013-09-26Remove double-separators from the bootpathGary Ching-Pang Lin
2013-09-26Fix the broken bootpathGary Ching-Pang Lin
- The file path from DevicePathToStr may use slash as the file seperator. Change all slashes to backslashes to avoid the strange bootpath. - Remove the redundant backslashes. - ImagePath no longer requires the leading backslash. - Fix a memory leak Based on the patch from Michal Marek <mmarek@suse.com>
2013-09-24Pass the right arguments to EFI_PXE_BASE_CODE_TFTP_READ_FILESteve Langasek
A wrong pointer was being passed to EFI_PXE_BASE_CODE_TFTP_READ_FILE, preventing us from getting the file size back from the tftp call, ensuring that we don't have enough information to properly secureboot-validate the retrieved image.
2013-09-23Make SHIM_LOCK_GUID a first-class object with a symbol.Peter Jones
Right now the CA is checking if shim builds expose a particular version of the shim protocol. To do this, they're looking for SHIM_LOCK_GUID's value in the resulting binary. Currently, with SHIM_LOCK_GUID as a macro that gets assigned to local variables, that means they have to compensate for mov instructions mixed in with the actual value. This is completely absurd, so promote it to a first-class object with a symbol to make it both easy to find and continuous. Signed-off-by: Peter Jones <pjones@redhat.com>
2013-09-16Don't print things on the screen by default when everything works.Peter Jones
There's no point to this text, and it generally confuses people. Signed-off-by: Peter Jones <pjones@redhat.com>
2013-09-16Don't print that fallback isn't found in should_use_fallback()Peter Jones
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-06-11Fix some pointer casting issues.Peter Jones
This also fixes the size of an empty vendor_cert or dbx_cert. Signed-off-by: Peter Jones <shim-owner@fedoraproject.org>
2013-05-15Use the correct define on Open.Peter Jones
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-15Add some error messages when things don't work.Peter Jones
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-05-15Remove some unnecessary code.Peter Jones
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-05-15Fix some minor type errors.Peter Jones
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-04-30Make shim use fallback when appropriate.Peter Jones
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-30Adopt the UEFI shell style LoadOptionsGary Ching-Pang Lin
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-26Get rid of extra label.Peter Jones
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-04-26Don't put the directory in the file path twice.Peter Jones
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-26UEFI Shell sticks the UCS2 of li->FilePath in li->LoadOptions. Ignore it.Peter Jones
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-01-03Add support for deleting specific keysGary Ching-Pang Lin
2012-12-10Get the second stage loader from the Load OptionsGary Ching-Pang Lin
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-11-27Remove debug codeMatthew Garrett
secure_mode() was altered to always return true for debug purposes, and this accidentally got committed to mainline. Fix that.
2012-11-26Sign MokManager with a locally-generated keyMatthew Garrett
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-01Merge branch 'mok' into netbootMatthew Garrett
Conflicts: shim.c
2012-11-01Add commentsMatthew Garrett
2012-11-01Merge branch 'mok' into netbootMatthew Garrett
Conflicts: Makefile shim.c
2012-11-01Fix AuthenticodeVerify loopMatthew Garrett
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-01Fix signature checkingMatthew Garrett
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-01Fix double freeMatthew Garrett
load_image() didn't allocate PathName, don't have it free it.
2012-11-01Fix up some typesMatthew Garrett
Type-checking the UEFI calls picked up a couple of problems. Fix them up.
2012-10-30Merge branch 'mok' of github.com:mjg59/shim into mokMatthew Garrett
2012-10-30Check the vendor blacklist correctlyGary Ching-Pang Lin
2012-10-24Boot unsigned binaries if we're not in secure modeMatthew Garrett
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-24Miscellaneous small fixupsMatthew Garrett
Fixes for some small bugs noticed during review
2012-10-23Merge branch 'mok' of github.com:mjg59/shim into mokMatthew Garrett
2012-10-23Clean up checks for MokManager entryMatthew Garrett
Add a helper function and tidy up the calls for getting into MokManager
2012-10-23Support a vendor-specific DBX list.Peter Jones
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-18Add MOK password authMatthew Garrett
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-18Skip signature checking if insecureMatthew Garrett
If we're configured to run untrusted code, print a message and skip the validation checks.
2012-10-18Add support for disabling signature verificationMatthew Garrett
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-12Add draft version of Neil's netboot codeMatthew Garrett
2012-10-12Remove LoadImage/StartImage supportMatthew Garrett
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-12Switch to using db format for MokList and MokNewMatthew Garrett
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.