From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tom Lendacky Subject: Re: [PATCH v5 32/32] x86/mm: Add support to make use of Secure Memory Encryption Date: Tue, 30 May 2017 09:38:36 -0500 Message-ID: <7c522f65-c5c8-9362-e1eb-d0765e3ea6c9@amd.com> References: <20170418211612.10190.82788.stgit@tlendack-t1.amdoffice.net> <20170418212223.10190.85121.stgit@tlendack-t1.amdoffice.net> <20170519112703.voajtn4t7uy6nwa3@pd.tnic> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20170519112703.voajtn4t7uy6nwa3@pd.tnic> Content-Language: en-US Sender: owner-linux-mm@kvack.org To: Borislav Petkov Cc: linux-arch@vger.kernel.org, linux-efi@vger.kernel.org, kvm@vger.kernel.org, linux-doc@vger.kernel.org, x86@kernel.org, kexec@lists.infradead.org, linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, linux-mm@kvack.org, iommu@lists.linux-foundation.org, Rik van Riel , =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= , Toshimitsu Kani , Arnd Bergmann , Jonathan Corbet , Matt Fleming , "Michael S. Tsirkin" , Joerg Roedel , Konrad Rzeszutek Wilk , Paolo Bonzini , Larry Woodman , Brijesh Singh , Ingo Molnar , Andy Lutomirski , "H. Peter Anvin" , Andrey Ryabinin List-Id: linux-efi@vger.kernel.org On 5/19/2017 6:27 AM, Borislav Petkov wrote: > On Tue, Apr 18, 2017 at 04:22:23PM -0500, Tom Lendacky wrote: >> Add support to check if SME has been enabled and if memory encryption >> should be activated (checking of command line option based on the >> configuration of the default state). If memory encryption is to be >> activated, then the encryption mask is set and the kernel is encrypted >> "in place." >> >> Signed-off-by: Tom Lendacky >> --- >> arch/x86/kernel/head_64.S | 1 + >> arch/x86/mm/mem_encrypt.c | 83 +++++++++++++++++++++++++++++++++++++++++++-- >> 2 files changed, 80 insertions(+), 4 deletions(-) > > ... > >> +unsigned long __init sme_enable(struct boot_params *bp) >> { >> + const char *cmdline_ptr, *cmdline_arg, *cmdline_on, *cmdline_off; >> + unsigned int eax, ebx, ecx, edx; >> + unsigned long me_mask; >> + bool active_by_default; >> + char buffer[16]; >> + u64 msr; >> + >> + /* Check for the SME support leaf */ >> + eax = 0x80000000; >> + ecx = 0; >> + native_cpuid(&eax, &ebx, &ecx, &edx); >> + if (eax < 0x8000001f) >> + goto out; >> + >> + /* >> + * Check for the SME feature: >> + * CPUID Fn8000_001F[EAX] - Bit 0 >> + * Secure Memory Encryption support >> + * CPUID Fn8000_001F[EBX] - Bits 5:0 >> + * Pagetable bit position used to indicate encryption >> + */ >> + eax = 0x8000001f; >> + ecx = 0; >> + native_cpuid(&eax, &ebx, &ecx, &edx); >> + if (!(eax & 1)) >> + goto out; > > <---- newline here. > >> + me_mask = 1UL << (ebx & 0x3f); >> + >> + /* Check if SME is enabled */ >> + msr = __rdmsr(MSR_K8_SYSCFG); >> + if (!(msr & MSR_K8_SYSCFG_MEM_ENCRYPT)) >> + goto out; >> + >> + /* >> + * Fixups have not been applied to phys_base yet, so we must obtain >> + * the address to the SME command line option data in the following >> + * way. >> + */ >> + asm ("lea sme_cmdline_arg(%%rip), %0" >> + : "=r" (cmdline_arg) >> + : "p" (sme_cmdline_arg)); >> + asm ("lea sme_cmdline_on(%%rip), %0" >> + : "=r" (cmdline_on) >> + : "p" (sme_cmdline_on)); >> + asm ("lea sme_cmdline_off(%%rip), %0" >> + : "=r" (cmdline_off) >> + : "p" (sme_cmdline_off)); >> + >> + if (IS_ENABLED(CONFIG_AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT)) >> + active_by_default = true; >> + else >> + active_by_default = false; >> + >> + cmdline_ptr = (const char *)((u64)bp->hdr.cmd_line_ptr | >> + ((u64)bp->ext_cmd_line_ptr << 32)); >> + >> + cmdline_find_option(cmdline_ptr, cmdline_arg, buffer, sizeof(buffer)); >> + >> + if (strncmp(buffer, cmdline_on, sizeof(buffer)) == 0) >> + sme_me_mask = me_mask; > > Why doesn't simply > > if (!strncmp(buffer, "on", 2)) > ... > > work? In this case we're running identity mapped and the "on" constant ends up as kernel address (0xffffffff81...) which results in a segfault. Thanks, Tom > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org