From: David Howells <dhowells@redhat.com> To: lukas@wunner.de Cc: linux-efi@vger.kernel.org, linux-kernel@vger.kernel.org, dhowells@redhat.com, linux-security-module@vger.kernel.org, keyrings@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH 2/7] x86/efi: Allow invocation of arbitrary runtime services [ver #3] Date: Wed, 23 Nov 2016 12:53:48 +0000 [thread overview] Message-ID: <147990562795.7576.18368336842576716129.stgit@warthog.procyon.org.uk> (raw) In-Reply-To: <147990561294.7576.6464430479448167484.stgit@warthog.procyon.org.uk> Provide the ability to perform mixed-mode runtime service calls for x86 in the same way that commit 0a637ee61247bd4bed9b2a07568ef7a1cfc76187 ("x86/efi: Allow invocation of arbitrary boot services") provides the ability to invoke arbitrary boot services. Suggested-by: Lukas Wunner <lukas@wunner.de> Signed-off-by: David Howells <dhowells@redhat.com> --- arch/x86/boot/compressed/eboot.c | 1 + arch/x86/boot/compressed/head_32.S | 6 +++--- arch/x86/boot/compressed/head_64.S | 8 ++++---- arch/x86/include/asm/efi.h | 5 +++++ 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c index ff01c8fc76f7..c8c32ebcdfdb 100644 --- a/arch/x86/boot/compressed/eboot.c +++ b/arch/x86/boot/compressed/eboot.c @@ -32,6 +32,7 @@ static void setup_boot_services##bits(struct efi_config *c) \ \ table = (typeof(table))sys_table; \ \ + c->runtime_services = table->runtime; \ c->boot_services = table->boottime; \ c->text_output = table->con_out; \ } diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S index fd0b6a272dd5..d85b9625e836 100644 --- a/arch/x86/boot/compressed/head_32.S +++ b/arch/x86/boot/compressed/head_32.S @@ -82,7 +82,7 @@ ENTRY(efi_pe_entry) /* Relocate efi_config->call() */ leal efi32_config(%esi), %eax - add %esi, 32(%eax) + add %esi, 40(%eax) pushl %eax call make_boot_params @@ -108,7 +108,7 @@ ENTRY(efi32_stub_entry) /* Relocate efi_config->call() */ leal efi32_config(%esi), %eax - add %esi, 32(%eax) + add %esi, 40(%eax) pushl %eax 2: call efi_main @@ -264,7 +264,7 @@ relocated: #ifdef CONFIG_EFI_STUB .data efi32_config: - .fill 4,8,0 + .fill 5,8,0 .long efi_call_phys .long 0 .byte 0 diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S index efdfba21a5b2..beab8322f72a 100644 --- a/arch/x86/boot/compressed/head_64.S +++ b/arch/x86/boot/compressed/head_64.S @@ -265,7 +265,7 @@ ENTRY(efi_pe_entry) /* * Relocate efi_config->call(). */ - addq %rbp, efi64_config+32(%rip) + addq %rbp, efi64_config+40(%rip) movq %rax, %rdi call make_boot_params @@ -285,7 +285,7 @@ handover_entry: * Relocate efi_config->call(). */ movq efi_config(%rip), %rax - addq %rbp, 32(%rax) + addq %rbp, 40(%rax) 2: movq efi_config(%rip), %rdi call efi_main @@ -457,14 +457,14 @@ efi_config: #ifdef CONFIG_EFI_MIXED .global efi32_config efi32_config: - .fill 4,8,0 + .fill 5,8,0 .quad efi64_thunk .byte 0 #endif .global efi64_config efi64_config: - .fill 4,8,0 + .fill 5,8,0 .quad efi_call .byte 1 #endif /* CONFIG_EFI_STUB */ diff --git a/arch/x86/include/asm/efi.h b/arch/x86/include/asm/efi.h index e99675b9c861..2f77bcefe6b4 100644 --- a/arch/x86/include/asm/efi.h +++ b/arch/x86/include/asm/efi.h @@ -191,6 +191,7 @@ static inline efi_status_t efi_thunk_set_virtual_address_map( struct efi_config { u64 image_handle; u64 table; + u64 runtime_services; u64 boot_services; u64 text_output; efi_status_t (*call)(unsigned long, ...); @@ -226,6 +227,10 @@ static inline bool efi_is_64bit(void) #define __efi_call_early(f, ...) \ __efi_early()->call((unsigned long)f, __VA_ARGS__); +#define efi_call_runtime(f, ...) \ + __efi_early()->call(efi_table_attr(efi_runtime_services, f, \ + __efi_early()->runtime_services), __VA_ARGS__) + extern bool efi_reboot_required(void); #else
WARNING: multiple messages have this Message-ID (diff)
From: dhowells@redhat.com (David Howells) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 2/7] x86/efi: Allow invocation of arbitrary runtime services [ver #3] Date: Wed, 23 Nov 2016 12:53:48 +0000 [thread overview] Message-ID: <147990562795.7576.18368336842576716129.stgit@warthog.procyon.org.uk> (raw) In-Reply-To: <147990561294.7576.6464430479448167484.stgit@warthog.procyon.org.uk> Provide the ability to perform mixed-mode runtime service calls for x86 in the same way that commit 0a637ee61247bd4bed9b2a07568ef7a1cfc76187 ("x86/efi: Allow invocation of arbitrary boot services") provides the ability to invoke arbitrary boot services. Suggested-by: Lukas Wunner <lukas@wunner.de> Signed-off-by: David Howells <dhowells@redhat.com> --- arch/x86/boot/compressed/eboot.c | 1 + arch/x86/boot/compressed/head_32.S | 6 +++--- arch/x86/boot/compressed/head_64.S | 8 ++++---- arch/x86/include/asm/efi.h | 5 +++++ 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c index ff01c8fc76f7..c8c32ebcdfdb 100644 --- a/arch/x86/boot/compressed/eboot.c +++ b/arch/x86/boot/compressed/eboot.c @@ -32,6 +32,7 @@ static void setup_boot_services##bits(struct efi_config *c) \ \ table = (typeof(table))sys_table; \ \ + c->runtime_services = table->runtime; \ c->boot_services = table->boottime; \ c->text_output = table->con_out; \ } diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S index fd0b6a272dd5..d85b9625e836 100644 --- a/arch/x86/boot/compressed/head_32.S +++ b/arch/x86/boot/compressed/head_32.S @@ -82,7 +82,7 @@ ENTRY(efi_pe_entry) /* Relocate efi_config->call() */ leal efi32_config(%esi), %eax - add %esi, 32(%eax) + add %esi, 40(%eax) pushl %eax call make_boot_params @@ -108,7 +108,7 @@ ENTRY(efi32_stub_entry) /* Relocate efi_config->call() */ leal efi32_config(%esi), %eax - add %esi, 32(%eax) + add %esi, 40(%eax) pushl %eax 2: call efi_main @@ -264,7 +264,7 @@ relocated: #ifdef CONFIG_EFI_STUB .data efi32_config: - .fill 4,8,0 + .fill 5,8,0 .long efi_call_phys .long 0 .byte 0 diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S index efdfba21a5b2..beab8322f72a 100644 --- a/arch/x86/boot/compressed/head_64.S +++ b/arch/x86/boot/compressed/head_64.S @@ -265,7 +265,7 @@ ENTRY(efi_pe_entry) /* * Relocate efi_config->call(). */ - addq %rbp, efi64_config+32(%rip) + addq %rbp, efi64_config+40(%rip) movq %rax, %rdi call make_boot_params @@ -285,7 +285,7 @@ handover_entry: * Relocate efi_config->call(). */ movq efi_config(%rip), %rax - addq %rbp, 32(%rax) + addq %rbp, 40(%rax) 2: movq efi_config(%rip), %rdi call efi_main @@ -457,14 +457,14 @@ efi_config: #ifdef CONFIG_EFI_MIXED .global efi32_config efi32_config: - .fill 4,8,0 + .fill 5,8,0 .quad efi64_thunk .byte 0 #endif .global efi64_config efi64_config: - .fill 4,8,0 + .fill 5,8,0 .quad efi_call .byte 1 #endif /* CONFIG_EFI_STUB */ diff --git a/arch/x86/include/asm/efi.h b/arch/x86/include/asm/efi.h index e99675b9c861..2f77bcefe6b4 100644 --- a/arch/x86/include/asm/efi.h +++ b/arch/x86/include/asm/efi.h @@ -191,6 +191,7 @@ static inline efi_status_t efi_thunk_set_virtual_address_map( struct efi_config { u64 image_handle; u64 table; + u64 runtime_services; u64 boot_services; u64 text_output; efi_status_t (*call)(unsigned long, ...); @@ -226,6 +227,10 @@ static inline bool efi_is_64bit(void) #define __efi_call_early(f, ...) \ __efi_early()->call((unsigned long)f, __VA_ARGS__); +#define efi_call_runtime(f, ...) \ + __efi_early()->call(efi_table_attr(efi_runtime_services, f, \ + __efi_early()->runtime_services), __VA_ARGS__) + extern bool efi_reboot_required(void); #else
next prev parent reply other threads:[~2016-11-23 12:53 UTC|newest] Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-11-23 12:53 [PATCH 0/7] efi: Pass secure boot mode to kernel [ver #3] David Howells 2016-11-23 12:53 ` David Howells 2016-11-23 12:53 ` [PATCH 1/7] efi: use typed function pointers for runtime services table " David Howells 2016-11-23 12:53 ` David Howells 2016-11-23 12:53 ` David Howells 2016-11-23 12:53 ` David Howells [this message] 2016-11-23 12:53 ` [PATCH 2/7] x86/efi: Allow invocation of arbitrary runtime services " David Howells 2016-11-23 12:53 ` [PATCH 3/7] arm/efi: " David Howells 2016-11-23 12:53 ` David Howells 2016-11-23 12:54 ` [PATCH 4/7] efi: Add SHIM and image security database GUID definitions " David Howells 2016-11-23 12:54 ` David Howells 2016-11-23 12:54 ` David Howells 2016-11-23 12:54 ` [PATCH 5/7] efi: Get the secure boot status " David Howells 2016-11-23 12:54 ` David Howells 2016-11-24 19:41 ` James Bottomley 2016-11-24 19:41 ` James Bottomley 2016-11-24 19:41 ` James Bottomley 2016-11-25 9:30 ` David Howells 2016-11-25 9:30 ` David Howells 2016-11-25 9:30 ` David Howells 2016-11-25 9:52 ` Ard Biesheuvel 2016-11-25 9:52 ` Ard Biesheuvel 2016-11-25 9:52 ` Ard Biesheuvel 2016-11-25 12:03 ` David Howells 2016-11-25 12:03 ` David Howells 2016-11-25 12:03 ` David Howells 2016-11-25 12:24 ` Ard Biesheuvel 2016-11-25 12:24 ` Ard Biesheuvel 2016-11-25 12:24 ` Ard Biesheuvel 2016-11-25 12:35 ` David Howells 2016-11-25 12:35 ` David Howells 2016-11-25 12:35 ` David Howells 2016-11-25 12:43 ` Ard Biesheuvel 2016-11-25 12:43 ` Ard Biesheuvel 2016-11-25 12:43 ` Ard Biesheuvel 2016-11-25 12:51 ` David Howells 2016-11-25 12:51 ` David Howells 2016-11-25 12:51 ` David Howells 2016-11-25 12:52 ` Ard Biesheuvel 2016-11-25 12:52 ` Ard Biesheuvel 2016-11-25 12:52 ` Ard Biesheuvel 2016-11-25 13:00 ` David Howells 2016-11-25 13:00 ` David Howells 2016-11-25 13:00 ` David Howells 2016-11-25 13:50 ` Ard Biesheuvel 2016-11-25 13:50 ` Ard Biesheuvel 2016-11-25 13:50 ` Ard Biesheuvel 2016-11-25 15:59 ` David Howells 2016-11-25 15:59 ` David Howells 2016-11-25 15:59 ` David Howells 2016-11-25 16:50 ` David Howells 2016-11-25 16:50 ` David Howells 2016-11-25 16:50 ` David Howells 2016-11-25 16:51 ` Ard Biesheuvel 2016-11-25 16:51 ` Ard Biesheuvel 2016-11-25 16:51 ` Ard Biesheuvel 2016-11-25 16:57 ` David Howells 2016-11-25 16:57 ` David Howells 2016-11-25 16:57 ` David Howells 2016-11-23 12:54 ` [PATCH 6/7] efi: Disable secure boot if shim is in insecure mode " David Howells 2016-11-23 12:54 ` David Howells 2016-11-23 12:54 ` [PATCH 7/7] efi: Add EFI_SECURE_BOOT bit " David Howells 2016-11-23 12:54 ` David Howells
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=147990562795.7576.18368336842576716129.stgit@warthog.procyon.org.uk \ --to=dhowells@redhat.com \ --cc=keyrings@vger.kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-efi@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-security-module@vger.kernel.org \ --cc=lukas@wunner.de \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.