On Wed, Nov 22, 2023 at 12:58:26PM +0100, Borislav Petkov wrote: > On Wed, Nov 22, 2023 at 10:15:42AM +0100, Linux regression tracking (Thorsten Leemhuis) wrote: > > [1] unless you fiddle with things obviously internal; not sure if this > > case would qualify for him, but somehow I doubt it -- but I might be > > wrong there. > > Well, think about it - by that logic, if CONFIG_* items are an ABI, we > will never ever be able to change any of them. Now that would be awful. > > > Any progress on this? > > We're thinking... Turns out this is easier than I think and people have solved this problem already - all I need to do is use it. Wonderful. Lemme Cc initramfs@xxxxxxxxxxxxxxx as an FYI and see whether dracut folks would have any comments about this. --- From: "Borislav Petkov (AMD)" <bp@xxxxxxxxx> Date: Wed, 22 Nov 2023 13:59:40 +0100 Add a "x86" ELF note namespace to put ELF note structures with which to communicate in a ABI-compliant manner what a kernel image supports. Also, add the first note type of this - X86_ELFNOTE_MICROCODE - which denotes that microcode support is built into the kernel image and thus initrd-generating tools like dracut can parse the ELF .notes section for this. $ readelf -n vmlinux Displaying notes found in: .notes Owner Data size Description ... x86 0x00000004 Unknown note type: (0x00000000) description data: 01 00 00 00 ^^^^^^^^^^^^^^ Signed-off-by: Borislav Petkov (AMD) <bp@xxxxxxxxx> --- arch/x86/include/uapi/elfnote.h | 18 ++++++++++++++++++ arch/x86/kernel/cpu/microcode/core.c | 5 +++++ 2 files changed, 23 insertions(+) create mode 100644 arch/x86/include/uapi/elfnote.h diff --git a/arch/x86/include/uapi/elfnote.h b/arch/x86/include/uapi/elfnote.h new file mode 100644 index 000000000000..bef26c4944e8 --- /dev/null +++ b/arch/x86/include/uapi/elfnote.h @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _X86_UAPI_ELFNOTE_H_ +#define _X86_UAPI_ELFNOTE_H_ + +/* + * "x86" namespaced ELF note structures to communicate features + * supported by the kernel binary to external utilities which need that + * info in order to do additional preparatory work based on the target + * kernel image. + */ + +/* + * Used by the microcode loader to communicate support to external + * initrd generators like dracut. + */ +#define X86_ELFNOTE_MICROCODE 0 + +#endif /* _X86_UAPI_ELFNOTE_H_ */ diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/microcode/core.c index 232026a239a6..f35444bafbbc 100644 --- a/arch/x86/kernel/cpu/microcode/core.c +++ b/arch/x86/kernel/cpu/microcode/core.c @@ -24,6 +24,7 @@ #include <linux/capability.h> #include <linux/firmware.h> #include <linux/cpumask.h> +#include <linux/elfnote.h> #include <linux/kernel.h> #include <linux/delay.h> #include <linux/mutex.h> @@ -32,6 +33,8 @@ #include <linux/fs.h> #include <linux/mm.h> +#include <uapi/elfnote.h> + #include <asm/apic.h> #include <asm/cpu_device_id.h> #include <asm/perf_event.h> @@ -859,3 +862,5 @@ static int __init microcode_init(void) } late_initcall(microcode_init); + +ELFNOTE32("x86", X86_ELFNOTE_MICROCODE, CONFIG_MICROCODE); -- 2.42.0.rc0.25.ga82fb66fed25 -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette