diff options
author | Juergen Gross <jgross@suse.com> | 2024-11-29 16:15:54 +0100 |
---|---|---|
committer | Juergen Gross <jgross@suse.com> | 2024-12-13 09:28:32 +0100 |
commit | 0ef8047b737d7480a5d4c46d956e97c190f13050 (patch) | |
tree | 34ac003c882605b69761786af8e121a68d1e6e24 /arch/x86/kernel | |
parent | dda014ba59331dee4f3b773a020e109932f4bd24 (diff) | |
download | lwn-0ef8047b737d7480a5d4c46d956e97c190f13050.tar.gz lwn-0ef8047b737d7480a5d4c46d956e97c190f13050.zip |
x86/static-call: provide a way to do very early static-call updates
Add static_call_update_early() for updating static-call targets in
very early boot.
This will be needed for support of Xen guest type specific hypercall
functions.
This is part of XSA-466 / CVE-2024-53241.
Reported-by: Andrew Cooper <andrew.cooper3@citrix.com>
Signed-off-by: Juergen Gross <jgross@suse.com>
Co-developed-by: Peter Zijlstra <peterz@infradead.org>
Co-developed-by: Josh Poimboeuf <jpoimboe@redhat.com>
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r-- | arch/x86/kernel/static_call.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/x86/kernel/static_call.c b/arch/x86/kernel/static_call.c index 4eefaac64c6c..9eed0c144dad 100644 --- a/arch/x86/kernel/static_call.c +++ b/arch/x86/kernel/static_call.c @@ -172,6 +172,15 @@ void arch_static_call_transform(void *site, void *tramp, void *func, bool tail) } EXPORT_SYMBOL_GPL(arch_static_call_transform); +noinstr void __static_call_update_early(void *tramp, void *func) +{ + BUG_ON(system_state != SYSTEM_BOOTING); + BUG_ON(!early_boot_irqs_disabled); + BUG_ON(static_call_initialized); + __text_gen_insn(tramp, JMP32_INSN_OPCODE, tramp, func, JMP32_INSN_SIZE); + sync_core(); +} + #ifdef CONFIG_MITIGATION_RETHUNK /* * This is called by apply_returns() to fix up static call trampolines, |