Commit Graph

75 Commits

Author SHA1 Message Date
Steve McIntyre
fd2d9f032c New upstream version 15.8 2024-05-03 16:02:10 +01:00
Steve McIntyre
2dd2f7600d New upstream version 15.7 2023-01-22 13:05:10 +00:00
Steve McIntyre
e6ace38abd New upstream version 15.6 2022-06-23 00:16:56 +01:00
Steve McIntyre
8529e0f7f7 New upstream version 15.5 2022-04-27 22:41:59 +01:00
Steve McIntyre
8119f7183f New upstream version 15.4 2021-03-31 18:24:24 +01:00
Steve McIntyre
031e5cce38 New upstream version 15.3 2021-03-23 23:49:46 +00:00
Mathieu Trudel-Lapierre
f892ac6608 New upstream version 15+1531942534.dd3230d 2018-07-24 16:24:23 -04:00
Mathieu Trudel-Lapierre
6215e920e7 New upstream version 13 2017-09-29 11:20:57 -04:00
Mathieu Trudel-Lapierre
ecc2922605 New upstream version 13~git1506531982.23ce039 2017-09-27 13:09:42 -04:00
Mathieu Trudel-Lapierre
51d5bbcb24 New upstream version 13~git1505328971.0780644a 2017-09-14 17:48:49 -07:00
Mathieu Trudel-Lapierre
b6f94dbeac New upstream version 13~git1505328970.9c1c35c5 2017-09-13 12:09:40 -07:00
Mathieu Trudel-Lapierre
f4173af1ad New upstream version 12+1501864225.b586175 2017-08-07 17:34:45 -04:00
Mathieu Trudel-Lapierre
62f0afa2ec Import upstream version 0.9+1474479173.6c180c6 2016-09-21 20:29:42 -04:00
Mathieu Trudel-Lapierre
d3819813b8 Import upstream version 0.9+1465500757.14a5905 2016-07-26 12:02:18 -04:00
Peter Jones
7361f67dbd Bump version to 0.8 2014-10-13 16:41:51 -04:00
Peter Jones
7d953d6722 Use -Werror=sign-compare .
I'm going to have to fix any errors that have this anyway, so may as
well do it here properly.

Signed-off-by: Peter Jones <pjones@redhat.com>
2014-10-02 01:01:54 -04:00
Peter Jones
05b61752db Revert header changes
Revert "Do the same for ia32..."
and "Generate a sane PE header on shim, fallback, and MokManager."
This reverts commit 6744a7ef8e.
and commit 0e7ba5947e.

These are premature and I can do this without such drastic measures.

Signed-off-by: Peter Jones <pjones@redhat.com>
2014-09-30 22:49:21 -04:00
Peter Jones
f9d825b242 Do the same for ia32...
Once again, on ia32 this time, we see:

00000120  47 84 00 00 0a 00 00 00  00 00 00 00 00 00 00 00 |G...............|

Which is where the pointer on ia32 for the Base Relocation Table should
be.  It points to 0x8447, which isn't a particularly reasonable address as
numbers go, and happens to have this data there:

00008440  6f 00 6e 00 66 00 69 00  67 00 75 00 72 00 65 00 |o.n.f.i.g.u.r.e.|
00008450  00 00 49 00 50 00 76 00  36 00 28 00 00 00 2c 00 |..I.P.v.6.(...,.|
00008460  25 00 73 00 2c 00 00 00  29 00 00 00 25 00 64 00 |%.s.,...)...%.d.|
00008470  2e 00 25 00 64 00 2e 00  25 00 64 00 2e 00 25 00 |..%.d...%.d...%.|
00008480  64 00 00 00 44 00 48 00  43 00 50 00 00 00 49 00 |d...D.H.C.P...I.|
00008490  50 00 76 00 34 00 28 00  00 00 2c 00 25 00 73 00 |P.v.4.(...,.%.s.|

And so that table is, in theory, this part:

00008447                       00  67 00 75 00 72 00 65 00 |       .g.u.r.e.|
00008450  00                                               |.               |

Which is pretty clearly not a pointer table of any kind.

So give ia32 the same treatment as x86_64, and now all arches work basically
the same.

Signed-off-by: Peter Jones <pjones@redhat.com>
2014-09-21 16:25:27 -04:00
Peter Jones
2c59a1a03a Generate a sane PE header on shim, fallback, and MokManager.
It turns out a7249a65 was masking a second problem - on some binaries,
when we actually don't have any base relocations at all, binutils'
"objcopy --target efi-app-x86_64" is generating a PE header with a base
relocations pointer that happily points into the middle of our text
section.  So with shim processing base relocations correctly, it refuses
to load those binaries.

For example, on one binary I just built:

00000130  00 a0 00 00 0a 00 00 00  00 00 00 00 00 00 00 00 |................|

which says there's a Base Relocation Table at 0xa000 that's 0xa bytes long.
That's here:

0000a000  58 00 29 00 00 00 00 00  48 00 44 00 28 00 50 00 |X.).....H.D.(.P.|
0000a010  61 00 72 00 74 00 25 00  64 00 2c 00 53 00 69 00 |a.r.t.%.d.,.S.i.|
0000a020  67 00 25 00 67 00 29 00  00 00 00 00 00 00 00 00 |g.%.g.).........|
0000a030  48 00 44 00 28 00 50 00  61 00 72 00 74 00 25 00 |H.D.(.P.a.r.t.%.|

So the table is:

0000a000  58 00 29 00 00 00 00 00  48 00                   |X.).....H.      |

That wouldn't be so bad, except those binaries are MokManager.efi,
fallback.efi, and shim.efi, and sometimes they're .reloc, which we're
actually trying to handle correctly now because grub builds with a real
and valid .reloc table.  So though I didn't think there was any hair
left on this yak, more shaving ensues.

With this change, instead of letting objcopy do whatever it likes, we
switch to "-O binary" and merely link in a header that's appropriate for
our binaries.  This is the same method Ard wrote for aarch64, and it
seems to work fine in either place (modulo some minor changes.)

At some point this should be merged into gnu-efi instead of carrying our
own crt0-efi-x86_64.S, but that's a less immediate problem.

I did not need this problem.

Signed-off-by: Peter Jones <pjones@redhat.com>
2014-09-21 16:25:27 -04:00
Ard Biesheuvel
221faac51b Add support for 32-bit ARM
This adds support for building the shim for a 32-bit ARM UEFI environment.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
2014-08-12 10:54:05 -04:00
Ard Biesheuvel
9196c7cfbc Add support for 64-bit ARM (AArch64)
This adds support for building the shim for a 64-bit ARM UEFI environment.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
2014-08-12 10:54:05 -04:00
Ard Biesheuvel
f7a182154e Factor out x86-isms and add cross compile support
This patch cleans up and refactors the Makefiles to better allow new
architectures to be added:
- remove unused Makefile definitions
- import Makefile definitions from top level rather than redefining
- move x86 specific CFLAGS to inside ifeq() blocks
- remove x86 inline asm
- allow $(FORMAT) to be overridden: this is necessary as there exists no
  EFI or PE/COFF aware objcopy for ARM

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
2014-08-12 10:54:05 -04:00
Gary Ching-Pang Lin
ea1c89b047 Exclude ca.crt while signing EFI images
If ca.crt was added into the certificate database, ca.crt would be the first
certificate in the signature. Because shim couldn't verify ca.crt with the
embedded shim.cer, it failed to load MokManager.efi.signed and
fallback.efi.signed.

Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
2014-06-25 10:03:08 -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
Andrew Boie
6caa9bad71 allow 32-bit compilation with 64-bit compiler
Also removed unused LIB_PATH from some Makefiles.

Change-Id: I7d28d18f7531b51b6121a2ffb88bcaedec57c467
Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2013-11-12 10:31:59 -05:00
Andrew Boie
cfac0bb9f4 propagate some path variables
If these are overridden on the command line, pass them along to
the sub-makes.

Change-Id: I531ccb5d2f5e4be8e99d4892cdcfffffc1ad9877
Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2013-11-12 10:30:53 -05:00
Andrew Boie
663b2b931f fix fallback.so build dependency
Exposed during parallel builds

Change-Id: I9867858166dcafd69438f37ee5da14a267ace8f4
Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2013-11-12 10:30:30 -05:00
Peter Jones
6ae4e4f946 Bump version to 0.7.
Do not use 0.6; on some machines it misunderstands the SetupMode
variable.

Signed-off-by: Peter Jones <pjones@redhat.com>
2013-11-06 14:07:05 -05:00
Peter Jones
acac338094 Make tag its own make target, and make it sign tags.
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-10-31 11:16:32 -04:00
Peter Jones
b2dd861413 Bump version to 0.6
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-10-31 11:12:24 -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
Peter Jones
ee4deae045 Bump version to 0.5
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-10-04 17:04:21 -04:00
Peter Jones
0fb089ee14 Add ident-like blobs to shim.efi for version checking.
I feel dirty.
2013-10-03 11:11:09 -04:00
Peter Jones
2892db7fda Remove "shim.cer" on "make clean".
If we don't do this, an old key winds up being reused and
MokManager.efi.signed is signed with a different key than shim_cert
reflects.

Signed-off-by: Peter Jones <pjones@redhat.com>
2013-10-02 10:48:41 -04:00
Peter Jones
bb2fe4cfb3 Conditionalize overriding the security policy.
Make OVERRIDE_SECURITY_POLICY a build option.

Signed-off-by: Peter Jones <pjones@redhat.com>
2013-10-01 14:03:16 -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
cbef697a96 Harden shim against non-participating bootloaders.
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-01 14:03:16 -04:00
Peter Jones
a1f2863584 Make vendor_cert/vendor_dbx actually replaceable by an external tool.
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-10-01 14:03:16 -04:00
Peter Jones
6d6aff1bab Clean up tarballs in "make clean"
Signed-off-by: Peter Jones <pjones@redhat.com>
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
Peter Jones
40375a8bea Merge two PeImage.h into one
Conflicts:
	Makefile
2013-09-26 11:58:02 -04:00
Peter Jones
e053c22701 Since different distros name grub*.efi differently, make it compile-time.
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-26 11:58:02 -04:00
Gary Ching-Pang Lin
114dad494c MokManager: support blowfish-based crypt() hash
Conflicts:
	Makefile
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
5e9fee2158 Make EFI_PATH easily resettable from the build command line.
Signed-off-by: Peter Jones <pjones@redhat.com>
2013-09-26 11:58:01 -04:00
Gary Ching-Pang Lin
cdd2dc9132 Clean lib/, too 2013-09-26 11:58:01 -04:00
Matthew Garrett
17857eb8b5 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.
2013-09-26 11:57:59 -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