|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86/EFI: add code interfacing with the secure boot shim
On 06/12/2012 13:05, "Jan Beulich" <JBeulich@xxxxxxxx> wrote:
> ... to validate the kernel image (which is required to be in PE
> format, as is e.g. the case for the Linux bzImage when built with
> CONFIG_EFI_STUB).
>
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Acked-by: Keir Fraser <keir@xxxxxxx>
> --- a/xen/arch/x86/efi/boot.c
> +++ b/xen/arch/x86/efi/boot.c
> @@ -24,6 +24,18 @@
> #include <asm/msr.h>
> #include <asm/processor.h>
>
> +#define SHIM_LOCK_PROTOCOL_GUID \
> + { 0x605dab50, 0xe046, 0x4300, {0xab, 0xb6, 0x3d, 0xd8, 0x10, 0xdd, 0x8b,
> 0x23} }
> +
> +typedef EFI_STATUS
> +(/* _not_ EFIAPI */ *EFI_SHIM_LOCK_VERIFY) (
> + IN VOID *Buffer,
> + IN UINT32 Size);
> +
> +typedef struct {
> + EFI_SHIM_LOCK_VERIFY Verify;
> +} EFI_SHIM_LOCK_PROTOCOL;
> +
> extern char start[];
> extern u32 cpuid_ext_features;
>
> @@ -640,12 +652,14 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SY
> static EFI_GUID __initdata gop_guid = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
> static EFI_GUID __initdata bio_guid = BLOCK_IO_PROTOCOL;
> static EFI_GUID __initdata devp_guid = DEVICE_PATH_PROTOCOL;
> + static EFI_GUID __initdata shim_lock_guid = SHIM_LOCK_PROTOCOL_GUID;
> EFI_LOADED_IMAGE *loaded_image;
> EFI_STATUS status;
> unsigned int i, argc;
> CHAR16 **argv, *file_name, *cfg_file_name = NULL;
> UINTN cols, rows, depth, size, map_key, info_size, gop_mode = ~0;
> EFI_HANDLE *handles = NULL;
> + EFI_SHIM_LOCK_PROTOCOL *shim_lock;
> EFI_GRAPHICS_OUTPUT_PROTOCOL *gop = NULL;
> EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *mode_info;
> EFI_FILE_HANDLE dir_handle;
> @@ -835,6 +849,11 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SY
> read_file(dir_handle, s2w(&name), &kernel);
> efi_bs->FreePool(name.w);
>
> + if ( !EFI_ERROR(efi_bs->LocateProtocol(&shim_lock_guid, NULL,
> + (void **)&shim_lock)) &&
> + shim_lock->Verify(kernel.ptr, kernel.size) != EFI_SUCCESS )
> + blexit(L"Dom0 kernel image could not be verified\r\n");
> +
> name.s = get_value(&cfg, section.s, "ramdisk");
> if ( name.s )
> {
>
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |