Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3ae684e1 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'x86-txt-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  x86, tboot: Add support for S3 memory integrity protection
parents c4fd308e 4bd96a7a
Loading
Loading
Loading
Loading
+9 −7
Original line number Original line Diff line number Diff line
@@ -161,13 +161,15 @@ o In order to put a system into any of the sleep states after a TXT
      has been restored, it will restore the TPM PCRs and then
      has been restored, it will restore the TPM PCRs and then
      transfer control back to the kernel's S3 resume vector.
      transfer control back to the kernel's S3 resume vector.
      In order to preserve system integrity across S3, the kernel
      In order to preserve system integrity across S3, the kernel
      provides tboot with a set of memory ranges (kernel
      provides tboot with a set of memory ranges (RAM and RESERVED_KERN
      code/data/bss, S3 resume code, and AP trampoline) that tboot
      in the e820 table, but not any memory that BIOS might alter over
      will calculate a MAC (message authentication code) over and then
      the S3 transition) that tboot will calculate a MAC (message
      seal with the TPM.  On resume and once the measured environment
      authentication code) over and then seal with the TPM. On resume
      has been re-established, tboot will re-calculate the MAC and
      and once the measured environment has been re-established, tboot
      verify it against the sealed value.  Tboot's policy determines
      will re-calculate the MAC and verify it against the sealed value.
      what happens if the verification fails.
      Tboot's policy determines what happens if the verification fails.
      Note that the c/s 194 of tboot which has the new MAC code supports
      this.


That's pretty much it for TXT support.
That's pretty much it for TXT support.


+11 −0
Original line number Original line Diff line number Diff line
@@ -2953,6 +2953,17 @@ S: Odd Fixes
F:	Documentation/networking/README.ipw2200
F:	Documentation/networking/README.ipw2200
F:	drivers/net/wireless/ipw2x00/ipw2200.*
F:	drivers/net/wireless/ipw2x00/ipw2200.*


INTEL(R) TRUSTED EXECUTION TECHNOLOGY (TXT)
M:	Joseph Cihula <joseph.cihula@intel.com>
M:	Shane Wang <shane.wang@intel.com>
L:	tboot-devel@lists.sourceforge.net
W:	http://tboot.sourceforge.net
T:	Mercurial http://www.bughost.org/repos.hg/tboot.hg
S:	Supported
F:	Documentation/intel_txt.txt
F:	include/linux/tboot.h
F:	arch/x86/kernel/tboot.c

INTEL WIRELESS WIMAX CONNECTION 2400
INTEL WIRELESS WIMAX CONNECTION 2400
M:	Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
M:	Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
M:	linux-wimax@intel.com
M:	linux-wimax@intel.com
+6 −1
Original line number Original line Diff line number Diff line
@@ -45,7 +45,12 @@
#define E820_NVS	4
#define E820_NVS	4
#define E820_UNUSABLE	5
#define E820_UNUSABLE	5


/* reserved RAM used by kernel itself */
/*
 * reserved RAM used by kernel itself
 * if CONFIG_INTEL_TXT is enabled, memory of this type will be
 * included in the S3 integrity calculation and so should not include
 * any memory that BIOS might alter over the S3 transition
 */
#define E820_RESERVED_KERN        128
#define E820_RESERVED_KERN        128


#ifndef __ASSEMBLY__
#ifndef __ASSEMBLY__
+11 −9
Original line number Original line Diff line number Diff line
@@ -175,6 +175,9 @@ static void add_mac_region(phys_addr_t start, unsigned long size)
	struct tboot_mac_region *mr;
	struct tboot_mac_region *mr;
	phys_addr_t end = start + size;
	phys_addr_t end = start + size;


	if (tboot->num_mac_regions >= MAX_TB_MAC_REGIONS)
		panic("tboot: Too many MAC regions\n");

	if (start && size) {
	if (start && size) {
		mr = &tboot->mac_regions[tboot->num_mac_regions++];
		mr = &tboot->mac_regions[tboot->num_mac_regions++];
		mr->start = round_down(start, PAGE_SIZE);
		mr->start = round_down(start, PAGE_SIZE);
@@ -184,18 +187,17 @@ static void add_mac_region(phys_addr_t start, unsigned long size)


static int tboot_setup_sleep(void)
static int tboot_setup_sleep(void)
{
{
	int i;

	tboot->num_mac_regions = 0;
	tboot->num_mac_regions = 0;


	/* S3 resume code */
	for (i = 0; i < e820.nr_map; i++) {
	add_mac_region(acpi_wakeup_address, WAKEUP_SIZE);
		if ((e820.map[i].type != E820_RAM)
		 && (e820.map[i].type != E820_RESERVED_KERN))
			continue;


#ifdef CONFIG_X86_TRAMPOLINE
		add_mac_region(e820.map[i].addr, e820.map[i].size);
	/* AP trampoline code */
	}
	add_mac_region(virt_to_phys(trampoline_base), TRAMPOLINE_SIZE);
#endif

	/* kernel code + data + bss */
	add_mac_region(virt_to_phys(_text), _end - _text);


	tboot->acpi_sinfo.kernel_s3_resume_vector = acpi_wakeup_address;
	tboot->acpi_sinfo.kernel_s3_resume_vector = acpi_wakeup_address;