~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/x86/mm/pgprot.c

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0
  2 
  3 #include <linux/export.h>
  4 #include <linux/mm.h>
  5 #include <asm/pgtable.h>
  6 #include <asm/mem_encrypt.h>
  7 
  8 static pgprot_t protection_map[16] __ro_after_init = {
  9         [VM_NONE]                                       = PAGE_NONE,
 10         [VM_READ]                                       = PAGE_READONLY,
 11         [VM_WRITE]                                      = PAGE_COPY,
 12         [VM_WRITE | VM_READ]                            = PAGE_COPY,
 13         [VM_EXEC]                                       = PAGE_READONLY_EXEC,
 14         [VM_EXEC | VM_READ]                             = PAGE_READONLY_EXEC,
 15         [VM_EXEC | VM_WRITE]                            = PAGE_COPY_EXEC,
 16         [VM_EXEC | VM_WRITE | VM_READ]                  = PAGE_COPY_EXEC,
 17         [VM_SHARED]                                     = PAGE_NONE,
 18         [VM_SHARED | VM_READ]                           = PAGE_READONLY,
 19         [VM_SHARED | VM_WRITE]                          = PAGE_SHARED,
 20         [VM_SHARED | VM_WRITE | VM_READ]                = PAGE_SHARED,
 21         [VM_SHARED | VM_EXEC]                           = PAGE_READONLY_EXEC,
 22         [VM_SHARED | VM_EXEC | VM_READ]                 = PAGE_READONLY_EXEC,
 23         [VM_SHARED | VM_EXEC | VM_WRITE]                = PAGE_SHARED_EXEC,
 24         [VM_SHARED | VM_EXEC | VM_WRITE | VM_READ]      = PAGE_SHARED_EXEC
 25 };
 26 
 27 void add_encrypt_protection_map(void)
 28 {
 29         unsigned int i;
 30 
 31         for (i = 0; i < ARRAY_SIZE(protection_map); i++)
 32                 protection_map[i] = pgprot_encrypted(protection_map[i]);
 33 }
 34 
 35 pgprot_t vm_get_page_prot(unsigned long vm_flags)
 36 {
 37         unsigned long val = pgprot_val(protection_map[vm_flags &
 38                                       (VM_READ|VM_WRITE|VM_EXEC|VM_SHARED)]);
 39 
 40 #ifdef CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS
 41         /*
 42          * Take the 4 protection key bits out of the vma->vm_flags value and
 43          * turn them in to the bits that we can put in to a pte.
 44          *
 45          * Only override these if Protection Keys are available (which is only
 46          * on 64-bit).
 47          */
 48         if (vm_flags & VM_PKEY_BIT0)
 49                 val |= _PAGE_PKEY_BIT0;
 50         if (vm_flags & VM_PKEY_BIT1)
 51                 val |= _PAGE_PKEY_BIT1;
 52         if (vm_flags & VM_PKEY_BIT2)
 53                 val |= _PAGE_PKEY_BIT2;
 54         if (vm_flags & VM_PKEY_BIT3)
 55                 val |= _PAGE_PKEY_BIT3;
 56 #endif
 57 
 58         val = __sme_set(val);
 59         if (val & _PAGE_PRESENT)
 60                 val &= __supported_pte_mask;
 61         return __pgprot(val);
 62 }
 63 EXPORT_SYMBOL(vm_get_page_prot);
 64 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php