Merge branch 'x86-txt-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

* '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

+37 -17
+9 -7
Documentation/intel_txt.txt
··· 161 has been restored, it will restore the TPM PCRs and then 162 transfer control back to the kernel's S3 resume vector. 163 In order to preserve system integrity across S3, the kernel 164 - provides tboot with a set of memory ranges (kernel 165 - code/data/bss, S3 resume code, and AP trampoline) that tboot 166 - will calculate a MAC (message authentication code) over and then 167 - seal with the TPM. On resume and once the measured environment 168 - has been re-established, tboot will re-calculate the MAC and 169 - verify it against the sealed value. Tboot's policy determines 170 - what happens if the verification fails. 171 172 That's pretty much it for TXT support. 173
··· 161 has been restored, it will restore the TPM PCRs and then 162 transfer control back to the kernel's S3 resume vector. 163 In order to preserve system integrity across S3, the kernel 164 + provides tboot with a set of memory ranges (RAM and RESERVED_KERN 165 + in the e820 table, but not any memory that BIOS might alter over 166 + the S3 transition) that tboot will calculate a MAC (message 167 + authentication code) over and then seal with the TPM. On resume 168 + and once the measured environment has been re-established, tboot 169 + will re-calculate the MAC and verify it against the sealed value. 170 + Tboot's policy determines what happens if the verification fails. 171 + Note that the c/s 194 of tboot which has the new MAC code supports 172 + this. 173 174 That's pretty much it for TXT support. 175
+11
MAINTAINERS
··· 2953 F: Documentation/networking/README.ipw2200 2954 F: drivers/net/wireless/ipw2x00/ipw2200.* 2955 2956 INTEL WIRELESS WIMAX CONNECTION 2400 2957 M: Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com> 2958 M: linux-wimax@intel.com
··· 2953 F: Documentation/networking/README.ipw2200 2954 F: drivers/net/wireless/ipw2x00/ipw2200.* 2955 2956 + INTEL(R) TRUSTED EXECUTION TECHNOLOGY (TXT) 2957 + M: Joseph Cihula <joseph.cihula@intel.com> 2958 + M: Shane Wang <shane.wang@intel.com> 2959 + L: tboot-devel@lists.sourceforge.net 2960 + W: http://tboot.sourceforge.net 2961 + T: Mercurial http://www.bughost.org/repos.hg/tboot.hg 2962 + S: Supported 2963 + F: Documentation/intel_txt.txt 2964 + F: include/linux/tboot.h 2965 + F: arch/x86/kernel/tboot.c 2966 + 2967 INTEL WIRELESS WIMAX CONNECTION 2400 2968 M: Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com> 2969 M: linux-wimax@intel.com
+6 -1
arch/x86/include/asm/e820.h
··· 45 #define E820_NVS 4 46 #define E820_UNUSABLE 5 47 48 - /* reserved RAM used by kernel itself */ 49 #define E820_RESERVED_KERN 128 50 51 #ifndef __ASSEMBLY__
··· 45 #define E820_NVS 4 46 #define E820_UNUSABLE 5 47 48 + /* 49 + * reserved RAM used by kernel itself 50 + * if CONFIG_INTEL_TXT is enabled, memory of this type will be 51 + * included in the S3 integrity calculation and so should not include 52 + * any memory that BIOS might alter over the S3 transition 53 + */ 54 #define E820_RESERVED_KERN 128 55 56 #ifndef __ASSEMBLY__
+11 -9
arch/x86/kernel/tboot.c
··· 175 struct tboot_mac_region *mr; 176 phys_addr_t end = start + size; 177 178 if (start && size) { 179 mr = &tboot->mac_regions[tboot->num_mac_regions++]; 180 mr->start = round_down(start, PAGE_SIZE); ··· 187 188 static int tboot_setup_sleep(void) 189 { 190 tboot->num_mac_regions = 0; 191 192 - /* S3 resume code */ 193 - add_mac_region(acpi_wakeup_address, WAKEUP_SIZE); 194 195 - #ifdef CONFIG_X86_TRAMPOLINE 196 - /* AP trampoline code */ 197 - add_mac_region(virt_to_phys(trampoline_base), TRAMPOLINE_SIZE); 198 - #endif 199 - 200 - /* kernel code + data + bss */ 201 - add_mac_region(virt_to_phys(_text), _end - _text); 202 203 tboot->acpi_sinfo.kernel_s3_resume_vector = acpi_wakeup_address; 204
··· 175 struct tboot_mac_region *mr; 176 phys_addr_t end = start + size; 177 178 + if (tboot->num_mac_regions >= MAX_TB_MAC_REGIONS) 179 + panic("tboot: Too many MAC regions\n"); 180 + 181 if (start && size) { 182 mr = &tboot->mac_regions[tboot->num_mac_regions++]; 183 mr->start = round_down(start, PAGE_SIZE); ··· 184 185 static int tboot_setup_sleep(void) 186 { 187 + int i; 188 + 189 tboot->num_mac_regions = 0; 190 191 + for (i = 0; i < e820.nr_map; i++) { 192 + if ((e820.map[i].type != E820_RAM) 193 + && (e820.map[i].type != E820_RESERVED_KERN)) 194 + continue; 195 196 + add_mac_region(e820.map[i].addr, e820.map[i].size); 197 + } 198 199 tboot->acpi_sinfo.kernel_s3_resume_vector = acpi_wakeup_address; 200