Skip to content

Commit

Permalink
x86, intel_txt: Intel TXT reboot/halt shutdown support
Browse files Browse the repository at this point in the history
Support for graceful handling of kernel reboots after an Intel(R) TXT launch.

Without this patch, attempting to reboot or halt the system will cause the
TXT hardware to lock memory upon system restart because the secrets-in-memory
flag that was set on launch was never cleared.  This will in turn cause BIOS
to execute a TXT Authenticated Code Module (ACM) that will scrub all of memory
and then unlock it.  Depending on the amount of memory in the system and its type,
this may take some time.

This patch creates a 1:1 address mapping to the tboot module and then calls back
into tboot so that it may properly and securely clean up system state and clear
the secrets-in-memory flag.  When it has completed these steps, the tboot module
will reboot or halt the system.

 arch/x86/kernel/reboot.c |    8 ++++++++
 init/main.c              |    3 +++
 2 files changed, 11 insertions(+)

Signed-off-by: Joseph Cihula <joseph.cihula@intel.com>
Signed-off-by: Shane Wang <shane.wang@intel.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
  • Loading branch information
jcihula authored and H. Peter Anvin committed Jul 21, 2009
1 parent 3162534 commit 840c2ba
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 0 deletions.
8 changes: 8 additions & 0 deletions arch/x86/kernel/reboot.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
# include <asm/iommu.h>
#endif

#include <asm/tboot.h>

/*
* Power off function, if any
*/
Expand Down Expand Up @@ -460,6 +462,8 @@ static void native_machine_emergency_restart(void)
if (reboot_emergency)
emergency_vmx_disable_all();

tboot_shutdown(TB_SHUTDOWN_REBOOT);

/* Tell the BIOS if we want cold or warm reboot */
*((unsigned short *)__va(0x472)) = reboot_mode;

Expand Down Expand Up @@ -586,6 +590,8 @@ static void native_machine_halt(void)
/* stop other cpus and apics */
machine_shutdown();

tboot_shutdown(TB_SHUTDOWN_HALT);

/* stop this cpu */
stop_this_cpu(NULL);
}
Expand All @@ -597,6 +603,8 @@ static void native_machine_power_off(void)
machine_shutdown();
pm_power_off();
}
/* a fallback in case there is no PM info available */
tboot_shutdown(TB_SHUTDOWN_HALT);
}

struct machine_ops machine_ops = {
Expand Down
3 changes: 3 additions & 0 deletions init/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@
#include <asm/io.h>
#include <asm/bugs.h>
#include <asm/setup.h>
#include <asm/tboot.h>
#include <asm/sections.h>
#include <asm/cacheflush.h>

Expand Down Expand Up @@ -715,6 +716,8 @@ asmlinkage void __init start_kernel(void)

ftrace_init();

tboot_create_trampoline();

/* Do the rest non-__init'ed, we're now alive */
rest_init();
}
Expand Down

0 comments on commit 840c2ba

Please sign in to comment.