Commit Graph

89 Commits

Author SHA1 Message Date
Gary Ching-Pang Lin
dcc523811b MokManager: handle the error status from ReadKeyStroke
On some machines, even though the key event was signaled, ReadKeyStroke
still got EFI_NOT_READY. This commit handles the error status to avoid
console_get_keystroke from returning unexpected keys.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>

Conflicts:
	MokManager.c
2014-06-25 10:02:18 -04:00
Gary Ching-Pang Lin
38fe58d33a MokManager: delete the BS+NV variables the right way
LibDeleteVariable assumes that the variable is RT+NV and it
won't work on a BS+NV variable.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2014-06-25 09:57:10 -04:00
Gary Ching-Pang Lin
b8070380ee Check the first 4 bytes of the certificate
A non-DER encoding x509 certificate may be mistakenly enrolled into
db or MokList. This commit checks the first 4 bytes of the certificate
to ensure that it's DER encoding.

This commit also removes the iteration of the x509 signature list.
Per UEFI SPEC, each x509 signature list contains only one x509 certificate.
Besides, the size of certificate is incorrect. The size of the header must
be substracted from the signature size.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2014-06-25 09:55:49 -04:00
Kees Cook
47a9d2c908 additional bounds-checking on section sizes
This adds additional bounds-checking on the section sizes. Also adds
-Wsign-compare to the Makefile and replaces some signed variables with
unsigned counteparts for robustness.

Signed-off-by: Kees Cook <kees@ubuntu.com>
2014-04-11 14:41:22 -04:00
Peter Jones
cf718e1940 Revert "additional bounds-checking on section sizes"
This reverts commit 21e40f0174.

In principle I like the idea of what's going on here, but
generate_hash() really does need to have the expected result.
2013-10-23 10:50:36 -04:00
Kees Cook
a0df78b73f additional bounds-checking on section sizes
This adds additional bounds-checking on the section sizes. Also adds
-Wsign-compare to the Makefile and replaces some signed variables with
unsigned counteparts for robustness.

Signed-off-by: Kees Cook <kees@ubuntu.com>
2013-10-22 11:23:51 -04:00
Josh Boyer
47ebeb6262 Add support for disabling db for verification
Provide a mechanism for a physically present end user to disable the use
of db when doing 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 the use of db for verification purposes (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 cause shim to not use db for verification purposes.  If
db is to be ignored, shim will export a runtime variable called
'MokIgnoreDB' for the OS to query at runtime.

Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
2013-10-02 11:29:34 -04:00
Peter Jones
417077f8de Merge console_control.h and console.h
Since these are topically the same thing, they can live together.

Signed-off-by: Peter Jones <pjones@redhat.com>
2013-10-01 14:03:16 -04:00
Peter Jones
bc71a15ed5 Make verbose stuff use console_notify
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-10-01 14:03:16 -04:00
Peter Jones
124a3c208e MokManager needs to disable the graphics console.
Without this patch, on some machines we never see MokManager's UI.  This
protocol has never (I think?) been officially published, and yet I still
have new hardware that needs it.

If you're looking for a reference, look at:

EdkCompatibilityPkg/Foundation/Protocol/ConsoleControl/ConsoleControl.c

in the edk2 tree from Tiano.

Signed-off-by: Peter Jones <pjones@redhat.com>
2013-10-01 14:03:16 -04:00
Peter Jones
8317a1f0ad Don't use LibGetVariable(), since it doesn't give us real error codes. 2013-09-26 13:44:05 -04:00
Gary Ching-Pang Lin
7f0208a0f9 Merge variable retrieving functions 2013-09-26 11:58:02 -04:00
Gary Ching-Pang Lin
53862ddace Merge signature.h into efiauthenticated.h and guid.h
Conflicts:
	shim.c
2013-09-26 11:58:02 -04:00
Gary Ching-Pang Lin
71e70c72df MokManager: check the suffix of the key file 2013-09-26 11:58:02 -04:00
Gary Ching-Pang Lin
913f33d366 MokManager: fetch more info from X509 name 2013-09-26 11:58:02 -04:00
Gary Ching-Pang Lin
2648d29f00 MokManager: reboot the system after clearing MOK password 2013-09-26 11:58:02 -04:00
Gary Ching-Pang Lin
5f7ade1950 MokManager: enhance the password prompt for SB state 2013-09-26 11:58:02 -04:00
Gary Ching-Pang Lin
7ed6b96365 MokManager: rearrange the output of MOK info 2013-09-26 11:58:02 -04:00
Gary Ching-Pang Lin
5326c090be MokManager: enhance the password prompt 2013-09-26 11:58:02 -04:00
Gary Ching-Pang Lin
44d7d0e668 MokManager: remove the duplicate get_keystroke() 2013-09-26 11:58:02 -04:00
Gary Ching-Pang Lin
9a86568e19 MokManager: draw the countdown screen 2013-09-26 11:58:02 -04:00
Gary Ching-Pang Lin
8371c49ce7 MokManager: Remove the unnecessary string duplication 2013-09-26 11:58:02 -04:00
Gary Ching-Pang Lin
5a89835189 MokManager: support SHA512-based crypt() hash 2013-09-26 11:58:01 -04:00
Gary Ching-Pang Lin
3a838b14f0 MokManager: support crypt() password hash
The password format is introduced for the password hash generated by crypt(),
so that the user can import the password hash from /etc/shadow. The packager,
especially those who packages 3rd party drivers, can utilize this feature to
import a 3rd party certificate without interfering the package installation.

This commit implements the sha256-based crypt() hash function.

Conflicts:
	Makefile
	MokManager.c
2013-09-26 11:58:01 -04:00
Peter Jones
2aa2ddd8a8 Port MokManager to Linux Foundation loader UI code
This is the first stage of porting the MokManager UI to the UI code used
by the Linux Foundation UEFI loader.

Conflicts:
	MokManager.c
2013-09-26 11:57:51 -04:00
Peter Jones
227d13a2d9 We have to declare SHIM_LOCK_GUID here as well.
Signed-off-by: Peter Jones <pjones@redhat.com>

Conflicts:
	MokManager.c
2013-09-26 11:56:52 -04:00
Peter Jones
a869915a1d MokManager needs to disable the graphics console.
Without this patch, on some machines we never see MokManager's UI.  This
protocol has never (I think?) been officially published, and yet I still
have new hardware that needs it.

If you're looking for a reference, look at:

EdkCompatibilityPkg/Foundation/Protocol/ConsoleControl/ConsoleControl.c

in the edk2 tree from Tiano.

Signed-off-by: Peter Jones <pjones@redhat.com>
2013-09-26 09:56:26 -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
Matthew Garrett
ed711b02ec 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
d77f421bcc 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
8a1690683f 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
6e05b32d07 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
254c04bcdd 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
79a5aa039d Update image validation enable/disable
Update this to match the new mokutil behaviour
2012-10-23 15:43:10 -04:00
Matthew Garrett
868d5b9038 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
3a59336199 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
Matthew Garrett
34f0c4abc0 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
16c512f9b5 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
37635f5414 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
801d1b936b 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
d08ea5363c 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
9272bc5b84 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
1bc1cd96e4 Add section headers
Provide a little more contextual information when people are in shim
menus.
2012-10-13 01:07:43 -04:00
Gary Ching-Pang Lin
e65370d770 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
0a6565c5ed 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