09 Aug, 2019

2 commits

  • Secure Encrypted Virtualization is an x86-specific feature, so it shouldn't
    appear in generic kernel code because it forces non-x86 architectures to
    define the sev_active() function, which doesn't make a lot of sense.

    To solve this problem, add an x86 elfcorehdr_read() function to override
    the generic weak implementation. To do that, it's necessary to make
    read_from_oldmem() public so that it can be used outside of vmcore.c.

    Also, remove the export for sev_active() since it's only used in files that
    won't be built as modules.

    Signed-off-by: Thiago Jung Bauermann
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Lianbo Jiang
    Signed-off-by: Michael Ellerman
    Link: https://lore.kernel.org/r/20190806044919.10622-6-bauerman@linux.ibm.com

    Thiago Jung Bauermann
     
  • Now that generic code doesn't reference them, move sme_active() and
    sme_me_mask to x86's .

    Also remove the export for sme_active() since it's only used in files that
    won't be built as modules. sme_me_mask on the other hand is used in
    arch/x86/kvm/svm.c (via __sme_set() and __psp_pa()) which can be built as a
    module so its export needs to stay.

    Signed-off-by: Thiago Jung Bauermann
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Tom Lendacky
    Signed-off-by: Michael Ellerman
    Link: https://lore.kernel.org/r/20190806044919.10622-5-bauerman@linux.ibm.com

    Thiago Jung Bauermann
     

19 Jun, 2019

1 commit

  • Based on 2 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license version 2 as
    published by the free software foundation

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license version 2 as
    published by the free software foundation #

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-only

    has been chosen to replace the boilerplate/reference in 4122 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Enrico Weigelt
    Reviewed-by: Kate Stewart
    Reviewed-by: Allison Randal
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190604081206.933168790@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

07 Nov, 2017

1 commit

  • Provide support for Secure Encrypted Virtualization (SEV). This initial
    support defines a flag that is used by the kernel to determine if it is
    running with SEV active.

    Signed-off-by: Tom Lendacky
    Signed-off-by: Brijesh Singh
    Signed-off-by: Thomas Gleixner
    Reviewed-by: Borislav Petkov
    Tested-by: Borislav Petkov
    Cc: kvm@vger.kernel.org
    Cc: Borislav Petkov
    Cc: Andy Lutomirski
    Link: https://lkml.kernel.org/r/20171020143059.3291-3-brijesh.singh@amd.com

    Tom Lendacky
     

07 Sep, 2017

1 commit

  • The SME encryption mask is for masking 64-bit pagetable entries. It
    being an unsigned long works fine on X86_64 but on 32-bit builds in
    truncates bits leading to Xen guests crashing very early.

    And regardless, the whole SME mask handling shouldnt've leaked into
    32-bit because SME is X86_64-only feature. So, first make the mask u64.
    And then, add trivial 32-bit versions of the __sme_* macros so that
    nothing happens there.

    Reported-and-tested-by: Boris Ostrovsky
    Tested-by: Brijesh Singh
    Signed-off-by: Borislav Petkov
    Acked-by: Tom Lendacky
    Acked-by: Thomas Gleixner
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Thomas
    Fixes: 21729f81ce8a ("x86/mm: Provide general kernel support for memory encryption")
    Link: http://lkml.kernel.org/r/20170907093837.76zojtkgebwtqc74@pd.tnic
    Signed-off-by: Ingo Molnar

    Borislav Petkov
     

18 Jul, 2017

3 commits

  • Changes to the existing page table macros will allow the SME support to
    be enabled in a simple fashion with minimal changes to files that use these
    macros. Since the memory encryption mask will now be part of the regular
    pagetable macros, we introduce two new macros (_PAGE_TABLE_NOENC and
    _KERNPG_TABLE_NOENC) to allow for early pagetable creation/initialization
    without the encryption mask before SME becomes active. Two new pgprot()
    macros are defined to allow setting or clearing the page encryption mask.

    The FIXMAP_PAGE_NOCACHE define is introduced for use with MMIO. SME does
    not support encryption for MMIO areas so this define removes the encryption
    mask from the page attribute.

    Two new macros are introduced (__sme_pa() / __sme_pa_nodebug()) to allow
    creating a physical address with the encryption mask. These are used when
    working with the cr3 register so that the PGD can be encrypted. The current
    __va() macro is updated so that the virtual address is generated based off
    of the physical address without the encryption mask thus allowing the same
    virtual address to be generated regardless of whether encryption is enabled
    for that physical location or not.

    Also, an early initialization function is added for SME. If SME is active,
    this function:

    - Updates the early_pmd_flags so that early page faults create mappings
    with the encryption mask.

    - Updates the __supported_pte_mask to include the encryption mask.

    - Updates the protection_map entries to include the encryption mask so
    that user-space allocations will automatically have the encryption mask
    applied.

    Signed-off-by: Tom Lendacky
    Reviewed-by: Thomas Gleixner
    Reviewed-by: Borislav Petkov
    Cc: Alexander Potapenko
    Cc: Andrey Ryabinin
    Cc: Andy Lutomirski
    Cc: Arnd Bergmann
    Cc: Borislav Petkov
    Cc: Brijesh Singh
    Cc: Dave Young
    Cc: Dmitry Vyukov
    Cc: Jonathan Corbet
    Cc: Konrad Rzeszutek Wilk
    Cc: Larry Woodman
    Cc: Linus Torvalds
    Cc: Matt Fleming
    Cc: Michael S. Tsirkin
    Cc: Paolo Bonzini
    Cc: Peter Zijlstra
    Cc: Radim Krčmář
    Cc: Rik van Riel
    Cc: Toshimitsu Kani
    Cc: kasan-dev@googlegroups.com
    Cc: kvm@vger.kernel.org
    Cc: linux-arch@vger.kernel.org
    Cc: linux-doc@vger.kernel.org
    Cc: linux-efi@vger.kernel.org
    Cc: linux-mm@kvack.org
    Link: http://lkml.kernel.org/r/b36e952c4c39767ae7f0a41cf5345adf27438480.1500319216.git.thomas.lendacky@amd.com
    Signed-off-by: Ingo Molnar

    Tom Lendacky
     
  • Add support to the early boot code to use Secure Memory Encryption (SME).
    Since the kernel has been loaded into memory in a decrypted state, encrypt
    the kernel in place and update the early pagetables with the memory
    encryption mask so that new pagetable entries will use memory encryption.

    The routines to set the encryption mask and perform the encryption are
    stub routines for now with functionality to be added in a later patch.

    Signed-off-by: Tom Lendacky
    Reviewed-by: Thomas Gleixner
    Cc: Alexander Potapenko
    Cc: Andrey Ryabinin
    Cc: Andy Lutomirski
    Cc: Arnd Bergmann
    Cc: Borislav Petkov
    Cc: Brijesh Singh
    Cc: Dave Young
    Cc: Dmitry Vyukov
    Cc: Jonathan Corbet
    Cc: Konrad Rzeszutek Wilk
    Cc: Larry Woodman
    Cc: Linus Torvalds
    Cc: Matt Fleming
    Cc: Michael S. Tsirkin
    Cc: Paolo Bonzini
    Cc: Peter Zijlstra
    Cc: Radim Krčmář
    Cc: Rik van Riel
    Cc: Toshimitsu Kani
    Cc: kasan-dev@googlegroups.com
    Cc: kvm@vger.kernel.org
    Cc: linux-arch@vger.kernel.org
    Cc: linux-doc@vger.kernel.org
    Cc: linux-efi@vger.kernel.org
    Cc: linux-mm@kvack.org
    Link: http://lkml.kernel.org/r/e52ad781f085224bf835b3caff9aa3aee6febccb.1500319216.git.thomas.lendacky@amd.com
    Signed-off-by: Ingo Molnar

    Tom Lendacky
     
  • Add support for Secure Memory Encryption (SME). This initial support
    provides a Kconfig entry to build the SME support into the kernel and
    defines the memory encryption mask that will be used in subsequent
    patches to mark pages as encrypted.

    Signed-off-by: Tom Lendacky
    Reviewed-by: Thomas Gleixner
    Reviewed-by: Borislav Petkov
    Cc: Alexander Potapenko
    Cc: Andrey Ryabinin
    Cc: Andy Lutomirski
    Cc: Arnd Bergmann
    Cc: Borislav Petkov
    Cc: Brijesh Singh
    Cc: Dave Young
    Cc: Dmitry Vyukov
    Cc: Jonathan Corbet
    Cc: Konrad Rzeszutek Wilk
    Cc: Larry Woodman
    Cc: Linus Torvalds
    Cc: Matt Fleming
    Cc: Michael S. Tsirkin
    Cc: Paolo Bonzini
    Cc: Peter Zijlstra
    Cc: Radim Krčmář
    Cc: Rik van Riel
    Cc: Toshimitsu Kani
    Cc: kasan-dev@googlegroups.com
    Cc: kvm@vger.kernel.org
    Cc: linux-arch@vger.kernel.org
    Cc: linux-doc@vger.kernel.org
    Cc: linux-efi@vger.kernel.org
    Cc: linux-mm@kvack.org
    Link: http://lkml.kernel.org/r/a6c34d16caaed3bc3e2d6f0987554275bd291554.1500319216.git.thomas.lendacky@amd.com
    Signed-off-by: Ingo Molnar

    Tom Lendacky