From: Mark Gross <[email protected]> The tboot->shutdown_entry is effectively bios code and CET needs to be disabled before calling it.
It resolves TBOOT shutdown failure bug, reported on the SLES (SUSE Linux Enterprise Server) 16.0 OS. OS power off, called by the "init 0" command, was failing, due to activated Intel Control-Flow Enforcement Technology (CET). Disabling CET has allowed to execute OS and TBOOT shutdown properly. Closes: https://bugzilla.suse.com/show_bug.cgi?id=1247950 Signed-off-by: Mark Gross <[email protected]> Signed-off-by: Michal Camacho Romero <[email protected]> --- arch/x86/kernel/tboot.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/x86/kernel/tboot.c b/arch/x86/kernel/tboot.c index 46b8f1f16676..73396c43a7ad 100644 --- a/arch/x86/kernel/tboot.c +++ b/arch/x86/kernel/tboot.c @@ -28,6 +28,7 @@ #include <asm/setup.h> #include <asm/e820/api.h> #include <asm/io.h> +#include <asm/cpu.h> #include "../realmode/rm/wakeup.h" @@ -247,6 +248,10 @@ void tboot_shutdown(u32 shutdown_type) switch_to_tboot_pt(); + /* + * toggle off CET while we call shutdown_entry in bios + */ + cet_disable(); shutdown = (void(*)(void))(unsigned long)tboot->shutdown_entry; shutdown(); -- 2.43.0 _______________________________________________ tboot-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/tboot-devel
